こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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のどれかで始まります。数字の個数もファイルによってバラバラです。

投稿日時 - 2010-10-22 10:47:00

QNo.6267311

困ってます

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>(1)~(3)の処理を行い、最終的に上記のような形で表を作りたいのですが、
>コードを教えていただけないでしょうか。

機能的の説明だけのように思います。
具体的に「何が」できなくてわからないのでしょうか?。

この状態から最終結果コードを待つのは時間の無駄です。
回答者に時間を与える(=考えて作りこませる)のは良くないでしょう。

部分的に回答(即答)をもらってつなげるのが早いと思います。

投稿日時 - 2010-10-23 09:38:49

あなたにオススメの質問