
EXCELのVBAの .ActiveSheet.QueryTables.Add メソッドを利用する方法で、
(不可能ならば別な方法でもお願いします。)
CSVファイルを読み取って、シートに書き込みたいと思ったのですが、
その際、CSVファイル全体ではなくて、特定番目の列だけを読み取って、書き込むことは出来ないでしょうか。
その特定の列の指定を複数にすることも出来ますでしょうか。
もし複数でも可能でしたら、EXCELに書き込むときに、
一列目、二列目、と詰めて書くのではなく、間に空列をはさんだりして、
バラバラに好きな位置の列に、読み取ったそれぞれの列を、書き込むことは出来るでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
accessdb_userさんこんにちは。
データソースに新規にCSVのソースを追加することによって可能です。例えば、マイドキュメントにCSVファイルがあり、データベースの先頭をセルA1に置くとして、次のようになるはずです。
ActiveSheet.QueryTables.Add(Connection:=Array(Array("ODBC;DefaultDir=C:\My Documents;Driver={Driver da Microsoft para arquivos texto (*.txt; *.csv)};DriverId=27;Extensions=txt,csv,tab,a"), Array("sc;FIL=text;MaxBufferSize=2048;MaxScanRows=25;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;")), Destination:=Range("A1"))
手動で言えば、外部データの取り込みで、新規データソースを作成し、アクセスするデータベースの種類に対応するドライバに
Driver da Microsoft para arquivos texto (*.txt; *.csv)
を選択するということです。これによって、クエリーが使えますから、
> 特定番目の列だけを読み取って、書き込むことは出来
ます。また、MSクエリーの他の機能も使えます。複数の列の取り込みも可能です。
取り込む列の選択は、上記AddメソッドのCommandTextプロパティの値として、Array関数に格納して使います。
.CommandText = Array("SELECT XXX.AAA, XXX.BBB& vbCrLf & "FROM XXX.csv XXX" )
のようになります。XXXはファイル名、AAA,BBBはフィールド名です。
クエリーを使った場合、空白の列を入れることはできないようです。データ取り込み後にInsertメソッドやCopy、Pasteメソッドで列挿入や入れ替えをすれば良いと思われます。
一度、自動記録すると解りやすいと思います。
No.2
- 回答日時:
テストデータとして下記を作りました。
ファイル名をaa1.csvで保存しました。
5,大島,大阪,商業,a1
23,古河,豊橋,商業,b1
34,恩田,岐阜,普通,d1
45,寒川,福島,国際,c1
67,桐井,新潟,工業,c2
13,青井,久留米,普通,a2
そしてVBEのModule1に
Sub test01()
i = 1
Open "aa1.csv" For Input As #1
While Not EOF(1)
Input #1, a, b, c, d, e
' MsgBox a & "," & b & "," & c & "," & d & "," & e
Worksheets("sheet1").Cells(i, 1) = b
Worksheets("sheet1").Cells(i, 2) = d
i = i + 1
Wend
Close #1
End Sub
テスト済み。項目数(フィールド数)だけa,b,c,・・・を設定してください。そして何番目の項目かを選んでください。このテストでは2、4番の2つを選択した。
その項目数だけWorksheets("sheet1").Cells(i, xx) = xを増やしてください。xxはA列を1としてB列を2とする列順序数です。xは取り出してシート列にセットする変数名(項目データ)です。
ご解答ありがとうございました。
とても明快でわかりやすいソースとご説明で、よくわかりました。
プログラムするときに参考にさせていただきます。
でも、セルに一つずつ書き込むのでは、処理が遅くなってしまうようなのです。
一気に書き込めればいいのですが・・・
No.1
- 回答日時:
データが以下のようになってるとします
名前,生年月日,性別
mike,19920503,male
tiger,19950304,male
linda,19790403,female
Open "CSVファイルの場所" For Input As #1
i = 1
Do Until EOF(1)
Line Input #1, tmp
hairetu = Split(tmp, ",") 'カンマで区切られたものをばらして
'配列にいれます
'1行目を読んだ状態では
’hairetu(0)="名前",
’hairetu(1)="生年月日",
’hairetu(2)="性別"となってます
Cells(i, 4) = hairetu(2) ’配列3番目(性別)をD列に出力します
Cells(i,6)=hairetu(0) '配列1番目(名前)をG列に出力します
i = i + 1
Loop
Close #1
こんな回答しかできませんでした
きっともっといいやり方があるとおもいますので他の方の意見を参考に
してください
セルに一つずつ書いていくと、なぜかやたら処理に時間がかかってしまうようなので、
CSVを一気に読み込みたいと思っていたんです。しかし、列を分けて読み込むのは難しいでしょうか。
でも、ファイル入出力に慣れていなかったので、ためになりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- Access(アクセス) accessでexcelを読み込む時のデータ型 1 2022/03/28 19:45
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
このQ&Aを見た人はこんなQ&Aも見ています
-
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
-
巨大なCSVの加工(指定列のみの抽出)について
Visual Basic(VBA)
-
-
4
特定文字を入ってるCSVの特定の列を特定のexcelシートに取り込みたいです
Visual Basic(VBA)
-
5
外部データを取り込むマクロ
Access(アクセス)
-
6
VBAでCSVの1行目だけを書き換える方法
Excel(エクセル)
-
7
csvファイルを開かずに文字を検索し行を抽出したい
Visual Basic(VBA)
-
8
Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。
Visual Basic(VBA)
-
9
CSVファイルの特定行の削除
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
ExcelVBAの繰り返し処理でwebクエリの取込みできますか。
その他(プログラミング・Web制作)
-
12
0バイトのテキストファイル
Visual Basic(VBA)
-
13
2つ以上の変数を比較して最大数を求めたい
Word(ワード)
-
14
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
15
エクセルで特定の列だけを抽出してcsvで保存したい
その他(Microsoft Office)
-
16
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
17
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
18
【ExcelVBA】zip圧縮されたCSVからシートに取り込む方法
Visual Basic(VBA)
-
19
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
20
【Excel VBA】取り込んだファイルのファイル名を取得するには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
EXCELで 一桁の数値を二桁に
-
PowerPointで表の1つの列だけ...
-
Excelで半角の文字を含むセルを...
-
エクセル 文字数 多い順 並...
-
「B列が日曜の場合」C列に/...
-
エクセルで文字が混じった数字...
-
エクセルで最初のスペースまで...
-
お店に入るために行列に並んで...
-
エクセルの並び変えで、空白セ...
-
オートフィルターをかけ、#N/A...
-
Excelでの列比較(A列とB列の組...
-
VBA 連続行データを5行ずつ隣の...
-
エクセル(勝手に太字になる)
-
【エクセル】指定した文字以外...
-
エクセル 時間帯の重複の有無
-
エクセルの表から正の数、負の...
-
文字を入力したら数値が自動入...
-
エクセルで、列の空欄に隣の列...
-
2つのエクセルのデータを同じよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
EXCELで 一桁の数値を二桁に
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセルで文字が混じった数字...
-
エクセル(勝手に太字になる)
-
エクセル 文字数 多い順 並...
-
Excelで半角の文字を含むセルを...
-
「B列が日曜の場合」C列に/...
-
エクセルで、列の空欄に隣の列...
-
Excel 文字列を結合するときに...
-
Excel、市から登録している住所...
-
【VBA】特定列に文字が入ってい...
-
エクセルのセル内の文字の一部...
-
エクセル 同じ値を探して隣の...
-
お店に入るために行列に並んで...
-
エクセルの並び変えで、空白セ...
-
文字列に数字を含むセルを調べたい
-
エクセルの項目軸を左寄せにしたい
おすすめ情報