ホテルを選ぶとき、これだけは譲れない条件TOP3は?

仕事で使用するマクロのコードをご教授下さい。

自力でやってみたのですが行き詰ってしまったので、
詳しい方どうぞよろしくお願いします。

■下ようなテキストデータがあります。
 これをエクセルで開き(1)~(3)の処理をするマクロを作りたいです。
・エクセルで開くとA列にそれぞれ1文として入力されています
・マクロが完成したら、数百個のファイルでこのマクロを動かす予定です
・OUTPUT側のファイル(シート)は1つにまとめたいです

!
hostname ABCDEFG
!
vlan internal allocation policy ascending
vlan access-log ratelimit 2000
!
vlan 220-221
!
vlan 777,827-828
!
vlan 2105-2107,3100-3103
!

(1)「vlan 数字」から始まる行だけ取得したい(数字だけ取得したい)
(2)「-」は数字の連番を表しているが、間に入る数の分だけ空白セルを入れたい
 例:220-221なら220,221(空白セル無し)
   3100-3103なら3100,  ,  ,3103
 ※できれば3101,3102など間の数字を自動入力したい(出来なければ後から手入力します)
 ※区切り文字でセルを分ける、横一列を縦一列に入れ替える作業は出来ました。
(3)「hostname ABCDEFG」の"ABCDEFG"部分だけ取得したい
 ※C列に入力されている行数分B列に入力したい

     A     B     C     D
1         ホスト名  vlan ID
2         ABCDEFG   220
3         ABCDEFG   221
4         ABCDEFG   777
5         ABCDEFG   827
6         ABCDEFG   828
7         ABCDEFG   2105
8         ABCDEFG   2106
9         ABCDEFG   2107
10        ABCDEFG   3100
11        ABCDEFG   3101
12        ABCDEFG   3102
13        ABCDEFG   3103

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

また、14行以降には次のファイルのデータを続けて入力していきたいです。

A 回答 (1件)

>行き詰ってしまったので


何に行き詰まったのですか。丸投げになっていてあまえています。
まず日本後文章で処理を書き上げて見るのが良いと思う。
(昔はフローチャートを書くのが慣わしだったが)。この段階で良くステップや判別の漏れなど考え抜くべきだ。
(下記が大筋正しいと思うが、仕事が私にはわからないから、修正する点が無いかチェックのこと)
エクセルで読み込まないで、テキストファイルのままで処理を考えた。どちらも中心処理は余り変わらないが。
レコード(1行のこと)を読む。
そして
(1)先頭が!は読み飛ばす。(処理しないで、次のレコードを読みに行く)
(2)先頭からhostnameなら、その後の部分をスト名と言う変数に保存
(3)先頭がvlanなら
  続きがinternal か access-なら読み飛ばす(これでよいか、ここらは仕事を知らないとこれで良いかは判らないが)
  続きが数字なら下の処理を行う
    カンマでSplit(Split関数を使う)。配列的なデータになる。
    分離されたそれぞれについて、
     ハイフンでスプリットする。Uboundを調べると1項目か複数かわかる。
       1項目の場合ーーーホスト名+その番号でレコードを書き出し
       複数項目の場合ーー最初の項目数字から最後の項目数字までForNextで、ホスト名+         その番号でレコードを書き出しを繰り返し。
全行の処理が終わればインプットファイルはクローズ
まず1ファイルで作成したコードをテストして完成させる。
ーーー
さらに外枠として、フォルダのファイルを読み、質問のファイルを選別し、ファイル名がわかればそのファイルを開いて、上記処理対象とする。
フォルダに在るファイルの選別はどうするのか。フォルダに在るファイルはすべて処理対象にするのか。そんなことも質問に書いてない。
フォルダのファイルをすべて読むコードは、良く質問に出るが、知ってますか。
Googleなどで「フォルダ すべてのファイル VBA」で照会。
テキストファイルを読み書きするコードは知っているか。
Googleで「テキストファイル 読む VBA」で照会。読むを書くと変えて照会。
こういう要素技術から勉強しないとだめ。
この点で質問するなら判るが、全体の質問になっているのは頼りすぎ。
Split関数Ubound関数もGoogleで調べると良い。

この回答への補足

大変失礼いたしました。
まず↓が私が書いたコードです。
そして、行き詰った点は、
・「vlan 」行でスペースの次がアルファベットだった場合は処理を飛ばす
・「-」があった場合に空白セルを追加する処理(入れない場合もありますが)
・C列を参照してB列にホスト名を入力する処理

Dim i As Integer
Dim input_book As String
Dim output_book As String
Dim output_gyo As String

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(input_book).Sheets(1).Range("A" & i).Copy
   Workbooks(output_book).Sheets(1).Activate
   Workbooks(output_book).Sheets(1).Range("F" & output_gyo).Select
   ActiveSheet.Paste

   '区切り記号でセルを分ける
   Application.CutCopyMode = False
   Selection.TextToColumns Destination:=Workbooks(output_book).Sheets(1).Range ("F" & output_gyo), _
   DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
   ConsecutiveDelimiter:=True,Tab:=False, _
   Semicolon:=False, Comma:=True, Space:=True, Other:=True, OtherChar:="-", _
   FieldInfo:=Array(Array(1, 1), Array(2, 1)), _
   TrailingMinusNumbers:=True

   '横に展開したものを縦に貼り付ける
   Workbooks(output_book).Sheets(1).Range("G1:Z1").Select
   Selection.Copy
   Workbooks(output_book).Sheets(1).Columns("C:C").Select
   Selection.SpecialCells(xlCellTypeBlanks).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
   SkipBlanks:=False, Transpose:=True
   Range("F1:Z1").Select
   Application.CutCopyMode = False
   Selection.ClearContents

  End If

 Next i

 For i = 1 To 1000
  Workbooks(input_book).Sheets(1).Activate

  If Range("A" & i) = "" Then
   Exit For

  '「hostname 」で始まる行を探す
  ※vlan 時と同じ処理を書きました

   '区切り記号でセルを分ける(上と同じ処理なので省きます)

   '横に展開したものを縦に貼り付ける(上と同じ処理なので省きます)

  End If
 Next i

  Workbooks("ABCDEFG.log").Close

End Sub

■補足■
・フォルダにあるファイルは全て処理します
・テキスト内容は!の上下にも複数行英文があります。vlan、hostname始まりの行以外は処理しない
・「vlan 」の後がinternal、access-の場合は処理を飛ばします。
・「vlan 」の後に続く数字は1~9のどれかで始まります。数字の個数もファイルによってバラバラです。


Split関数とUbound関数は調べてみます。

補足日時:2010/10/21 16:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報