問い合わせ内容
いつものごとく関連部門からExcelについての問い合わせがありました。
拡張子が”.dat”のデータをExcelで読込みたいのだけど、どうやったらいいの?
通常であれば1行ごとに改行コードがあるため、区切り文字を指定して読み込めば何とかなるのではと思い
そのファイルをメールで送信して
わかりました、メールで送信します。
そのファイルを見て”甘かった”というのが感想でした。
カンマどころか、区切り文字にできそうな文字もなければ、改行コードもなく、普通に読み込んでしまうと、ひとつのセルに格納されてしまう厄介なファイルでした。 さらには、ひとつのセルには収まらない長さのデータでした。
VBAでプログラムを作成するしかないですね。
お願いします。どのくらいでできる?
げっ!
改行コードのないファイルを読み込んでシートに貼り付けるプログラムを作成する
プログラムの構成
- 読み込むデータのファイルレイアウトを定義する
- 変数を定義する
- 読み込むファイルを選択する
- ファイルサイズに到達するまで1レコード単位に分割しながらデータを読み込む
- シートに書き出す
実際のコーデイング
レコードレイアウトの定義
Option Explicit
Private Type 仕分マスター
便 As String * 1 ‘ 便
店 As String * 6 ‘ 店番号
ゾーン As String * 2 ‘ゾーン
棚 As String * 2 ‘棚
バッファ As String * 5 ‘バッファ
End Type
実行するプログラムのコーデイング
Sub マスター読み込み()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Const レコード長 = 16 ← 1レコードに該当する長さ
Dim 読込ファイル As String ← 読み込むファイル名
Dim ファイルサイズ As Long ← 読み込むファイルのファイルサイズ
Dim 読込位置 As Long
Dim 出力行 As Long
Dim 出力レイアウト As 仕分マスター
Dim マスター(2000, 0) As Variant
‘シートをクリアする
Sheets(1).Range(“a:a”).ClearContents
MsgBox “読み込むファイルを選んで下さい”
読込ファイル = Application.GetOpenFilename(“データ,*.dat?”)
If 読込ファイル <> “False” Then
Open 読込ファイル For Binary As #1
ファイルサイズ = LOF(1)
読込位置 = 1 ‘読み込み位置
出力行 = 1 ‘1行目から書き込み開始
Do Until 読込位置 >= ファイルサイズ ← ファイルサイズ以上になるまでデータを読み込む
Get #1, 読込位置, 出力レイアウト
マスター(出力行, 0) = 出力レイアウト.便 & 出力レイアウト.ゾーン & 出力レイアウト.棚 & 出力レイアウト.店
読込位置 = 読込位置 + レコード長
出力行 = 出力行 + 1
Loop
close #1
sheets(1).Range (“A1:A” & 出力行) = マスター ← 2次元配列のデータをワークシートに書き出す
Else
MsgBox “読込ファイルの指定がキャンセルされました”, vbOKOnly
End If
endsub:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
完成