Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8 / 13057 ツリー ←次へ | 前へ→

【79505】コンフィグからパラメータシート作成について 17/11/20(月) 20:49 質問[未読]
【79507】Re:コンフィグからパラメータシート作成に... γ 17/11/21(火) 21:21 発言[未読]
【79508】Re:コンフィグからパラメータシート作成に... 17/11/21(火) 22:45 発言[未読]
【79509】Re:コンフィグからパラメータシート作成に... γ 17/11/21(火) 23:03 発言[未読]
【79510】Re:コンフィグからパラメータシート作成に... 17/11/21(火) 23:26 お礼[未読]
【79511】Re:コンフィグからパラメータシート作成に... γ 17/11/21(火) 23:34 発言[未読]

【79505】コンフィグからパラメータシート作成につ...
質問    - 17/11/20(月) 20:49 -

引用なし
パスワード
   config.txt

edit 1234
set uuid 1a1a23d4-e567-8f90-1a11-ab1acd23e456f
set srcintf "VLAN8001"
set srcintf "VLAN9001"
set srcaddr "192.168.0.2" "192.168.0.3" "192.168.1.2"
set dstaddr "172.16.0.1" "172.16.0.2"
set action accept
set status disable
set schedule "always"
set service "DNS" "HTTP"
set utm-status enable
set logtraffic all
set ips-sensor "AAA"
set profile-protocol-options "BBB"
set ssl-ssh-profile "CCC"
next
edit 5678
set uuid 2b2b45e5-f123-4aa12-2b22-bc2bde45f123a
set srcintf "any"
set srcintf "VLAN6001"
set srcaddr "192.168.1.4" "192.168.1.5"
set dstaddr "172.31.1.7" "172.31.1.8"
set action accept
set schedule "always"
set service "MAIL"
set utm-status enable
set logtraffic all
next


sheet2
  A  B                   C     D     E                     F               O
1 ID  uuid                 srcintf  srcintf  srcaddr                  dstaddr          ・・・ ssl-ssh-profile
2 1234 1a1a23d4-e567-8f90-1a11-ab1acd23e456f "VLAN8001" "VLAN9001" "192.168.0.2" "192.168.0.3" "192.168.1.2" "172.16.0.1" "172.16.0.2" ・・・ "CCC"
3 5678 2b2b45e5-f123-4a12-2b22-bc2bde45f123a "any"   "VLAN6001" "192.168.1.4" "192.168.1.5"        "172.31.1.7" "172.31.1.8" ・・・   

VBAがわからないため、得意な方にご教授頂ければありがたいです。

config.txtのedit〜nextまでを1固まりとして、大体500行くらいのconfigがあり、これをテキストでsheet1に
手動で貼り付けます。
このconfig.txtの中身を、sheet2にパラメータシートとして作成したいと思っています。

そのため、editを項目名でIDとしてA1に、uuidをB1に、srcintfをC1に、という形で、sheet2のようにedit1234の順に並べていき、
O1にssl-ssh-profileまで項目名として1行目に設定したあと、
中の値を2列目以降に書き出し、nextまで転記したら、次の行に移り転記を繰り返し、最後のnextまで行ったら終了する
というVBAマクロを用意したいと考えています。
edit5678のように1列目で定義したフィールドが無い場合にはスキップで構いません。

※sheet1はconfig、sheet2はparameterという名前にリネームしたいです。

お手数おかけしますが、宜しくお願い致します。

【79507】Re:コンフィグからパラメータシート作成...
発言  γ  - 17/11/21(火) 21:21 -

引用なし
パスワード
   srcintf がふたつあるのはなぜですか?(destinationじゃなくて?)
同一キーで複数のデータがあるときの扱いは?

内容的には、IT関連のものですよね。
これは下請けに出しているってことですか?

【79508】Re:コンフィグからパラメータシート作成...
発言    - 17/11/21(火) 22:45 -

引用なし
パスワード
   ▼γ さん:

ご返信ありがとうございます。

ご指摘の通り、dstintfでした。下に修正版を記載します。

configからパラメータシートの作成をやらなきゃならないんですが、内容的にはこれをベースに内容を修正して、config全体を抽出したいと考えています。

edit 1234
set uuid 1a1a23d4-e567-8f90-1a11-ab1acd23e456f
set srcintf "VLAN8001"
set dstintf "VLAN9001"
set srcaddr "192.168.0.2" "192.168.0.3" "192.168.1.2"
set dstaddr "172.16.0.1" "172.16.0.2"
set action accept
set status disable
set schedule "always"
set service "DNS" "HTTP"
set utm-status enable
set logtraffic all
set ips-sensor "AAA"
set profile-protocol-options "BBB"
set ssl-ssh-profile "CCC"
next
edit 5678
set uuid 2b2b45e5-f123-4aa12-2b22-bc2bde45f123a
set srcintf "any"
set dstintf "VLAN6001"
set srcaddr "192.168.1.4" "192.168.1.5"
set dstaddr "172.31.1.7" "172.31.1.8"
set action accept
set schedule "always"
set service "MAIL"
set utm-status enable
set logtraffic all
next

【79509】Re:コンフィグからパラメータシート作成...
発言  γ  - 17/11/21(火) 23:03 -

引用なし
パスワード
   参考例です。

Sub test()
  Dim dic As Object
  Dim re As Object
  Dim s As String
  Dim filename As String

  Dim mat() As String ' 結果を書き出すための配列
  
  Dim k As Long
  Dim p As Long
  Dim matches As Object
  Dim s1 As String
  Dim s2 As String
  Dim s3 As String

  Set dic = CreateObject("Scripting.Dictionary")

  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "edit (\d+)|\s*set\s*(\S*)\s*(.*)"

  filename = "D:\MyDocuments\201711\test.txt" '■要修正

  k = 0
  p = 1
  
  Open filename For Input As #1
  Do While Not EOF(1)
    Line Input #1, s
    If s <> "next" And s <> "" Then
      Set matches = re.Execute(s)
      s1 = matches(0).SubMatches(0)  ' editの後の数値
      s2 = matches(0).SubMatches(1)  ' キー項目
      s3 = matches(0).SubMatches(2)  ' 対応する値
      
      If s1 <> "" Then
        k = k + 1
        ReDim Preserve mat(1 To 20, 1 To k) '項目数は20個が上限とした
        mat(1, k) = s1
      Else
        If Not dic.exists(s2) Then
          p = p + 1
          dic(s2) = p
        End If
        mat(dic(s2), k) = s3
      End If
    End If
  Loop
  Close #1
  
  '結果の書き出し
  [A1].Value = "ID"
  [B1].Resize(1, p - 1) = dic.keys
  [A2].Resize(k, 20).Value = Application.Transpose(mat)
End Sub

修正依頼にはお応えできませんので、悪しからず。

【79510】Re:コンフィグからパラメータシート作成...
お礼    - 17/11/21(火) 23:26 -

引用なし
パスワード
   ▼γ さん:

回答ありがとうございます。

残念ながら、エラーの修正方法が分かりませんでした。
多分、実行押したら慣れている方ならできるんだろうなーと思いますが・・・。

私は手でパラメータシートの作成頑張ります。(笑)

ご対応、ありがとうございました!
クローズします!

【79511】Re:コンフィグからパラメータシート作成...
発言  γ  - 17/11/21(火) 23:34 -

引用なし
パスワード
   ちなみに、実行が成功することを確認して投稿しています。

8 / 13057 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free