プロが教えるわが家の防犯対策術!

ExcelVBAでCSVファイル簡単に取り込むコードを教えてください。

OpenコマンドでCSVファイルを開いて、
自分でカンマ毎に切り分けてセルにセットするやり方はできるのですが、
もっと簡単な方法はありませんか?

イメージとしてはExcelの「外部データのインポート」機能が近いのですが
この機能を使って取り込むと、何やら余計な情報がくっついてしまうようです。
あくまでテキスト情報だけをセルに貼り付けたいのです。
(ちなみに「外部データのインポート」で都合が悪い点は
Ctrl+*で65536行目まで選択されてしまうところです。
何行目までデータがあるか?をCtrl+*で調べているためです。
・・・Range("A65536").End(xlUp)で調べればいいのかもしれませんが・・・)

何か良いやり方をご存知の方はいらっしゃいませんか?

A 回答 (3件)

No.1です。



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

「001」を文字列のまま取り込まなければならないのですか。
そうであれば残念ながらNo.1に書いた単純に開く方法ではだめです。
質問者様やNo.2様が書かれている外部データの取り込みを使われるのがよいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2012/09/09 20:10

「外部データの取り込み」は比較的簡単で高速だと思いますけどね。


>この機能を使って取り込むと、何やら余計な情報がくっついてしまうようです。
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 で取り込んだデータ行数を得る事はできます。

この回答への補足

>CurrentRegionの選択ですから、通常はそのような挙動にはならないはずなんですが。
すみません、改めて動かしてみたら、ちゃんとデータの行数だけ選択されました。
質問したときいろいろ試している最中だったので、余計なゴミデータが残っていたのかもしれません。

>QueryTableの定義情報は削除する事ができます。
>Refreshメソッドでデータを取り込んだ直後にQueryTableを削除すれば
テキスト情報のみになります。

まさに理想のかたちです。採用させて頂きます。

-----
「何行目までデータがあるか?をCtrl+*で調べているため」について補足します。

このExcelの使い方として、
1.csvからインポートする
2.手入力でデータを追加する
3.チェックする
4.csvへエクスポートする
という使い方を想定しています。
「チェックする」の中身は型チェック、外部キーチェックのほか、入力漏れチェックが含まれるのですが、
例えばRange("A65536").End(xlUp)のような方法だと、
A列に入力を忘れていた場合、何行目まで入力されているかを正しく判断できません。
このため、どこか1列でも入力されている行まで選択できるCtrl+Shift+*のショートカットキーで調べることにしているためです。

補足日時:2012/09/09 15:31
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/09/09 15:30

質問者様の方法でもそれほど面倒ではないとは思いますが、別の案として、ふつうに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

この回答への補足

試してみました。

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

この点さえクリアできれば、採用できるのですが。。。

補足日時:2012/09/09 15:02
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/09/09 15:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!