• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELのVBAでのCSVファイル読込みと検索)

EXCELのVBAでのCSVファイル読込みと検索

このQ&Aのポイント
  • エクセルのマクロでCSVファイルを読み込み、電話番号とFAX番号を検索する作業を行う方法について説明します。
  • 作成したVBAコードで一部問題が発生し、プログラムが実行されない場合、どのように修正すればよいかについてアドバイスを受け取りたいです。
  • 操作環境やCSVファイルの内容に問題がないことを確認し、エラーの原因を特定する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは どうせ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 のようにしてはどうですか?

takazou
質問者

お礼

構文として大変参考になりました。どうもありがとうございました。

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

私は、むずかしいことは分かりませんので、もっと、単純化してしまいます。 例えば、「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」などの扱いは、難しすぎるので、単純にしたいです。

takazou
質問者

お礼

おっしゃられている事、よくわかります。 FIND でも VLOOKUP でも実行可能ですよね。 ただ今回はADOの勉強をしたかったので、こういう質問をさせていただきました。 どうもありがとうございました。

関連するQ&A