【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の詳細は https://msdn.microsoft.com/ja-jp/library/office/ff193030.aspx

        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
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    << December 2017 >>

    profile

    others

    mobile

    qrcode