Excel VBA CSVを文字型で読みたい

このQ&Aのポイント
  • Excel2013のVBAを使用してCSVの全項目を文字型として取り込む処理を作成したい。
  • 数値項目のゼロが消えてしまう問題が発生している。
  • 提供されたサンプルCSVおよびVBAソースコードを確認し、問題を解決したい。
回答を見る
  • ベストアンサー

Excel VBA CSVを文字型で読みたいのです

お世話になります。 Excel2013のVBAでCSVの全項目を文字型として取り込む処理を作ろうとしているのですが、 うまくいきません。 数値項目のゼロが消えてしまいます。 サンプルcsvと、取り込む所だけ抽出したソースを見て頂いて、なんとかなりますでしょうか? よろしくお願いします。 sub test() 'csvのオープンダイアログ varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSV形式(csv形式)の選択") 'ファイル名を取得していなければ終了 If varFileName = False Then Exit Sub '拡張子除いたファイル名でシート作成 pos = InStrRev(varFileName, "\") sname = Mid(varFileName, pos + 1) 'フルパスからファイル名抽出 pos = InStrRev(sname, ".") '最後の.位置を抽出 sname = Mid(sname, 1, pos - 1) 'ファイル名から拡張子除去 '本流ブックに新シートを作成し命名 Set WS1 = Worksheets.Add(After:=Worksheets(Worksheets.Count)) WS1.name = sname 'csvをtmpブックで開く(アクティブ周りの処理の関係で位置を注意) 'お形式で全項目文字で取得Ver Workbooks.OpenText Filename:=varFileName, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array( _ Array(1, 2), Array(2, 2)) end sub test.csv ---------------------- 管理番号 ,注文分類  "0000041836","受注" "0000041841","受注" "0000041842","受注"

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (7995/17088)
回答No.2

Workbooks.OpenText Filename:=varFileName, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array( _ Array(1, 2), Array(2, 2)) これを With ActiveSheet.QueryTables.Add( _ Connection:="TEXT;" & varFileName, _ Destination:=Range("A1")) .AdjustColumnWidth = False '.TextFilePlatform = 932 .TextFileCommaDelimiter = True .TextFileColumnDataTypes = Array(xlTextFormat, xlGeneralFormat) .Refresh BackgroundQuery:=False .Delete End With これに変更したらどうかな。

momono14
質問者

お礼

たしか「マクロの記録」でQueryTables.Add()は出てきたのですが、 そのときは、0から新しい仕組みを調べる手間と、リンクがつながったままで 対処法が分からない忌避感で避けていましたが、回答で.Deleteを勉強できました。 今回の環境では拡張子を変えれない為、こちらを採用させて頂く事になりそうです。 お返事ありがとうございました。BAとさせて頂きます。

その他の回答 (1)

  • emsuja
  • ベストアンサー率50% (1031/2049)
回答No.1

拡張子は CSV でなければいけないのですか? とりあえず提示された VBA サンプルとファイル名の CSV を TXT と書き換えたらうまく動いたのですが。

momono14
質問者

お礼

な、なんだこの仕様… おかげさまで訳の分からないExcelの仕様が また一つ勉強になりました。 お返事ありがとうございました。

関連するQ&A

  • VBAでCSVを文字列として取り込む方法

    VBAでCSVを文字列として取り込む方法を教えてください。 下記のようにCSVファイルを取り込んでいます。 Array関数を使用していますが、どうしても文字列として認識してくれません。 Sub CSV取り込み() Dim xlAPP As Application ' Applicationオブジェクト Dim strFILENAME As String ' OPENするファイル名(フルパス) 'Applicationオブジェクト取得 Set xlAPP = Application '「ファイルを開く」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE) 'キャンセルされた場合は以降の処理は行なわない If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _ Array(4, 2), Array(6, 2)) Workbooks.Open Filename:=strFILENAME ActiveWorkbook.Sheets(1).Cells.Copy _ Destination:=ThisWorkbook.Worksheets("sheet1").Range("A1") End Sub この書式ではCSVを文字列として取り込めないのでしょうか? どなた様かご教示ください。 よろしくお願いいたします。

  • 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 これを同時に行いたいのですが、どうすればよいでしょうか? お知恵をお貸しください。

  • VBAでエクセルをCSVに変換時

    業務上、エクセルファイルのデータをCSV変換し、他のソフトへコンバートする 作業を行う事になったのですが、初心者なので全くわからず、 ネットの力に頼ってVBAでCSV変換するコマンドまでは作成できたのですが、 コンバート先のソフトへは、以下(1)、(2)の設定が不足している事がわかりました。 現在利用しているコマンドにその機能を持たせる事は可能でしょうか。 (1)文字コードをUTF-8へ指定 (2)改行コードをLFへ指定 VBAのバージョン:VisualBasic6.5 Sub Test() Dim ws As Worksheet On Error Resume Next For Each ws In ActiveWorkbook.Worksheets ws.SaveAs ThisWorkbook.Path & "\" & ws.Name & ".csv", xlCSV Next ws End Sub 初めての質問なので内容が解りづらいと思いますが申し訳ありません。 ご回答をお待ちしております。

  • VBAが動かない。

    初心者ですが、必要にせままれてVBAを習得努力中ですが、参考書からC&Pして何とか動き?始めたが、途中実行時エラー:1004に引っかかって作動しなくなり使用を止めていました。現在1-2-3のロータスのマクロでなんとかしのいでいますが、やはりエクセルを使用しないと物事はスムーズに進みません。これはデータ入力後の作業の出だしのマクロです。どなたかご教授いただけませんか? QT Sub シート挿入() '初回の追加() Worksheets.Add After:=Worksheets("データ_変換") ActiveSheet.Name = "1" 'シート修正の追加() Worksheets.Add After:=Worksheets("1") ActiveSheet.Name = "2" End Sub Sub 初回、修正のデータ抽出() Dim xRange As Range, yRange As Range Dim sName, allName Set xRange = Worksheets("データ_変換").Range("A4").CurrentRegion allName = Array("1", "2") For Each sName In allName Range("D2").Value = sName Set yRange = Worksheets("データ_変換").Range("A1").CurrentRegion xRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=yRange, _ CopyToRange:=Worksheets(sName).Range("A1") Next Set xRange = Nothing: Set yRange = Nothing End Sub UNQT 以上ですが、シート1,2を追加した後それぞれのシートに抽出条件回数(D列)である1,2毎にフルデータを抽出するもので、フィールド名は4行目A列からBI列で約2000件のデータです。 当初はなにもしないでマクロ実行時にそれぞれのシートにフルレングスのフィールド行とデータがA1からBI1のフィールド名とともに書き出されました。また自動的に「データ_変換」のフィールド行が同シートの上のA1にコピーされD列の下の2行目に2の数字が書き込まれて作業は無事完了していました。 以上よろしくお願いします。

  • Excelの複数シートからcsvファイルを出力

    Dim objXL Dim f Dim m Dim ws Set objXL=CreateObject("Excel.Application") 'objXL.Visible=True objXL.DisplayAlerts=False For Each f In WScript.Arguments objXL.WorkBooks.Open f For Each ws In objXL.ActiveWorkBook.Worksheets If ws.UsedRange.Rows.Count=1 and ws.UsedRange.Columns.Count=1 and ws.Cells(1,1)="" Then 'MsgBox ws.Name&"Empty" Else ws.SaveAs f & "." & ws.Name & ".csv", 6 End If Next objXL.ActiveWorkBook.Close Next objXL.Quit WScript.Quit 上記スクリプトファイルで ファイル名が「[元Excelファイル名].[シート名].csv」 のcsvファイルが出力されますが、これを ファイル名を「[シート名].csv」にするには どのようにすればいいのでしょうか。 ws.SaveAs f & "." & ws.Name & ".csv", 6 の箇所を ws.SaveAs ws.Name & ".csv", 6 に変更したのですが、うまくいきませんでした。

  • ActiveWorkBook VBA

    Sub test() Dim myCSV As String Dim Fname As Variant Dim Aname As String Dim Fullp As String Application.ScreenUpdating = False Fullp = ActiveWorkbook.FullName Pos = InStrRev(Fullp, "\") Fname = Left(Fullp, Pos) myCSV = Dir(Fname & "*.csv") Do Until myCSV = "" Workbooks.Open Fname & myCSV Aname = Left(Fullp, InStr(1, Fullp, ".") - 1) ActiveWorkbook.SaveAs filename:=Aname & ".xls", FileFormat:=xlExcel9795 ActiveWorkbook.Close myCSV = Dir() Loop Kill Fname & "*.csv" End Sub あるフォルダにあるcsvファイルをxlsで保存したいと思いましたが、アクティブになるBOOKがバラバラ? で、うまくいきません。csvファイルを開いたときに そのファイルがアクティブになり、うまくloopできないでしょうか?

  • csvをVBAを使ってエクセル形式で保存したい

    タイトルのとおりなのですが、csvをVBAを使ってエクセル形式で保存したいのですが、その際ひとつ条件がありまして作成するエクセルファイルをcsvと同じ名前にしたいと思っています。  csvのファイル名は都度変わってしまうため私の現在の知識ではVBAを作成することができません。  教えて下さい。よろしくお願いします。

  • excel 2010 VBAについて質問です

    複数(約2000ファイル)のcsvファイルのC列だけを抽出してまとめるVGAコード? をしりたいのですがなにか方法はないでしょうか。 例 ファイル名が1.csv~100.csvのファイル 1.csvのc1~c100をa1~a100 2.csvのc1~c100をb1~b100 100.csvのc1~c100をn1~n100 に抽出するようなことをしたいです。 1.csv 2.csv 抽出されたファイル.csv ABCDEF ABCDEF ABCDEF 111 112 12 121 122 12 131 132 12 ・・・ ・・・ 12 ・・・     ・・・ ご回答よろしくお願いいたします。

  • excel 2003でCSVファイルを読み込むVBA

    現在CSVファイルを読み込むマクロを作成してますが、レベルが低く下記載のコードで作業を行ってます。 皆様の技術をお借りしたいので、ご教授宜しくお願い致します。 ※現在のコードです。 CommandButton1でフォルダーを開いてcsvファイルを選択し、toolをsheetに追加してます。それから、CommandButton3で追加されたtoolからB14:C14)を選択し最終行までコピーしSheet1の(B12)に数値のみを貼り付けています。 結構手間が係り作業に時間がかかってしまいます。 そこで、改良をしたいと思いますのでご教授お願い致します。 ※改良したいポイント (1)同じフォルダー内のTOOL.CSVをフォルダーを開かず直接commandButton1でSheetに追加する。 (2)Sheet2にコピーされたデーターから(B14:C14)を選択し最終行までコピーしSheet1の(B12)に数値のみを貼り付ける。 (commandButton3はなくしたいと思ってます) 以上です。 宜しくお願い致します。 --------------------------------------------------------- Private Sub CommandButton1_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Myname = ActiveWorkbook.Name CSV_Filename = Application.GetOpenFilename("CSVファイル(*.CSV;*.prn),*.CSV;*.prn", , "CSVファイルを開く") If CSV_Filename = False Then Exit Sub Workbooks.Open CSV_Filename CSV_SheetName = Worksheets(1).Name Sheets(CSV_SheetName).Move after:=Workbooks(Myname).Sheets(Sheets.Count + 1) Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub ---------------------------------------------------------------- Private Sub CommandButton3_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("(TOOL)").Select Sheets("(TOOL)").Range("B14:C14").Select Sheets("(TOOL)").Range(Selection, Selection.End(xlDown)).Select Selection.copy Sheets("CSV Road").Select Sheets("CSV Road").Range("B12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub -------------------------------------------------------------

  • ExcelファイルをCSV 形式で保存するには?

    ExcelファイルをCSV 形式 (Windows、カンマ区切り) (*.csv)にして書類を提出するように言われたのですが、その方法について教えてください。 データの内容は会社の詳細で、1社につき100項目のデータがあり、それが50社あります。その場合、1社目のデータをA列に、2社目のデータをB列にというように入力すればよいのでしょうか? Excel の [名前を付けて保存] ([ファイル] メニュー) を使って、CSV (カンマ区切り) (*.csv)ファイルで保存すると、各項目がカンマで区切られるのでしょうか? 1レコード目と2レコード目はどういった区切りになるのでしょうか? またファイル形式はCSV 形式でと言うことですが、提出するファイル名の拡張子を.txtとしないといけないのですが、それはどうすればいいのでしょうか?

専門家に質問してみよう