【VBA】テキストファイルをゼロサプレスしないでブックに取り込む

0

    <機能>
    (1)メニューの データ > テキストファイル(テキストファイルから外部データを取り込み)をVBAで自動で行います
    (2)OpenTextメソッドを使用してカンマ区切りのテキストファイルをシートに取り込みます(※1)
    (3)パラメータ(FieldInfo)にテキスト形式(xlTextFormat)を指定しゼロサプレスされないようにします(※2)
    ※1 1行づつ読み込んでSplitしてもいいのですが、今回はOpenTextを使用して一気に読み込みます
    ※2 コード体系で前0が付いているケースは少なくありませんが普通に読み込むとエクセルの書式(標準)により前0はなくなります


    <サンプルデータ>
    なんちゃってサンプルデータを自動で作成します
    (1列目)分類コード:0で始まるコードをテキスト形式で取り込みます
    (2列目)商品コード:0で始まるコードをテキスト形式で取り込みます
    (3列目)商品名
    (4列目)価格
    (5列目)適用日:YMD日付形式で取り込みます

    <使い方>
    ソース全体をそのまま張り付けてください
    OpenTxtInExcelを呼び出すとアクティブシートにサンプルデータを取り込みます

    <イメージ>
    実行後のイメージ、ゼロサプレス、カンマ区切り、VBA
     

    '//エクセルでテキストファイル(カンマ区切りで要素数=5)を開きます
    '//列の形式(XlColumnDataType)の指定は
    '//<1列目>テキスト形式
    '//<2列目>テキスト形式
    '//<3列目>テキスト形式
    '//<4列目>一般形式
    '//<5列目>YMD日付形式

    Sub OpenTxtInExcel()
        Dim strTxt As String
        '//テスト用のテキスト(カンマ区切り)ファイルパスを取得
        '//テキストファイルを開いた時にXlColumnDataTypeを指定するため拡張子を[.txt]にしてください

        strTxt = ThisWorkbook.Path & "¥Sample.txt"

        '//テスト用のデータをセット
        MakeSampleTxt strTxt

        '//全て(数式、文字列、書式、コメント、アウトライン)クリア
        Cells.Select
        Selection.Clear

        '//指定されたテキストファイルを開く
        '//※FieldInfo : Array(列番号,XlColumnDataType)
        '//※XlColumnDataTypeの詳細はMSDN参照

        Workbooks.OpenText Filename:=strTxt, _
            StartRow:=1, _
            DataType:=xlDelimited, _
            TextQualifier:=xlTextQualifierDoubleQuote, _
            Comma:=True, _
            Space:=False, Other:=False, _
            FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 1), Array(5, 5))

        '//エクセルで開いたテキストファイル(アクティブブック)よりデータをコピーして閉じる
        ActiveWorkbook.Worksheets(1).Cells.Copy Destination:=ThisWorkbook.ActiveSheet.Range("A1")
        ActiveWorkbook.Close

        '//列幅の調整
        Cells.Select
        Selection.ColumnWidth = 10
        Selection.Font.Size = 9
        Range("A1").Select
    End Sub

    '//テスト用にテキストファイル(カンマ区切り)を作成
    '//分類コード,商品コード,商品名,価格,適用日

    Sub MakeSampleTxt(ByVal strTxt As String)
        Dim ff As Integer

        '//テスト用テキスト(カンマ区切り)ファイルをオープン
        ff = FreeFile
        Open strTxt For Output As ff

        '//データを書き込み
        Print #ff, "01,001,大根,188,2015/1/1"
        Print #ff, "01,002,人参,100,2015/1/1"
        Print #ff, "01,003,男爵いも,20,2015/4/16"
        Print #ff, "01,004,レタス,158,2015/9/1"
        Print #ff, "01,005,トマト,298,2015/10/16"
        Print #ff, "02,001,ゆず,97,2015/10/16"
        Print #ff, "02,002,みかん,397,2015/10/16"
        Print #ff, "02,003,リンゴ,158,2015/11/1"
        Print #ff, "02,004,ぶどう,498,2015/12/1"
        Print #ff, "02,005,キウイ,110,2015/12/31"
        Print #ff, "02,006,いちご,548,2015/12/31"

        Close ff
    End Sub

     

    よろしければポチッと押してください

    プログラマー ブログランキングへ



    calendar

    S M T W T F S
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
    << September 2018 >>

    profile

    others

    mobile

    qrcode         スマホ表示に戻す