【Excel】读取固定长文本

'*******************************************************************************
'   固定長形式テキストファイルを読み込むサンプル(改行なし)
'
'   作成者:井上治  URL:http://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'*******************************************************************************
' [参照設定]
'   ・Microsoft Scripting Runtime
'*******************************************************************************
Option Explicit
' レコードの項目定義
Private Type typREC
    CODE As String * 5              ' コード
    MAKER As String * 10            ' メーカー
    HINMEI As String * 15           ' 品名
    SURYO As String * 4             ' 数量
    TANKA As String * 6             ' 単価
    KINGAKU As String * 8           ' 金額
'    CRLF As String * 2              ' 改行コード分のダミー項目
End Type
 
'*******************************************************************************
' 固定長形式テキストファイルを読み込むサンプル(改行なし)
' 参照設定:(未使用)
'*******************************************************************************
Sub READ_FixLngFile2()
    Const cnsFILENAME = "\SAMPLE2.dat"
    Const cnsLNGS = 48              ' レコード長
    Dim strFileName As String       ' ファイル名
    Dim intFF As Integer            ' FreeFile値
    Dim lngLOF As Long              ' LOF値
    Dim lngPOS As Long              ' 読み込み位置
    Dim GYO As Long                 ' 収容するセルの行
    Dim tmpREC As typREC            ' レコード定義
    Dim strREC As String            ' レコードを収容する変数
 
    ' 指定ファイルをOPEN(入力モード)
    strFileName = ThisWorkbook.Path & cnsFILENAME
    intFF = FreeFile
    Open strFileName For Binary As #intFF
    lngLOF = LOF(intFF)             ' LOF値(ファイルサイズ)取得
    lngPOS = 1                      ' 読み込み位置
    ' 2行目から開始
    Rows("2:65536").ClearContents
    GYO = 2
    Do Until lngPOS > lngLOF
        ' レコードの読み込み
        Get #intFF, lngPOS, tmpREC
        ' 1レコード分のセルへのセット
        '-----------------------------------------------------------------------
        ' A列(コード)は5バイトの文字列処理
        Cells(GYO, 1).Value = Trim(tmpREC.CODE)
        ' B列(メーカー)は10バイトの文字列処理
        Cells(GYO, 2).Value = Trim(tmpREC.MAKER)
        ' C列(品名)は15バイトの文字列処理
        Cells(GYO, 3).Value = Trim(tmpREC.HINMEI)
        ' D列(数量)は4バイトの数値処理
        Cells(GYO, 4).Value = CCur(tmpREC.SURYO)
        ' E列(単価)は6バイトの数値処理
        Cells(GYO, 5).Value = CCur(tmpREC.TANKA)
        ' F列(金額)は8バイトの数値処理
        Cells(GYO, 6).Value = CCur(tmpREC.KINGAKU)
        '-----------------------------------------------------------------------
        ' 読み込み位置を加算
        lngPOS = lngPOS + cnsLNGS
        ' 行を加算
        GYO = GYO + 1
    Loop
    ' 指定ファイルをCLOSE
    Close #intFF
End Sub
 
'-----------------------------<< End of Source >>-------------------------------