- ベストアンサー
EXCELのVBAでのCSVファイル読込みと検索
- エクセルのマクロでCSVファイルを読み込み、電話番号とFAX番号を検索する作業を行う方法について説明します。
- 作成したVBAコードで一部問題が発生し、プログラムが実行されない場合、どのように修正すればよいかについてアドバイスを受け取りたいです。
- 操作環境やCSVファイルの内容に問題がないことを確認し、エラーの原因を特定する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは どうせADOを使うのなら、 Sub test1() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim 最終行 As Long Dim sSql As String Dim i As Long Set CN = New ADODB.Connection With CN .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Extended Properties") = "Text;HDR=Yes;FMT=Delimited;" .Open CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\" End With Set RS = New ADODB.Recordset sSql = "" sSql = sSql & "SELECT " sSql = sSql & "LEFT(a.会社@店舗, 4) AS 会社コード, " sSql = sSql & "RIGHT(a.会社@店舗, 4) AS 店舗コード, " sSql = sSql & "a.会社@店舗, " sSql = sSql & "a.得意先コード, " sSql = sSql & "a.店舗名, " sSql = sSql & "b.電話番号, " sSql = sSql & "b.FAX番号 " sSql = sSql & "FROM 得意先サブマスタ.csv AS a " sSql = sSql & "LEFT JOIN " sSql = sSql & " 得意先マスタ.csv AS b " sSql = sSql & "ON a.得意先コード = b.得意先コード " RS.Open sSql, CN For i = 1 To RS.Fields.Count Cells(1, i) = RS.Fields(i - 1).Name Next Range("A2").CopyFromRecordset RS RS.Close End Sub のようにしてはどうですか?
その他の回答 (1)
- Prome_Lin
- ベストアンサー率42% (201/470)
私は、むずかしいことは分かりませんので、もっと、単純化してしまいます。 例えば、「Worksheets(1)」が電話番号などを読み込ませたいシートだとして、あと2つシートを追加しておきます。 そして、「Worksheets(2)」に「得意先マスタ.csv」を読み込ませます。 もちろん、「Worksheets(3)」には「得意先サブマスタ.csv」を読み込みます。 VBAの例としては、 Sub Test() Open "D:\Programming\得意先マスタ.csv" For Input As #1 l = 0 Do Until EOF(1) Line Input #1, a b = Split(a, ",") l = l + 1 For i = 0 To UBound(b) Worksheets(2).Cells(l, i + 1).Value = b(i) Next i Loop Close #1 End Sub という具合に、「Microsoft」云々のようなややこしい(私にとっては)ものは使いません。 「Worksheets(1)」と「(2)」に「csv」ファイルが読み込めれば、あとは「Find」によって検索をかけて、見つければいいと思います。 もしくは、別のエクセルを起動して、シートを2つ用意し、そのエクセルに「csv」ファイルを読み込ませておいて、「Find」で検索をかける、とすれば、元のエクセルに不要なデータを取り込む必要はありません。 冒頭言いましたように、私には、「ADODB」などの扱いは、難しすぎるので、単純にしたいです。
お礼
おっしゃられている事、よくわかります。 FIND でも VLOOKUP でも実行可能ですよね。 ただ今回はADOの勉強をしたかったので、こういう質問をさせていただきました。 どうもありがとうございました。
お礼
構文として大変参考になりました。どうもありがとうございました。