• 締切済み

VBA初心者です。他でも質問させていただいたのですが、こちらでも質問さ

VBA初心者です。他でも質問させていただいたのですが、こちらでも質問させていただきます。 ■下ようなテキストデータがあります。  これをエクセルで開き(1)~(3)の処理をするマクロを作りたいです。 ・エクセルで開くとA列に1文として入力されています ・マクロが完成したら、数百個のファイルでこのマクロを動かす予定です ・OUTPUT側のファイル(シート)は1つにまとめたいです ! hostname ABC ! vlan internal allocation policy ascending vlan access-log ratelimit 2000 ! vlan 220-221,306 vlan 2105-2107,3100-3103 ! (1)「vlan 数字」から始まる行だけ取ってきたい (2)「-」は数字の連番を表しているが、間に入る数の分だけ空白セルを入れたい  例:220-221なら220,221(空白セル無し)    3100-3103なら3100,  ,  ,3103  ※できれば3101,3102など間の数字を自動入力したい(出来なければ後から手入力します)  ※区切り文字でセルを分ける、横一列を縦一列に入れ替える作業は出来ました。 (3)「hostname ABC」の"ABC"部分だけ取ってきたい  ※C列を参照して、C列の行数分B列に入力したい      A     B     C     D 1        ホスト名  vlan ID 2          ABC    220 3          ABC    221 4          ABC    306 5          ABC    2105 6          ABC    2106 7          ABC    2107 8          ABC    3100 9           ABC    3101 10         ABC    3102 11         ABC    3103 (1)~(3)の処理を行い、最終的に上記のような形で表を作りたいのですが、 コードを教えていただけないでしょうか。 (4)12行目以降には次のファイルのデータを入力していきたい。 ↓は私が書いたコードです。 ※文字数が足らないのでところどころ省略してます Sub Macro()  WorkBooks.OpenText Filenama:="ABCDEFG.log"  For i = 1 To 1000   Workbooks(input_book).Sheets(1).Activate   If Range("A" & i) = "" Then     Exit For   '「vlan 」で始まる行を探す   ElseIf Left(Range("A" & i), 5) = "vlan " Then Workbooks(i_book).Sheets(1).Range("A" & i).Copy Workbooks(o_book).Sheets(1).Activate Workbooks(o_book).Sheets(1).Range("F" & o_gyo).Select ActiveSheet.Paste   '区切り記号でセルを分ける処理(省略します)   '横に展開したものを縦に貼り付ける処理(省略します)   End If  Next i  For i = 1 To 1000   Workbooks(i_book).Sheets(1).Activate   If Range("A" & i) = "" Then    Exit For   '「hostname 」で始まる行を探す   '区切り記号でセルを分ける   '横に展開したものを縦に貼り付ける   ※3つとも省略します   End If  Next i  Workbooks("ABCDEFG.log").Close End Sub ■補足■ ・フォルダにあるファイルは全て処理します ・テキスト内容は!の上下にも複数行英文があります。vlan、hostname始まりの行以外は処理しません ・「vlan 」の後がinternal、access-の場合は処理を飛ばします。 ・「vlan 」の後に続く数字は1~9のどれかで始まります。数字の個数もファイルによってバラバラです。

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

>(1)~(3)の処理を行い、最終的に上記のような形で表を作りたいのですが、 >コードを教えていただけないでしょうか。 機能的の説明だけのように思います。 具体的に「何が」できなくてわからないのでしょうか?。 この状態から最終結果コードを待つのは時間の無駄です。 回答者に時間を与える(=考えて作りこませる)のは良くないでしょう。 部分的に回答(即答)をもらってつなげるのが早いと思います。

関連するQ&A