先頭にゼロを含む数字列のCSVをExcelに取込む方法

このQ&Aのポイント
  • Excelにゼロを含む数字列のCSVを取り込む方法について、VBAを使用して取り込みます。しかし、取り込んだデータは先頭のゼロが欠けてしまいます。
  • 解決策として、VBAコードの一部を修正します。具体的には、QueryTablesのTextFileParseTypeをxlFixedWidthに設定し、テキストファイルの解析方法を指定します。
  • これにより、ゼロを含む数字列を正しくExcelに取り込むことができます。
回答を見る
  • ベストアンサー

先頭にゼロを含む数字列のcsvをExcelに取込む

UTF-8のCSVファイルがあり、含まれるデータに先頭がゼロで始まる数字列があります(例えば00123や0123で桁数は不定)。 これをVBAを使ってExcelに取り込み、ゼロ付きのまま扱いたいのですが、取り込んだデータは先頭のゼロが欠けてしまいます。 VBAコードは以下のとおりです。 どこを見直したらよろしいでしょうか。 strConnPhrase = "TEXT;" & strFilePath Set qt = ws.QueryTables.Add(Connection:=strConnPhrase, Destination:=ws.Range("A1")) With qt .TextFilePlatform = 65001 .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .PreserveFormatting = True .RefreshStyle = xlOverwriteCells .Refresh .Delete End With

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8010/17118)
回答No.1

例えば,文字列、数値、日付の順に読み込むとすれば .TextFileColumnDataTypes = Array(xlTextFormat, xlGeneralFormat, xlYMDFormat) のようにする。 数値の前 0 を表示させたいときは,xlTextFormat を指定して文字列にしてください。

minis8566
質問者

お礼

ありがとうございます。いただいたヒントを活用し、表全体をカバーするArrayを作りtext属性を入れることで解決できました。 追加したもの with句の前 For i = 0 To 31 cf(i) = 2 'xlTextFormat Next with句の中 .TextFileColumnDataTypes = Array(cf)

その他の回答 (1)

  • SI299792
  • ベストアンサー率48% (714/1476)
回答No.2

作ったことがあるので、参考にして下さい。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14251443539

minis8566
質問者

お礼

ありがとうございます。参考にさせていただきます。

関連するQ&A

  • CSVデータをEXCELシートに展開したい

    CSVデータをEXCELシートに展開しようとしています。 シート1にボタンを用意して、クリックするとシート2に展開されるというようなことをしたいのです。 以下のコード(マクロを組んで作られるコードです)だと、シート2に取り込まれないです。 どのようにすればシート2に展開されるでしょうか? Private Sub CommandButton2_Click() Dim SH As Worksheet ' Set SH = Worksheets("Sheet2") With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\temp\test1.", _ Destination:=Range("A1")) .Name = "test1 .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .Refresh BackgroundQuery:=False End With よろしくお願いします。

  • このマクロ処理をVBAにしたいのですが…

    テキストファイル→Excelへの取込み処理をVBAで記述したいのですが、上手く行きません。どなたか、ご存知の方いらっしゃいましたらご回答よろしくお願いします。 マクロ処理で試すとこんなカンジなのですが… With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\temp\S5097.txt", _ Destination:=Range("A3")) .Name = "SXXXX" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileOtherDelimiter = "|" .TextFileColumnDataTypes = Array(1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub

  • 今日と昨日の日付.CSVファイルを選択し読み込む

    日付.csvのファイルが下記のように同じフォルダーに自動書き出しされています。 20171101.csv 20171102.csv 20171103.csv このファイル群から、今日と昨日のファイルだけを選択して、一枚のxlsシートに 書き出すマクロはどうすればいいでしょうか? 現在は、下記11行目を日々書き直して処理しています。 よろしくご教示をお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+a ' Range("B4:E10000").Select Selection.ClearContents Range("B4").Select With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;Z:\bme280-data\20171130.csv", Destination:=Range( _ "$B$4")) .Name = "No1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False Call Macro2 End With End Sub

  • データ読み込み→数行ごとの折り返しについて

    このようなマクロを作りました。 ------------------------------------------------- Sub test() 'TXTファイル読み込みダイアログボックス Dim FileToOpen As String FileToOpen = Application.GetOpenFilename("テキストファイル (*.txt), *.txt") '読み込んだファイルの計算 With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileToOpen, Destination:=Range("B11")) ' .Name = "*" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 4 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9) .Refresh BackgroundQuery:=False End With End Sub ------------------------------------------------- これだけでは、B列に並んでしまうだけなのでこれを20データごと次の列に入力できるようにしたいのですがいろいろ調べたのですがわかりませんでした。 読み込むテキストは100行あると考えてください わかる方がいましたらよろしくお願いします。

  • エクセルVBAでCSV読み込みについて質問します。

    エクセルVBAでCSV読み込みについて質問します。 外部データの取り込みマクロを自動記録で作成しましたが、 csvファイル名が決まってしまうで、他のCSVファイルに展開できません。 できれば、マクロ実行(ファイル選択)ボタンを押すとウィンドウが出てきて、 任意の場所にあるCSVファイルを選択できるようにできないでしょうか? マクロは、書き込むエクセルブックが開いている状態からスタートし、シート名は共通です。 自動記録で完成したマクロは以下の通りです。 With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:¥Documents and Settings¥USER¥My Documents¥VBA¥マクロ¥取り込み¥TEST1.csv" _ ’”¥”が誤変換されるので、直接入力しました。      , Destination:=Range("M6")) , Destination:=Range("M6")) _ , Destination:=Range("M6")) .Name = "290TEST1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _ 2) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 '以下、続くので省略しました。 End Sub どなたか、お助けお願いします。

  • VBAで同じフォルダのCSVを同じシートに読み込みたいです。

    VBAで同じフォルダのCSVを同じシートに読み込みたいです。 VBAで同じシートに開くのは以下でできます。 Sub UCsvGet2() cnstr = _ "text;C:\Documents and Settings\kazu\My Documents\test2.txt" With ActiveSheet.QueryTables.Add(Connection:=cnstr, _ Destination:=Range("A1")) .TextFileCommaDelimiter = True .TextFilePlatform = 932 .Refresh End With End Sub VBAでファイルを選択してOPENすることは以下でできます。  Sub GetPathName() ffname = ActiveWorkbook.FullName ' ブックのフル名称を得る pos = InStrRev(ffname, "\") ' うしろから \ を探す curpath = Mid(ffname, 1, pos) ' 先頭から \ の位置までを取り出す MsgBox pos & " " & curpath Workbooks.OpenText Filename:= curpath & "test2.txt" , _ DataType:=xlDelimited, Comma:=True End Sub これを同時に行いたいのですが、どうすればよいでしょうか? お知恵をお貸しください。

  • エクセルのマクロ

    エクセルに 1、コマンドボタンを押す 2、貼り付けたいテキストファイルを選ぶ →B3のセルから貼り付ける というマクロを組みました 以下のマクロがそうなんですが、 このマクロだと1つのテキストファイルしか貼り付けれません 2回目以降も貼り付けを同じボタンで繰り返し その前に貼り付けたデータのB列最終セルの一つ下のセルから 同じようにテキスト貼り付けを行えるようにはすることは可能でしょうか? Private Sub CommandButton1_Click() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) Dim vrtSelectedItem As Variant With fd Dim txtpass As Variant If .Show = -1 Then  For Each vrtSelectedItem In .SelectedItems txtpass = "TEXT;" & vrtSelectedItem Next vrtSelectedItem Else End If End With With ActiveSheet.QueryTables.Add(Connection:= _ txtpass, Destination:=Range("$B$3")) .Name = "4" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub

  • 現在のフォルダからテキストを読み込むエクセルマクロ

    小さな会社で事務仕事をしております。 仕事上、困ったことがあり、どなたか教えて頂きたいです。 テキストファイルをエクセルに読み込み、 ある文字にて区切り、セルに張りつけたいのです。 テキストの数が多いため、マクロを作成したいと思っております。 マクロの記録にて下記(ソース)まで来ているのですが、 実際にやりたいのは、 「現在のエクセルブックと同じフォルダにある」テキストファイルを読み込むことなのです。 私が記録したマクロでは、「固定フォルダ」になっており、 例えば、フォルダ名が変わってしまうと、動作しません(テキストを読み込めません)。 Sub Macro3() ' ' Macro3 Macro ' ' With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Users\crown_800\test.txt", Destination:= _ Range("$A$1")) .Name = "test" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = True .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = True .TextFileOtherDelimiter = "[" .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub Webにてカレントディレクトリの取得方法を勉強し、 下記ソースに反映しようとはしているのですが、うまくいきません。 どなたかご相談に乗って頂けないでしょうか? よろしくお願いいたします。

  • 現在のフォルダからテキストを読み込むエクセルマクロ

    小さな会社で事務仕事をしております。 仕事上、困ったことがあり、どなたか教えて頂きたいです。 テキストファイルをエクセルに読み込み、 ある文字にて区切り、セルに張りつけたいのです。 テキストの数が多いため、マクロを作成したいと思っております。 マクロの記録にて下記(ソース)まで来ているのですが、 実際にやりたいのは、 「現在のエクセルブックと同じフォルダにある」テキストファイルを読み込むことなのです。 私が記録したマクロでは、「固定フォルダ」になっており、 例えば、フォルダ名が変わってしまうと、動作しません(テキストを読み込めません)。 Sub Macro3() ' ' Macro3 Macro ' ' With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Users\crown_800\test.txt", Destination:= _ Range("$A$1")) .Name = "test" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = True .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = True .TextFileOtherDelimiter = "[" .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub Webにてカレントディレクトリの取得方法を勉強し、 下記ソースに反映しようとはしているのですが、うまくいきません。 どなたかご相談に乗って頂けないでしょうか? よろしくお願いいたします。

  • Excelマクロ 繰り返し?の設定方法を教えて下さ

    BetMasterという競馬ソフトに記述されている 「TXT\2」のデータを抽出し、Sheets("出馬表集計")に貼り付け、 「TXT\1」のデータを抽出し、Sheets("結果集計")に貼り付ける 以下のようなマクロを組んでいます。1日終わるごとにTXT\2とTXT\1を作成してこの集計をしていたのですが、約1年間サボってしまい100回近く、このマクロを作動させなければならなくなりました。 そこで、TXT\1~100まで作成して、TXT\2とTXT\1の貼り付けが終わったら、「TXT\4とTXT\3」、「TXT\6とTXT\5」、「TXT\8とTXT\7」...............と「TXT\100とTXT\99」まで繰り返し抽出と貼り付けを行うようにしたいのですがどうしたらよいでしょうか。 問題は、50回繰り返すことと、2回目以降は前回終了の次の行に貼り付けるという点です。 よろしくお願い致します。 'BetMasterから出馬表データの取り込み ActiveWorkbook.Worksheets.Add With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\BetMaster\TXT\2.", Destination:=Range("A1")) .Name = "1." .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .Refresh BackgroundQuery:=False End With 'Sheets("出馬表集計")に貼り付け Cells.Select Application.CutCopyMode = False Selection.Copy Sheets("出馬表集計").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select ActiveWindow.SelectedSheets.Delete 'BetMasterから結果データの取り込み ActiveWorkbook.Worksheets.Add With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\BetMaster\TXT\1.", Destination:=Range("A1")) .Name = "1." .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .Refresh BackgroundQuery:=False End With 'Sheets("結果集計")に貼り付け Cells.Select Application.CutCopyMode = False Selection.Copy Sheets("結果集計").Select   Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select ActiveWindow.SelectedSheets.Delete

専門家に質問してみよう