ExcelVBAでCSVファイル簡単に取り込むコードを教えてください。
OpenコマンドでCSVファイルを開いて、
自分でカンマ毎に切り分けてセルにセットするやり方はできるのですが、
もっと簡単な方法はありませんか?
イメージとしてはExcelの「外部データのインポート」機能が近いのですが
この機能を使って取り込むと、何やら余計な情報がくっついてしまうようです。
あくまでテキスト情報だけをセルに貼り付けたいのです。
(ちなみに「外部データのインポート」で都合が悪い点は
Ctrl+*で65536行目まで選択されてしまうところです。
何行目までデータがあるか?をCtrl+*で調べているためです。
・・・Range("A65536").End(xlUp)で調べればいいのかもしれませんが・・・)
何か良いやり方をご存知の方はいらっしゃいませんか?
No.3
- 回答日時:
No.1です。
>csvファイルの「001」が取り込み後は「1」と表示されてしまったのですが
>(セルの書式はマクロ実行前も実行後も"文字列"になってます)
>これを「001」のまま取り込むことはできるのでしょうか?
「001」を文字列のまま取り込まなければならないのですか。
そうであれば残念ながらNo.1に書いた単純に開く方法ではだめです。
質問者様やNo.2様が書かれている外部データの取り込みを使われるのがよいと思います。
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 で取り込んだデータ行数を得る事はできます。
この回答への補足
>CurrentRegionの選択ですから、通常はそのような挙動にはならないはずなんですが。
すみません、改めて動かしてみたら、ちゃんとデータの行数だけ選択されました。
質問したときいろいろ試している最中だったので、余計なゴミデータが残っていたのかもしれません。
>QueryTableの定義情報は削除する事ができます。
>Refreshメソッドでデータを取り込んだ直後にQueryTableを削除すれば
テキスト情報のみになります。
まさに理想のかたちです。採用させて頂きます。
-----
「何行目までデータがあるか?をCtrl+*で調べているため」について補足します。
このExcelの使い方として、
1.csvからインポートする
2.手入力でデータを追加する
3.チェックする
4.csvへエクスポートする
という使い方を想定しています。
「チェックする」の中身は型チェック、外部キーチェックのほか、入力漏れチェックが含まれるのですが、
例えばRange("A65536").End(xlUp)のような方法だと、
A列に入力を忘れていた場合、何行目まで入力されているかを正しく判断できません。
このため、どこか1列でも入力されている行まで選択できるCtrl+Shift+*のショートカットキーで調べることにしているためです。
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
この回答への補足
試してみました。
csvファイルの「001」が取り込み後は「1」と表示されてしまったのですが
(セルの書式はマクロ実行前も実行後も"文字列"になってます)
これを「001」のまま取り込むことはできるのでしょうか?
この点さえクリアできれば、採用できるのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- XML PHP.laravelについて 1 2023/07/06 15:26
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 毎日取得するデータを順番...
-
エクセルで1次近似をもとめたい
-
Excelのマクロでワードのテキス...
-
VBA 該当データがない時 ...
-
VBA 空白セルを削除ではない方...
-
C#にてDropDownListの値を動的...
-
マクロVBAについて
-
ミラーデータとは?
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
【VB】DataGridViewにテキスト...
-
Android携帯をUSBメモリ代わりに
-
【エクセル】測定時間がバラバ...
-
最大値、最小値
-
シリアル通信でのデータ受信
-
javaでDBからデータを取ってき...
-
シーケンサにパソコンからアク...
-
レコードセットのデータを1行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報