#094 | ユーザー定義型による固定長テキストファイルの読み込み | VBA | |
固定長のテキストファイルは、もしテーブルとしてインポートするのであれば"Docmd.TransferText"を使いかつ引数に「インポート定義(注)」を指定することで読み込むことができます。しかし、1件読み込むごとにデータを加工しながらテーブルに書き込むような場合には"Docmd.TransferText"は使えません。そのような場合にはVBAで直接テキストファイルを開いて読み込むことになりますが、そのとき、ユーザー定義型の変数を使うとインポート定義に似た設定が一括して行えますので、後でデータを加工する際のフィールドの認識が非常に簡単になります。 ※「インポート定義」:手動によるインポート操作では、固定長テキストファイルに対してフィールドとして区切る位置や、テーブルに保存する際の各フィールド名やデータ型を指定しますが、インポート定義はその設定情報を保存したものです。 ●ユーザー定義型を用いない場合 Dim strSyain As String
※社員マスター.txtでは「氏名」は漢字で入力されています。そのためMid$でフィールドを区切ると、漢字の文字数とバイト数にずれが生じてしまいます。そのためここではStrConv関数を使ってUnicodeからの変換をを行ってから文字位置をカウントするようにしています。すべて半角で構成されている場合には、その心配はありません。Open "社員マスター.txt" For Input As #1 Do Until EOF(1) Line Input #1, strSyain strSyain = StrConv(strSyain, vbFromUnicode) '社員番号 Debug.Print StrConv(MidB$(strSyain, 1, 3), vbUnicode) '氏名 Debug.Print StrConv(MidB$(strSyain, 4, 15), vbUnicode) 'カタカナ Debug.Print StrConv(MidB$(strSyain, 19, 15), vbUnicode) '電話番号 Debug.Print StrConv(MidB$(strSyain, 34, 13), vbUnicode) Loop Close #1 ●ユーザー定義型を用いた場合 Type tEmplyee 'ここで各フィールドサイズを設定します
※このユーザー定義型の宣言は、標準モジュールまたはフォームなどのモジュールの"Declarations"セクションで行います。フォームなどに宣言する場合にはPrivate Type tEmplyeeのように"Private"を付けます。Number As String * 3 Name As String * 15 Katakana As String * 15 TEL As String * 13 CRLF As String * 2 '改行も1つのフィールドとして扱います End Type Dim tShain As tEmplyee
Open "d:\tmp\社員マスター.txt" For Random As #1 Len = Len(tShain) Do Until EOF(1) Get #1, , tShain With tShain Debug.Print .Number '社員番号 Debug.Print .Name '氏名 Debug.Print .Katakana 'カタカナ Debug.Print .TEL '電話番号 End With Loop Close #1 ご覧のように、最初にユーザー定義型で各フィールドサイズを設定しておけば、実際に読み込んだあとは全角/半角も意識することもなく、簡単にフィールドのデータを取得することができます。 |
|||
|
Copyright © T'sWare All rights reserved |