may the VBA be with you

Excel VBAとか業務自動化とか

テキスト出力マクロ ができるまで

はじめに

外部ファイルとのやりとりとして、txt形式の読込、出力はよく使います。

今回は少しずつ内容を変えながらテキストを連続して出力する、をテーマにお送りします。

イメージ

まず、こういう

f:id:vba-belle-equipe:20160322092919p:plain

「操作盤」シートがあり、


f:id:vba-belle-equipe:20160322093223p:plain

「フォーマット」シートに文章のひな形を書いておいて、


実行すると

f:id:vba-belle-equipe:20160322093325p:plain

こんな感じで、操作盤に定義したテキストが3つ出来上がる、というイメージです。

クリアすべきポイント

  • テキストファイルを出力する
  • 設定の数だけテキストファイル出力を繰り返す
  • テキストの内容を設定に応じて変える

おおざっぱに言うとこんな感じでしょうか。

細かいのが出てきたら、仕方ないからその都度対応する、くらいの心意気で大丈夫です。

テキストファイルを出力する

vba テキストファイル 出力」あたりで検索すれば色々出てきますね。

最低限の記述だと、

Sub test()
  Dim filePath As String
  Dim ff As Long
  filePath = "c:¥test¥test.txt"
  ff = FreeFile
  Open filePath For Output As #ff
  Print #ff, "テストです"
  Close #ff
End Sub

こんな感じで、cドライブの「test」フォルダの中に「テストです」と書かれた「test.txt」が作成されます。

設定の数だけテキストファイル出力を繰り返す

出力するファイルのパス(フォルダ&ファイル名)があれば、テキストファイルが出力できることがわかりました。

ということで、「操作盤」シートに設定した3つのテキストのパスを出せるようにしてみます。

Sub roopTest()
  Dim rootPath As String
  Dim filePath As String
  Dim maxCol As Long
  Dim j As Long
  
  Sheets("操作盤").Activate
  rootPath = Range("B1")
  maxCol = Cells(3, Columns.Count).End(xlToLeft).Column
  For j = 2 To maxCol
    filePath = rootPath & "¥" & Cells(3, j)
    Debug.Print filePath
  Next
End Sub

例によって、最大列をとってfor文で回します。

C:\test\a.txt
C:\test\b.txt
C:\test\c.txt

イミディエイトウインドウで確認できたところで、ひと段落。