[[20220804112118]] 『別シートに記載している特定の文字列の後ろの情報』(日本) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートに記載している特定の文字列の後ろの情報を抜き取りたい』(日本)

掲題の件、まずは参考を見て頂いた方が早いと思うので以下に記載します。

◆Router1
config firewall policy

    edit 1
        set uuid 11111
        set srcintf "VLAN"
        set dstintf "Vlink_1
        set srcaddr "1.1.1.0/24"
        set dstaddr "VIP_1.1.1.1" "VIP_10.1.1.1"
        set action ac--
        set schedule "in--"
        set service "HTTP" "HTTPS"
        set logtraffic a
    next
    edit 2
        set uuid 2222
        set srcintf "Vlink_1"
        set dstintf "VLAN"
        set srcaddr "all""1.1.1.1"
        set dstaddr "192.168.2.1/24" "192.168.1.1/24"
        set action ac--
        set schedule "in--"
        set service "HTTP" "HTTPS"
        set logtraffic a
        set nat enable
    next
end

◆Router2
config firewall policy

    edit 1
   ・
   ・
   ・

上記のset srcintfの後ろの"VLAN"という文字列をC9からどんどん下に、
set dstintfの後ろの””の中の文字列をE9からどんどん下に、
set srcaddrの後ろの””の中の文字列をD9からどんどん下に、
set dstaddrの後ろの””の中の文字列をF9からどんどん下に、
set serviceの後ろの””の中の文字列をG9からどんどん下に、
入力していきたいです。
情報自体は「edit」から「next」の塊が100個くらいあります。

情報が記載されてあるシート名は「情報」
情報を書き込みたいシート名は「-」となっております。
誠に申し訳ございませんがお助け願います。
宜しくお願い致します。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


大変なのはわかりますが、回答者にはあなたの画面は見えません。
したがって、行・列を踏まえて説明しないと伝わらないと思ってください。

なお、この掲示板では先頭に半角スペースを入れると、ちょっと小さめの文字で改行されずに表示されるという特徴がありますので、それを利用して例えば↓のように提示されるとよいでしょう。

【情報】シートのレイアウト

     __________A__________        ___B___     _____________________C_______________________
 01  ◆Router1
 02  config firewall policy
 03                               edit 1
 04                                           set uuid 11111
 05                                           set srcintf "VLAN"
 06                                           set dstintf "Vlink_1
 07                                           set srcaddr "1.1.1.0/24"
 08                                           set dstaddr "VIP_1.1.1.1" "VIP_10.1.1.1"
 09                                           set action ac--
 10                                           set schedule "in--"
 11                                           set service "HTTP" "HTTPS"
 12                                           set logtraffic a
 13                               next
 14                               edit 2
 15                                           set uuid 2222
 16                                           set srcintf "Vlink_1"
 17                                           set dstintf "VLAN"
 18                                           set srcaddr "all""1.1.1.1"
 19                                           set dstaddr "192.168.2.1/24" "192.168.1.1/24"
 20                                           set action ac--
 21                                           set schedule "in--"
 22                                           set service "HTTP" "HTTPS"
 23                                           set logtraffic a
 24                                           set nat enable
 25                                next
 26  end
 27  ◆Router2
 28  config firewall policy
 29                                edit 1
 30   ・
 31   ・
 32   ・

【-】シートのレイアウト(結果出力用)
 〜〜〜〜〜〜〜〜

(もこな2) 2022/08/04(木) 12:00


 >set dstaddr "192.168.2.1/24" "192.168.1.1/24"
 の""の中というのは
 〃抜き出す形になればいいのだろうか?
(ねむねむ) 2022/08/04(木) 12:01

 すまない。
 >〃抜き出す形になればいいのだろうか?
            ↓
 どう抜き出す形になればいいのだろうか?
 としてくれ。
(ねむねむ) 2022/08/04(木) 12:20

 PowerQueryならこんな感じでしょうか
 ソースの行の D:\test.txtはコマンドで書き出したテキストファイル名を指定しないといけません
空白の個数とか決め打ちしてるので、調整が必要かもしれません

 let
    ソース = Table.FromColumns({Lines.FromBinary(File.Contents("D:\test.txt"), null, null, 932)}),
    フィルターされた行 = Table.SelectRows(ソース, each ([Column1] <> "    next" and [Column1] <> "config firewall policy" and [Column1] <> "end")),
    置き換えられた値 = Table.ReplaceValue(フィルターされた行," edit ","edit",Replacer.ReplaceText,{"Column1"}),
    置き換えられた値1 = Table.ReplaceValue(置き換えられた値,"set ",",set,",Replacer.ReplaceText,{"Column1"}),
    区切り記号による列の分割 = Table.SplitColumn(置き換えられた値1, "Column1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3"}),
    区切り記号による列の分割1 = Table.SplitColumn(区切り記号による列の分割, "Column1.3", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column1.3.1", "Column1.3.2"}),
    置き換えられた値2 = Table.ReplaceValue(区切り記号による列の分割1," ","",Replacer.ReplaceText,{"Column1.1"}),
    置き換えられた値3 = Table.ReplaceValue(置き換えられた値2,"",null,Replacer.ReplaceValue,{"Column1.1"}),
    下方向へコピー済み = Table.FillDown(置き換えられた値3,{"Column1.1"}),
    フィルターされた行1 = Table.SelectRows(下方向へコピー済み, each ([Column1.2] = "set")),
    削除された列 = Table.RemoveColumns(フィルターされた行1,{"Column1.2"}),
    ピボットされた列 = Table.Pivot(削除された列, List.Distinct(削除された列[Column1.3.1]), "Column1.3.1", "Column1.3.2")
 in
    ピボットされた列
(´・ω・`) 2022/08/04(木) 12:23

みなさま ご指摘、ご回答ありがとうございます。
【情報】シートのレイアウトは全てA列に情報がある形となります。


01 ◆ELMS-CLUBT
02 config firewall policy
03 edit 1
04 set uuid 11111
05 set srcintf "VLAN"
06 set dstintf "Vlink_1
07 set srcaddr "1.1.1.0/24"
08 set dstaddr "VIP_1.1.1.1" "VIP_10.1.1.1"
09 set action ac--
10 set schedule "in--"
11 set service "HTTP" "HTTPS"
12 set logtraffic a
13 next
14 edit 2
15 set uuid 2222
16 set srcintf "Vlink_1"
17 set dstintf "VLAN"
18 set srcaddr "all""1.1.1.1"
19 set dstaddr "192.168.2.1/24" "192.168.1.1/24"
20 set action ac--
21 set schedule "in--"
22 set service "HTTP" "HTTPS"
23 set logtraffic a
24 set nat enable
25 next
26 end
27
28 ◆ELMS-FUKOKU
29 config firewall policy
30 edit 1

【-】シートのレイアウト(結果出力用)
A列は非表示となっています。B列は各列空白です

 B  ---C--- ----B----    ---E--- ----F---- ----G----- 
06    
07   
08 set srcintf set srcaddr set dstintf set dstaddr set service
09 "VLAN" "1.1.1.0/24" "Vlink_1" "VIP_1.1.1.1" "HTTP"
                 "VIP_10.1.1.1"  "HTTPS"
10 "Vlink_1" "all"   "VLAN"  "192.168.2.1/24" "HTTP"
       "1.1.1.1"      "192.168.1.1/24" "HTTPS" 
11
12

分かりづらかったらすみません、、、宜しくお願い致します。
また、私が全くpower Queryの知見が無く、、、できればVBAでお願い致します。
(日本) 2022/08/04(木) 13:31


>ねむねむ様
""ごと抜き取る形でお願い致します。
(日本) 2022/08/04(木) 13:37

てきとうです。
  =IFERROR(SUBSTITUTE(TRIM(SUBSTITUTE(INDEX($A$1:$A$2000,AGGREGATE(15,6,ROW($A$1:$A$2000)/(LEFT(TRIM($A$1:$A$2000),LEN(C$8))=C$8),ROW($A1))),C$8,"")),""" """,""""&CHAR(10)&""""),"")

(わからん) 2022/08/04(木) 13:41


  >06 set dstintf "Vlink_1
 は実際は
 06 set dstintf "Vlink_1"
 なのだろうか?
 また
 >18 set srcaddr "all""1.1.1.1"
 はこの通りなのだろうか、それとも
 18 set srcaddr "all" "1.1.1.1"
 と"と"の間にスペースがあるのだろうか?

 あともこな2さんの
 >なお、この掲示板では先頭に半角スペースを入れると、ちょっと小さめの文字で改行されずに表示されるという特徴がありますので、それを利用して例えば↓のように提示されるとよいでしょう。
 に従えばもっと見やすくなるだろう。
(ねむねむ) 2022/08/04(木) 13:42

 わからんさんの式で実際には別シートとなっているので
 =IFERROR(SUBSTITUTE(TRIM(SUBSTITUTE(INDEX(情報!$A$1:$A$2000,AGGREGATE(15,6,ROW($A$1:$A$2000)/(LEFT(TRIM(情報!$A$1:$A$2000),LEN(C$8))=C$8),ROW($A1))),C$8,"")),""" """,""""&CHAR(10)&""""),"")
 として、セルの書式設定の配置タブで折り返して全体を表示するにチェックを入れてくれ。
(ねむねむ) 2022/08/04(木) 13:48

 【情報】シートのレイアウト
 ------------------A--------------------------------
 01◆Router1
 02config firewall policy
 03    edit 1
 04        set uuid 11111
 05        set srcintf "VLAN"
 06        set dstintf "Vlink_1"
 07        set srcaddr "1.1.1.0/24"
 08        set dstaddr "VIP_1.1.1.1" "VIP_10.1.1.1"
 09        set action ac--
 10        set schedule "in--"
 11        set service "HTTP" "HTTPS"
 12        set logtraffic a
 13    next
 14    edit 2
 15        set uuid 2222
 16        set srcintf "Vlink_1"
 17        set dstintf "VLAN"
 18        set srcaddr "all""1.1.1.1"
 19        set dstaddr "192.168.2.1/24" "192.168.1.1/24"
 20        set action ac--
 21        set schedule "in--"
 22        set service "HTTP" "HTTPS"
 23        set logtraffic a
 24        set nat enable
 25    next
 26end
 27
 28◆ELMS-FUKOKU
 29config firewall policy
 30    edit 1
 31

 【-】シートのレイアウト(結果出力用)

  B  ---C---     -----B----   ----E----     -----F-----     -----G-----
 06    
 07   
 08 set srcintf  set srcaddr   set dstintf   set dstaddr     set service
 09    "VLAN"     "1.1.1.0/24"    "Vlink_1"  "VIP_1.1.1.1"     "HTTP"
                             "VIP_10.1.1.1"    "HTTPS"
 10   "Vlink_1"    "all"       "VLAN"   "192.168.2.1/24"  "HTTP"
            "1.1.1.1"              "192.168.1.1/24"  "HTTPS" 
 11

 >ねむねむ様 もこな2様
 アドバイス通り半角を入れたら見やすくできました!

 以下インライン形式で失礼いたします。
  >06 set dstintf "Vlink_1
 >は実際は
 >06 set dstintf "Vlink_1"
 なのだろうか?

 すみません、、 06 set dstintf "Vlink_1"こちらが正になります。

 >と"と"の間にスペースがあるのだろうか?
 ⇒スペースはありません。-のシートでは「折り返して全体を表示する」
 の機能を使っているので、勝手に改行されるようになっております。

 大変恐縮ですが、何卒引き続きよろしくお願いいたします。

(日本) 2022/08/04(木) 14:02


 >ねむねむ様 わからん様
 ご提示くださった関数を使ってみましたがうまくいかず、、、
 どこのセルに挿入するのが正解でしょうか?試しに9行目のC〜G列に入れてみましたがうまく反映されなかったです、、
(日本) 2022/08/04(木) 14:06

 とりあえずわからんさんの式の微修正
 =IFERROR(SUBSTITUTE(TRIM(SUBSTITUTE(INDEX(情報!$A:$A,AGGREGATE(15,6,ROW($A$1:$A$2000)/(FIND(C$8,情報!$A$1:$A$20000)>0),ROW($A1))),C$8,"")),""" """,""""&CHAR(10)&""""),"")
 -シートのC9セルに上記を入力し右及び下へフィルコピー、その後セルの書式設定の配置タブで
 折り返して全体を表示にチェックを入れるではどうだろうか?

 もし上記でもうまくいかない場合、どううまくいかないか、まったく表示されない、こうなるはずがこうなってしまうなど、
 状況を説明してくれ。
(ねむねむ) 2022/08/04(木) 14:09

 すまない
 =IFERROR(SUBSTITUTE(TRIM(SUBSTITUTE(INDEX(情報!$A:$A,AGGREGATE(15,6,ROW($A$1:$A$2000)/(FIND(C$8,情報!$A$1:$A$2000)>0),ROW($A1))),C$8,"")),""" """,""""&CHAR(10)&""""),"")
 に修正で。
(ねむねむ) 2022/08/04(木) 14:13

>ねむねむ様
ありがとうございます!C〜G列までうまくいきました!
G列だけなぜか◆Router1や、config firewallやedit1などの情報が入力されてしまいます。
どこを修正すればよいのでしょうか?
度々申し訳ございませんが宜しくお願い致します。。
(日本) 2022/08/04(木) 14:21

申し訳ありません、、、C〜F列までうまくいっております。
(日本) 2022/08/04(木) 14:21

 ひとまずG9セルに入力されている式をコピーしてこちらに貼り付けてみてもらえないだろうか?
(ねむねむ) 2022/08/04(木) 14:32

ねむねむ様 以下になります。
=IFERROR(SUBSTITUTE(TRIM(SUBSTITUTE(INDEX(情報!$A:$A,AGGREGATE(15,6,ROW($A$1:$A$2000)/(FIND(G$8,情報!$A$1:$A$2000)>0),ROW($A1))),G$8,"")),""" """,""""&CHAR(10)&""""),"")

(日本) 2022/08/04(木) 14:33


ねむねむ様
G列ですが、どうやらA列の上から情報が入って行っているみたいです。

 【-】シートのレイアウト(結果出力用)の
9行目の結果 ◆Router1
10行目の結果 config firewall
11行目の結果 edit1
12行目の結果 set uuid 11111

引き続きよろしくお願い致します。
(日本) 2022/08/04(木) 14:45


 G8セルには何と入力されてりうだろうか?
 8行目のセルに何も入力されていないとそのような状況となるが。
(ねむねむ) 2022/08/04(木) 14:49

>ねむねむ様
set serviceと確かに入力されています。
無駄なスペースとかは入っていないことは確認しました。
情報のシートからコピーして貼り付けても結果は変わりません、、、
(日本) 2022/08/04(木) 14:53

>ねむねむ様
大変失礼いたしました。
G8にセルだけG7と結合されていました。
結合を解除したら無事反省されました。

ねむねむ様、皆様、本当にありがとうございました!!
(日本) 2022/08/04(木) 14:56


誤)反省 正)反映

本当にありがとうございました!
(日本) 2022/08/04(木) 14:57


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.