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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
csvファイルを開かずに文字を検索し行を抽出したい
Visual Basic(VBA)
-
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
-
4
csvファイルのデータの一部を取り出したい
Visual Basic(VBA)
-
5
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
8
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
9
CSVファイルの特定行の削除
Visual Basic(VBA)
-
10
エクセルでCSVデーターを所定の様式に読み込む
Excel(エクセル)
-
11
Excel:任意の列だけCSV形式で出力したい。
Excel(エクセル)
-
12
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
13
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
-
14
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
15
エクセル マクロでCSVファイルを下から指定した行数だけ表示したい
Excel(エクセル)
-
16
エクセルでエラーが出て困っています。
Excel(エクセル)
-
17
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
-
18
VBAでCSVを文字列として取り込む方法
PowerPoint(パワーポイント)
-
19
巨大なCSVの加工(指定列のみの抽出)について
Visual Basic(VBA)
-
20
Excel VBAを使った複数のCSVファイルの読み込みについて教えてください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
エクセルで二つの数字の小さい...
-
LOOKUP関数を使えばいいのでし...
-
VBAで文字列を数値に変換したい
-
PowerPointで表の1つの列だけ...
-
エクセルの表から正の数、負の...
-
エクセル 文字数 多い順 並...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
エクセルの項目軸を左寄せにしたい
-
Excel、市から登録している住所...
-
エクセル(勝手に太字になる)
-
50人を数回、グループ分けする...
-
エクセルで文字が混じった数字...
-
エクセルの並び変えで、空白セ...
-
オートフィルターをかけ、#N/A...
-
VBA 連続行データを5行ずつ隣の...
-
Excelで、A列にある文字がB列...
-
エクセルで2列のセルを連続して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報