• ベストアンサー

VBAでのcsv読み込みについて

 VBA初心者です。テキストファイル(ファイルの中はカンマ区切り)を別なEXCELシートではなくて、VBAを実行したEXCEL内のシート(例えばSheet2)に落としたいのですが、うまくいきません。  Workbooks.OpenText Filename:="C:\csv_test.txt", StartRow:=1, DataType:=xlDelimited, Comma:=True~ と記述すれば、別シートには落ちるのですが・・・。  簡単なことかもしれませんが、ご回答よろしくお願いいたします。

  • keyed
  • お礼率73% (17/23)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

下記ではcells(5,5),即ちE5を左上隅とする区画のセルに セットします。実際は2箇所を調整してください。 勿論パス名、ファイル名、セパレータの「,」なども 変えてください。 Sub test01() Open "c:\My Documents\aa1.txt" For Input As #1 i = 5: j = 5 While (Not EOF(1)) Line Input #1, a s = 1 p01: p = InStr(s, a, ",") If p = 0 Then GoTo p02 Cells(i, j) = Mid(a, s, p - s) j = j + 1 s = p + 1 GoTo p01 p02: i = i + 1 j = 5 Wend Close #1 End Sub 少数レコード例でテスト済み。

keyed
質問者

お礼

 早々のご回答ありがとうございました。 さっそく、実行してみたところうまくいきました。  この処理は他の処理にも使用できそうです。

その他の回答 (1)

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.1

ふつうに、ExcelでCSVファイルを開くときでも、別シートに落ちますよね。 ですから、別シートに落ちた後、ご希望のシートに移動なり、 コピーなりするとよいと思うのですが。 (試したわけではありませんので、うまくいくかどうか、、、)

keyed
質問者

お礼

 早々のご回答ありがとうございます。 別シートに落とした後にコピーしても うまくいきました。

関連するQ&A

  • テキストファイルのインポートが出来ません。

    デスクトップの同じフォルダ内に a.txt を作成してファイルのインポートを行おうとしましたができません。なぜでしょうか? Sub TextFileOpen() Workbooks.OpenText Filename:="a.txt", _ DataType:=xlDelimited, _ comma:=True End Sub

  • Excel VBAでOpenTextのFieldInfoが効かない・・

    Excel2000のVBAマクロで、CSVファイルを読み込んで マッチング処理をしたいと考えています。 CSVファイルはコードテーブルで参照のみ。 中身は、「コード,名前,区分」の配列になっております。 コードは"0012345"と"12345"は別物として扱いたいので 文字列として読み込む必要があります。 CSVファイルの中身は以下の感じです。 12345,名前1,区分1 0012345,名前2,区分2 0000022222,名前3,区分1 ... そこで、以下のようなコードを書いて見ました。 Sub OpenCSV() Workbooks.OpenText Filename:="C:\CSV.txt" _ DataType:=xlDelimited, Comma:=True, _ TextQualifier:=xlTextQualifierNone, _ FieldInfo:=Array(Array(1,2),Array(2,2), _ Array(3,2)) End Sub ところが開いたシートではコード部分が文字列として 取り込まれておらず、セルの書式も標準になっています。 FieldInfoの設定方法を変えて、 Sub OpenCSV() Dim tmpInfo(256) As Variant Dim i As Integer For i = 1 to 256 tmpInfo(i) = Array(i,2) Next Workbooks.OpenText Filename:="C:\CSV.txt" _ DataType:=xlDelimited, Comma:=True, _ TextQualifier:=xlTextQualifierNone, _ FieldInfo:=tmpInfo End Sub このようなコードにしたところ、「型が一致しない(エラー13)」というエラーになってしまいます。 結局、FieldInfoが効いてない動きなのですが、 どこが悪いのか皆目見当が付きません。 アドバイスを頂けますと幸甚です。

  • 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

    エクセルで指定したフォルダから シート1のA1セルに記入された名前のテキストファイルを 開くマクロを作りました 変数filepassがセルA1に記入されたファイルのパスのとして Workbooks.OpenText filename:=filepass, StartRow:=1 _ , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(1, 1) しかし このままだと指定したフォルダ(filepass)にファイルがなかったとき エラーになります もしファイルがなかったときに 何かメッセージを表示させたいのですが どのようにすればよいのでしょうか どなたか 教えてください VBAは素人です よろしくお願いします

  • ExcelのOpenTextで作ったシートのコピー

    Excel2010のVBAでテキストファイルを読み込むと新しいブックに読み込まれるので、新しいブックのシートをVBAのコードがあるブックにコピーしたいのですが CSVファイル読み込み時に使う Workbooks.Open の場合には  Dim wb As Workbook  Set wb = Workbooks.Open(Filename:="C:\test\test1.csv")  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False のような感じでコピーすることができたのですが テキストファイル読み込み時に使う Workbooks.OpenText の場合には  Dim wb As Workbook  Set wb = Workbooks.OpenText Filename:= _    "C:\test\test1.txt", _    Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _    , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _    Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), _    Array(9, 2)), TrailingMinusNumbers:=True  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False とすると、OpenTextの箇所で「Workbooks.OpenText Functionまたは変数が必要です」というコンパイルエラーが発生します。Set wb = Workbooks.OpenText (Filename:=・・・・True)のように括弧でくくっても同様のエラーがでてしまいます。 Microsoft Office 14.0 Object Libratyの参照設定はチェックされています。 Workbooks.OpenText Filename:= _・・・=Trueの部分はマクロの記録の機能で生成したコードです。 このような場合、どのように記述すればよいのでしょうか。 よろしくお願いします。

  • 項目内改行があるCSVの書式設定ができません

    お世話になります。 現在、Excel2010のVBAを使って、ある項目内に改行CRLFを含むCSVを Excelシートにコピーして加工するマクロを作成しようとしています。 CSV1レコードの例) "001","b","c","d[CR][LF] e[CR][LF] f[CR][LF] g","h" 4項目名に改行が含まれますが、1レコードあたり5項目のCSVです。 CSVをExcelに取り込むには様々な方法があると思いますが、改行を含んでいても正しく取り込める方法として、 現在は下記のようにOpenText関数を使用して読み込みを行い、シートへ貼り付けています。 Workbooks.OpenText fileName:=取り込みたいファイルの名称, StartRow:=1, _ DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, _ FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), _ ・・・・・・・・・・・・・・ このとき、CSVの取込自体はできるのですが、FieldInfoで指定した書式指定 (ここでは文字列をあらわすxlTextFormat)が無視されてしまい、 Excelに取り込んだときには文字列でなく標準の書式になっています。 つまり上記の例では1項目目の"001"が桁落ちして1となってしまいます。 ネットで調べたところ、OpenText関数では拡張子csvのファイルを読み込む際には FieldInfo指定が無効となるとありました。そこでファイルの拡張子を.txtに変えてみたところ、 今度は項目内改行が認識されず、行区切りの改行とみなされてしまって、項目取り込みがずれてしまいます。 なんとか、桁落ちせず、なおかつ項目内改行も正しく認識できるような方法はないでしょうか。 OpenText関数以外の方法でもかまいませんので、有識者の方々にご教授いただければ、 と思っております。 よろしくお願いします。

  • エクセルVBAのコンパイルエラー

    下記VBAでコンパイルエラーを起こして進みません 解消法をご教授いただけると幸いです やりたいこととしては ボタンで任意のタブ区切りのテキストを指定し 特定のシートに値をコピーすることです ---- Private Sub CommandButton1_Click() Dim Sh As Worksheet Dim FileN As String Set Sh = ThisWorkbook.Sheets("import") ' <-- 読込みシート指定(※) FileN = Application.GetOpenFilename("テキストファイル,*.txt") If FileN <> "False" Then Workbooks.OpenText Filename:=FileN, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Tab:=True End If Set Sh = Nothing End Sub ----

  • オブジェクト変数の取得について

    以下のようにOpenTextでファイルを開いてそれをオブジェクト変数に取得したいのですが 「Functionまたは変数が必要です」というエラーになります。 どなたかご教示ねがえませんでしょうか? よろしくお願いいたします。 Set WorkBookObject =Workbooks.OpenText FileName:=strPath & strTxt, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, FieldInfo:=aryCell

  • 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データを一つのエクセルにワークブックにまとめるため CSVデータを開いて、各シートに値を貼り付けるVBAを作成しました デバックモードで1行毎に実行するとエクセルが落ちることはありませんが 普通に実行するとエクセルが閉じてしまいます 原因が分からないためご指摘いただけると幸いです Win7のOffice2013です。 Sub contents() Sheets("01").Select Sheets("01").Cells.Select Selection.ClearContents Dim ShA As Worksheet Dim FileA As String Set ShA = ThisWorkbook.Sheets("01") ChDir "C:\Users\Public\Documents" FileA = "C:\Users\Public\Documents\01.csv" If FileA <> "False" Then Workbooks.OpenText Filename:=FileA, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Comma:=True ActiveSheet.Cells.CurrentRegion.Copy Destination:=ShA.Range("A1") ActiveWorkbook.Close False End If Set ShA = Nothing Sheets("02").Select Sheets("02").Cells.Select Selection.ClearContents Dim ShB As Worksheet Dim FileB As String Set ShB = ThisWorkbook.Sheets("02") ChDir "C:\Users\Public\Documents" FileB = "C:\Users\Public\Documents\02.csv" If FileB <> "False" Then Workbooks.OpenText Filename:=FileB, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Comma:=True ActiveSheet.Cells.CurrentRegion.Copy Destination:=ShB.Range("A1") ActiveWorkbook.Close False End If Set ShB = Nothing Sheets("03").Select Sheets("03").Cells.Select Selection.ClearContents Dim ShC As Worksheet Dim FileC As String Set ShC = ThisWorkbook.Sheets("03") ChDir "C:\Users\Public\Documents" FileC = "C:\Users\Public\Documents\03.csv" If FileC <> "False" Then Workbooks.OpenText Filename:=FileC, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Comma:=True ActiveSheet.Cells.CurrentRegion.Copy Destination:=ShC.Range("A1") ActiveWorkbook.Close False End If Set ShC = Nothing End Sub

専門家に質問してみよう