• 締切済み

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

仕事で使用するマクロのコードをご教授下さい。 自力でやってみたのですが行き詰ってしまったので、 詳しい方どうぞよろしくお願いします。 ■下ようなテキストデータがあります。  これをエクセルで開き(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行以降には次のファイルのデータを続けて入力していきたいです。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

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

ka2u23
質問者

補足

大変失礼いたしました。 まず↓が私が書いたコードです。 そして、行き詰った点は、 ・「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関数は調べてみます。

関連するQ&A