ねぇもりさん、VBAでdatファイル作れるかな?
もり
datファイル?!
datファイル(ダットファイル)とは、拡張子が .dat の「データファイル」です。システムに取り込むデータなどに使われます。
シングルクォート区切りのdatファイル、作ってよ
もり
お、おぅ・・・まかせろ!
エクセルシートのデータから、シングルクォート区切りのdatファイルを作成します。
スポンサーリンク
SaveAsメソッドでdatファイルは作れない?
ファイル保存といえばSaveAsメソッドですが・・・
SaveAsメソッドのフォーマットに「dat」形式は指定できないようです。
もり
仕方ないね…地道な方法で作るわよ
【方針】
- エクセルシートの「各セルの値」にシングルクォートを挟んで連結する
- 最終列の場合、改行する
※ただし、最終行・最終列の場合は改行しない
こんな感じですね↓
値‘値‘値‘値‘値(改行)
値‘値‘値‘値‘値(改行)
値‘値‘値‘値‘値
Excelシートからdatファイルを作成する
アクティブシートのデータからdatファイルを作成するコードです。2行目以降をファイルに出力します。
※1行目から出力したい場合は、19行目 For r = 2 To lastRow
の 2 を 1 に変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub exportDATFile() Dim ws As Worksheet Set ws = ActiveSheet Dim lastRow As Long, lastCol As Long lastRow = ws.Cells(1, 1).End(xlDown).Row lastCol = ws.Cells(1, 1).End(xlToRight).Column Dim datFile As String datFile = ThisWorkbook.Path & "\sample.dat" '拡張子をdatにする Open datFile For Output As #1 '2行目~最終行をdatファイルに出力する Dim r As Long, c As Long Dim val As String For r = 2 To lastRow For c = 1 To lastCol val = ws.Cells(r, c).Value '★ポイント★Printの行末にセミコロン(;)を付与すると改行しない If c <> lastCol Then '最終列以外の場合 Print #1, val & "'"; '改行しない ElseIf r = lastRow And c = lastCol Then '最終行・最終列の場合 Print #1, val; '改行しない Else Print #1, val '改行する End If Next c Next r Close #1 MsgBox "datファイルを出力しました" End Sub |
このコードを実行すると、マクロブックと同じ階層にsample.datが出力されます。メモ帳などのテキストエディタにドラッグ・アンド・ドロップすると、中身を確認できます。
Printメソッドで改行しない方法
各セルの値にシングルクォートを挟んで連結しています。
【ポイント】
- 最終列 → 改行する
- それ以外 → 改行しない
Printステートメントの行末にセミコロン(;)を付けると改行しません。このセミコロンを利用して、各セルの値を改行なしで連結していき、最終列のみ改行するようにします。
.txt(テキストファイル) や .csv(CSVファイル)が一般的で、datファイルはシステムにアップロードする際に使われる珍しい形式のファイルです。
もし作成することがあれば、ぜひこの方法を活用してみてください。
スポンサーリンク
スポンサーリンク