VBAではテキストファイルを作成することができます。
今回は日付.txtという日次で使えるようなファイルを複数日文出力するマクロを
作っていきましょう。
例えば、今日が20200126だとしたら、3週間分の20200215までのファイルを作成します。
20200126.txt ~ 20200215.txtというファイルです。
■ポイント
ファイルを作成するには、
Open ファイル名(フルパス) For Output As #番号もしくは、Open ファイル名(フルパス) For Append As #番号
とします。番号は1から割り当ててください。
これは、ファイルを作成するというよりは、対象のファイルを開く(選択する)という意味合いになりますが、対象のファイルが存在しない場合は、新規で作成されます。
今回はこれを利用してファイルを作成していきます。
OutputとAppendの違いは、既存のファイルがあった場合の動作が異なります。
Outputの場合は新規のファイルで上書きされてしまいます。
Appendの場合は、追記で書き込むことができます。
例えば、マクロを利用して、日付ファイルを生成しました。
日付ファイルに内容を書き込みました。
また、同じようにマクロを動かしました。
この時、Outputで作成した場合は、同名ファイルがあった場合、
上書きされてしまいますので、元のファイルの内容があった場合、消失してしまいます。
appendで作成した場合は、追記されますので、元のファイルの内容は残されたままとなります。
ということで、今回はappenndを利用した方がいいでしょう。
■回答
Sub Q18_Answer()
Dim buf As String, cnt As Long, Path As String, i As Integer
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
Path = .SelectedItems(1)
End If
End With
For i = 0 To 20
Open Path & "\" & Format(Date + i, "yyyymmdd") & ".txt" For Append As #1
Close #1
Next i
End Sub
■解説
今回は、出力先をダイアログから指定できるようにしました。
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
Path = .SelectedItems(1)
End If
End With
この記述で、フォルダを選択し、選択されたフォルダのパスが変数Pathに格納できます。
あとは、Forループで、テキストファイルを作成処理を複数回実行するだけです。
具体的には、以下の記述でファイルを作成しています。
Open Path & "" & Format(Date + i, "yyyymmdd") & ".txt" For Append As #1
実行結果は以下のとおりです。
実行すると、フォルダ選択ダイアログが出力されますので、今回はデスクトップ配下に作成した新しいフォルダーを選択しています。
OKボタンを押すと、以下のように無事ファイルが生成されました。
ただし、フォルダ選択ダイアログで、キャンセルを選択するとパスがないので、
エラーとなってしまいます。そこは別途エラー処理を記述するなど、対処が必要となります。