- 締切済み
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のどれかで始まります。数字の個数もファイルによってバラバラです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
>(1)~(3)の処理を行い、最終的に上記のような形で表を作りたいのですが、 >コードを教えていただけないでしょうか。 機能的の説明だけのように思います。 具体的に「何が」できなくてわからないのでしょうか?。 この状態から最終結果コードを待つのは時間の無駄です。 回答者に時間を与える(=考えて作りこませる)のは良くないでしょう。 部分的に回答(即答)をもらってつなげるのが早いと思います。