テキスト出力マクロ ができるまで その2
シートの準備
前回と同じく、シートは下の2つ。
操作盤
出力先フォルダ、ファイル名等を設定しています。
フォーマット
文章のひな形を設定しています。
フォーマットの文章を出力する
1行出力
テキストファイルを開いて、1行書いて、閉じるまでの流れは
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
こんな感じでした。
複数行出力
Open、Closeは1回でいいので、
Print #ff, "ほにゃらら"
この部分を繰り返します。
デバッグプリント
まずは基本に忠実に、「フォーマット」にあるひな形を全てイミディエイトウインドウに出力してみましょう。
Sub test2() Dim i As Long Dim maxRow As Long Sheets("フォーマット").Activate maxRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To maxRow Debug.Print Cells(i, 1) Next End Sub
最大行をとって、Debug.Printです。
[[名前]]は1個[[値段]]円の[[品物]]を[[個数]]個買いました。 全部でいくらでしょう。 正解:[[合計]]円
出ました。
ファイルに出力
Debug.Printしていた部分を、テキストファイルに出力します。
Sub test3() Dim filePath As String Dim ff As Long Dim maxRow As Long Dim i As Long filePath = "c:¥test¥test.txt" ff = FreeFile Open filePath For Output As #ff Sheets("フォーマット").Activate maxRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To maxRow Print #ff, Cells(i, 1) Next Close #ff End Sub
こんな感じでしょうか。
cドライブの「test」フォルダの中の「test.txt」に、ひな形がそのまま出力されるようになりました。
フォーマットの一部を置換する
とりあえずフォーマットのまま出力できるようになりました
[[名前]]は1個[[値段]]円の[[品物]]を[[個数]]個買いました。 全部でいくらでしょう。 正解:[[合計]]円
が、このままだと悲しいので、名前等を設定に応じて変えられるようにしたいところです。
テキストの置換
「vba 文字列 置換」あたりで検索すると、Replaceを使えばいいことがわかります。
Replace("置換対象の文字列全体", "置換したい文字列", "置換後の文字列")
こんな感じです。
ひな形の中で、項目に [[ ]] がついているのが、置換したい部分です。
とりあえず、 [[名前]] の部分を置換してみましょう。
Sub test4() Dim str As String str = "[[名前]]は1個[[値段]]円の[[品物]]を[[個数]]個買いました。" Debug.Print "置換前の文字列 >> " & str str = Replace(str, "[[名前]]", "アナキン・スカイウォーカー") Debug.Print "置換後の文字列 >> " & str End Sub
置換前の文字列 >> [[名前]]は1個[[値段]]円の[[品物]]を[[個数]]個買いました。 置換後の文字列 >> アナキン・スカイウォーカーは1個[[値段]]円の[[品物]]を[[個数]]個買いました。
はい。できました。
まとめ
[[ ]] の部分は何でもよかったんです。
これにしたばっかりに、はてな記法で若干めんどくさいことになりました。
まあそれはそれとして、残った課題は
- 全ての項目を置換する
- テキストごとの設定にあわせて置換する
- 設定された数だけ、置換したテキストを作成する
こんなところでしょうか。
もうちょっとだけ続きます。