Excelのデータを他のシステムにインポートする際など、特定の範囲を「タブ区切り」のテキストファイル(.txt
)形式で出力したいというニーズは少なくありません。
毎回手作業でコピーして、メモ帳に貼り付けて保存…といった作業は、手間がかかる上にミスも発生しやすくなります。
この記事では、Excel VBAマクロを使い、シート上の指定した範囲を簡単な操作でテキストファイルとしてエクスポートする方法を、コードの解説付きで丁寧にご紹介します。
完成したVBAコード
まずは完成したコードです。このVBAコードを標準モジュールにコピー&ペーストすれば、すぐに試すことができます。
Sub ExportRangeToTextFile()
' 変数を宣言します
Dim exportArea As Range
Dim tempWb As Workbook
' --- 設定箇所 ここから ---
' テキストに出力したいセル範囲を指定します
' この例では「データシート」という名前のシートの、C3からJ15の範囲を指定しています
Set exportArea = ThisWorkbook.Worksheets("データシート").Range("C3:J15")
' --- 設定箇所 ここまで ---
' エラーが発生しても処理を続ける準備
On Error Resume Next
' 指定したシートが存在するか確認
If exportArea Is Nothing Then
MsgBox "指定されたシートまたは範囲が見つかりません。" & vbCrLf & _
"コード内のシート名やセル範囲を確認してください。", vbExclamation
Exit Sub
End If
' エラー処理を元に戻す
On Error GoTo 0
' 新しいワークブックを一時的に追加します
Set tempWb = Workbooks.Add
' 指定した範囲を、新しいワークブックの最初のシートのA1セルにコピーします
exportArea.Copy tempWb.Worksheets(1).Range("A1")
' 新しいワークブックをタブ区切りのテキスト形式で保存します
' ファイル名は「ExportedData.txt」とし、マクロを実行したExcelファイルと同じフォルダに保存されます
tempWb.SaveAs ThisWorkbook.Path & "\ExportedData.txt", FileFormat:=xlText
' 保存した一時的なワークブックを、変更を保存せずに閉じます
tempWb.Close SaveChanges:=False
' 完了メッセージを表示します
MsgBox "テキストファイルへの書き出しが完了しました。"
End Sub
コードの詳しい解説
上記コードがどのような処理を行っているのか、ステップごとに見ていきましょう。
変数の宣言
Dim exportArea As Range
Dim tempWb As Workbook
はじめに、マクロ内で使用する「変数」(データを入れておく箱)を用意します。
- exportArea: 書き出したいセル範囲の情報を格納するための変数です。
- tempWb: テキストファイルとして保存するための一時的なワークブック情報を格納するための変数です。
出力範囲の指定
Set exportArea = ThisWorkbook.Worksheets("データシート").Range("C3:J15")
ここで、テキストファイルとして出力したいデータの範囲を具体的に指定します。サンプルコードでは**「データシート」という名前のシートの、C3セルからJ15セルの範囲**を指定しています。
ご自身のExcelファイルに合わせて、"データシート"
の部分や"C3:J15"
の部分を自由に変更してください。
一時的なブックへのコピー
Set tempWb = Workbooks.Add
exportArea.Copy tempWb.Worksheets(1).Range("A1")
指定した範囲のデータだけを正確にファイル出力するため、まずWorkbooks.Add
で新しい空のワークブックを作成します。そして、exportArea.Copy
を使い、指定したセル範囲のデータをその新しいブックに丸ごとコピーしています。
テキスト形式で保存
tempWb.SaveAs ThisWorkbook.Path & "\ExportedData.txt", FileFormat:=xlText
この行が、ファイル保存処理の心臓部です。SaveAs
メソッドを使って、先ほどデータをコピーした一時的なブックを保存します。
ThisWorkbook.Path & "\ExportedData.txt"
ThisWorkbook.Path
で、このVBAマクロが書かれているExcelファイルが保存されているフォルダの場所を取得し、そこに「ExportedData.txt」というファイル名で保存するよう指定しています。ファイル名は自由に変更可能です。FileFormat:=xlText
これが最も重要な引数です。保存形式としてxlText
を指定することで、**各セルの値がタブで区切られたテキストファイル(タブ区切りテキスト)**として保存されます。
後処理
tempWb.Close SaveChanges:=False
MsgBox "テキストファイルへの書き出しが完了しました。"
テキストファイルの作成が終わったので、作業用に開いていた一時的なブック(tempWb
)は不要になります。Close
メソッドで閉じますが、その際にSaveChanges:=False
とすることで、保存確認のダイアログを表示させずに静かに閉じることができます。
最後に完了メッセージを表示して、一連の処理は終了です。
カスタマイズのポイント
このマクロをご自身の業務で使うには、主にコードの上部にある「設定箇所」を書き換えるだけで対応できます。
- シート名:
ThisWorkbook.Worksheets("データシート")
の"データシート"
の部分を、実際のシート名に変更します。 - セル範囲:
.Range("C3:J15")
の"C3:J15"
の部分を、書き出したいセル範囲のアドレスに変更します。 - ファイル名:
"\ExportedData.txt"
の"ExportedData.txt"
の部分を、お好きな出力ファイル名に変更します。
まとめ
今回は、VBAを使ってExcelの特定範囲をタブ区切りのテキストファイルとして書き出す方法をご紹介しました。
このマクロを一度設定しておけば、ボタン一つで定型的なファイル出力作業が完了するため、手作業によるミスをなくし、業務時間を大幅に短縮できます。ぜひご活用ください。