• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAでCSVファイル簡単に取り込む)

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

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