ExcelVBAでCSVファイル簡単に取り込む

このQ&Aのポイント
  • ExcelVBAを使用してCSVファイルを簡単に取り込む方法を教えてください。
  • Openコマンドを使用してCSVファイルを開き、セルにカンマごとに切り分けてセットする方法はありますが、もっと簡単な方法はありませんか?Excelの「外部データのインポート」でも取り込むことができますが、余計な情報がセルに貼り付けられてしまうため、純粋にテキスト情報のみをセルに貼り付けたいです。
  • 「外部データのインポート」ではCtrl+*で65536行目まで選択されてしまうため、データのある行数を調べるためにRange("A65536").End(xlUp)を使用しています。しかし、より良い方法があれば教えてください。
回答を見る
  • ベストアンサー

ExcelVBAでCSVファイル簡単に取り込む

ExcelVBAでCSVファイル簡単に取り込むコードを教えてください。 OpenコマンドでCSVファイルを開いて、 自分でカンマ毎に切り分けてセルにセットするやり方はできるのですが、 もっと簡単な方法はありませんか? イメージとしてはExcelの「外部データのインポート」機能が近いのですが この機能を使って取り込むと、何やら余計な情報がくっついてしまうようです。 あくまでテキスト情報だけをセルに貼り付けたいのです。 (ちなみに「外部データのインポート」で都合が悪い点は Ctrl+*で65536行目まで選択されてしまうところです。 何行目までデータがあるか?をCtrl+*で調べているためです。 ・・・Range("A65536").End(xlUp)で調べればいいのかもしれませんが・・・) 何か良いやり方をご存知の方はいらっしゃいませんか?

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

「外部データの取り込み」は比較的簡単で高速だと思いますけどね。 >この機能を使って取り込むと、何やら余計な情報がくっついてしまうようです。 QueryTableの定義情報は削除する事ができます。 With ActiveSheet.QueryTables.Add(..)   :   .Refresh BackgroundQuery:=False   'MsgBox .ResultRange.Rows.Count '※2   '.Parent.Names(.Name).Delete '※1   .Delete End With Refreshメソッドでデータを取り込んだ直後にQueryTableを削除すれば テキスト情報のみになります。 Excelのバージョンが2003sp3よりも下位の場合は※1の名前定義削除も必要。 >Ctrl+*で65536行目まで選択されてしまうところです。 Ctrl+Shift+*のショートカットキーですよね。 CurrentRegionの選択ですから、通常はそのような挙動にはならないはずなんですが。 新規Sheetに取り込んでも同様ですか? 必要であれば※2 .ResultRange.Rows.Count で取り込んだデータ行数を得る事はできます。

trap1130
質問者

お礼

回答ありがとうございます。 返事が遅くなってすみません。

trap1130
質問者

補足

>CurrentRegionの選択ですから、通常はそのような挙動にはならないはずなんですが。 すみません、改めて動かしてみたら、ちゃんとデータの行数だけ選択されました。 質問したときいろいろ試している最中だったので、余計なゴミデータが残っていたのかもしれません。 >QueryTableの定義情報は削除する事ができます。 >Refreshメソッドでデータを取り込んだ直後にQueryTableを削除すれば テキスト情報のみになります。 まさに理想のかたちです。採用させて頂きます。 ----- 「何行目までデータがあるか?をCtrl+*で調べているため」について補足します。 このExcelの使い方として、 1.csvからインポートする 2.手入力でデータを追加する 3.チェックする 4.csvへエクスポートする という使い方を想定しています。 「チェックする」の中身は型チェック、外部キーチェックのほか、入力漏れチェックが含まれるのですが、 例えばRange("A65536").End(xlUp)のような方法だと、 A列に入力を忘れていた場合、何行目まで入力されているかを正しく判断できません。 このため、どこか1列でも入力されている行まで選択できるCtrl+Shift+*のショートカットキーで調べることにしているためです。

その他の回答 (2)

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.3

No.1です。 >csvファイルの「001」が取り込み後は「1」と表示されてしまったのですが >(セルの書式はマクロ実行前も実行後も"文字列"になってます) >これを「001」のまま取り込むことはできるのでしょうか? 「001」を文字列のまま取り込まなければならないのですか。 そうであれば残念ながらNo.1に書いた単純に開く方法ではだめです。 質問者様やNo.2様が書かれている外部データの取り込みを使われるのがよいと思います。

trap1130
質問者

お礼

ありがとうございました。 初めにこういう制約があることを書いてなかったために 余計な回答をさせてしまいましたね。 すみません。

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

質問者様の方法でもそれほど面倒ではないとは思いますが、別の案として、ふつうにExcelで開いてそこからデータを吸い上げるというのではだめでしょうか。 マクロのあるブックのシート1にデータを取り込む例です。 Sub test() Dim CsvData As Variant Workbooks.Open "取り込みたいCSVファイル.csv" CsvData = ActiveCell.CurrentRegion.Cells ActiveWorkbook.Close ThisWorkbook.Sheets(1).Range(Cells(1, 1), Cells(UBound(CsvData, 1), UBound(CsvData, 2))) = CsvData End Sub

trap1130
質問者

お礼

返事が遅くなってすみません。 シンプルでわかりやい方法をありがとうございます。

trap1130
質問者

補足

試してみました。 csvファイルの「001」が取り込み後は「1」と表示されてしまったのですが (セルの書式はマクロ実行前も実行後も"文字列"になってます) これを「001」のまま取り込むことはできるのでしょうか? この点さえクリアできれば、採用できるのですが。。。

関連するQ&A

  • CSVをExcel2007に取り込む方法について

    CSVファイルをエクセルに取り込みたいと思います。 CSVファイルはカンマでデータを区切っています。 ただ、カンマで区切られたデータの中に、改行コードが含まれている場合があります。 エクセルで、このCSVデータを読み込む場合、セルの中で2行目以降はとぎれてしまいます。 そこで、下記のサイトで、「引用符で囲まれた改行を無視」というエクセルの 機能があることを知りましたが、Excel2007にはこの機能はないのでしょうか? https://tsukaeru-excel.com/line-feed-code-csv-powerquery 最近のバージョンのExcelには標準でそなわっているようです。

  • VBAでCSVファイルのインポートについて

    ACCESS2003でCSVファイルのインポートを行うVBAをご教授下さい。 ただし、CSVファイルは各項目がダブルコーテーションではさまれており、カンマはありません。 1行目にヘッダーがあります。 DoCmd.TransferText acImportDelim, , FileName, ImportPath, True ↑ これだと、うまくインポートされませんでした。 大変困っております。 どうぞよろしくお願い致します。

  • VB2010でCSVファイルを読み、配列に入れる

    ExcelVBAで、フォルダを選択しCSVファイルを表示⇒クリックで対象ファイルを選び配列に入れる次のプログラムを作りました。その後でデータを加工しグラフィック化してるのですが、VBAのグラフィック機能が遅いのでVB2010に変えようと思いいろいろやってみたのですが、どうもうまくいきません。 どなたか、VB2010ではどのようなプログラムになるのか、教えていただけないでしょうか。 'Excel VBA---------------------------------------- Sub CSVデータ() Dim xd(1000),yd(1000) 'フォルダを選ぶ ChDir ThisWorkbook.Path 'CSVファイルの一覧 pname = _ Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv" _ , FilterIndex:=1,Title:="開く",MultiSelect:=False) '対象ファイルをクリックで選ぶ If pname <> False Then Workbooks.Open Filename:=pname End If fname = ActiveWorkbook.Name 'CsVファイルのセルから配列へ移す nstart = 6 nend = nstart +500 k = 0 For i = nstart To nend '6行目から500行の2列、3列を読み配列に入れる k = k + 1 xd(k) = Cells(i, 2) yd(k) = Cells(i, 3) Next i End Sub

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • CSVファイルをテーブルにインポートする

    1行目が項目名のCSVファイルをテーブルにインポートするため Private Sub CSVインポート_Click() DoCmd.TransferText acImportDelim, , "ブランド", "J:\ブランド.TXT" MsgBox ("CSVファイルインポート完了") End Sub を実行すると、f1,f2のフィールドがありませんとメッセージがあり F1,F2 のフィールドを追加し再度実行するとデータは f1,f2に入り 項目名もデータとして入っています。 1行目は項目名と宣言する設定はありますか。 よろしくお願いいたします。

  • VBでCSVファイルのある行をインポート

    VBでCSVのインポートをしたいのです。 CSVファイルの中身で、最初の5行は読みません。そして、カンマ区切りの行の最初の文字が数字である場合だけを読みたいのです。で最後の3行も読みません。 ですので、CSVのデータを読む場合に最初の5行を飛ばすという方法か、カンマ区切りの行の最初の文字が数字の場合だけ読むという方法はありませんでしょうか。 Line Input #intFileNo, strTextLine strTextLine = Replace(strTextLine, """", "") str = Split(strTextLine, ",") こんな感じのコードで考えてます。 お分かりの方いましたらお願いします。

  • CSVファイルをExcelに関連づけた状態でCSVファイルをオープンした後

    CSVファイルを 『 1,2,3,0004 』 でCSVファイルを開くとExcelがご丁寧にカンマ区切りでセルを分けて表示して ますが、『0004』のセルが『4』としか表示できません。 『0004』と表示する方法を何かご存知でしょうか? ちなみに、 『 1,2,3,"0004" 1,2,3,="'0004" 1,2,3,"0004" 』 ともに駄目でした。 3行目は表示はできるものの、仕様上問題ありでした。 よろしくお願いします。

  • datファイル→csvファイル→datファイル

    あるソフトをエクスポートし、そのフォルダの中にあるdatファイルの一つをノートパッドで開くことができました。このdatファイルをcsvファイルにするときれいな表ができあがるので、このままデータを書き直し、また元のソフトにインポートしたいと考えています。しかしcsvファイルのままインポートしたり、拡張子をdatにかえてもデータが壊れたとの表示が出て何度やってもインポートがうまくできません。日付の部分が数値に置き換わっているからなのでしょうか。(datファイルのままノートパッドで開き、中のデータを編集してインポートするとちゃんとインポートできるのですがカンマで区切られているだけなので非常に編集作業がやりにくいですのでなんとかcsvの形でと考えています)編集がしやすく、インポートできる方法を教えて下さい。よろしくお願い致します。

  • ExcelVBAでフォルダ内の全csvを開き一行に

    ExcelVBAで、指定フォルダ内の全csvファイルのデータを開き 行列変換して一行毎に並べていきたいのです。 csvファイル数は、処理する時により、増減あります 似たような質問もあるようですが、いくつか見比べるとコマンドが異なってると、混乱してしまい、通しで回答いただけると、理解もできるかと質問させていただきます。 よろしくお願いいたします。 ■操作&データ並べるファイル Sheet:menu こちらに、指定フォルダなど入力、マクロ実行ボタン配置 Sheet:data こちらに、1行づつ、csvファイルのデータを貼り付け ■csvデータ:1001.csv、1002.csv、・・・、1010.csv ■各csvデータ の並び A列 B列  C列 日付 04/01 時間 10:32 番号 1001 A1  OK  0.12 A2  OK  4.92 A3  NG  7.89 B1  0.05 B2  0.95 C1  101.2 C2  95.4 ・  ・ ーーーSheet:data の貼り付け後の並びーーーーーーーーーーーーーー 1001 04/01 10:32 0.12 4.92 7.89 0.05 0.95 101.2 95.4 ・ 1002 04/01 10:45 ・  ・  ・  ・  ・  ・  ・ ・  1003  ・  ・  ・  ・  ・  ・  ・  ・  ・ ・ ・ ・ 1010  ・  ・  ・  ・  ・  ・  ・  ・  ・ ・ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー csvのデータは、3列で100行ほどありますが、 必要なデータの場所は、列が変わったりします

  • excelVBA CSVの読み込み処理について

    excel2000を使用しております。 約10万行のcsvファイルを2万行づつシートを分けて読み込んで行きたいですが 可能でしょうか?  (1) テキストインポートダイアログを開いてcsvファイルを指定。  (2) 2万行づつシートに順次入力を行う。 お手数ですがご教授お願い致します。

専門家に質問してみよう