• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelからADOでCSVに接続しているのですが・・・)

ExcelからADOでCSVに接続している際のエラーについて

sagawa998の回答

  • ベストアンサー
回答No.1

http://www.happy2-island.com/vbs/cafe02/capter00803.shtml 'CSV 「C:\TEST\TEST.csv」 Set myDB = CreateObject("ADODB.Connection") myDB.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _ "DBQ=C:\TEST;ReadOnly=1" mySQL = "select * from TEST.csv where 製品名='冷蔵庫'" Set myRS = myDB.Execute(mySQL) Do Until myRS.Eof = True Msgbox myRS("製品名").Value & "=>" & myRS("重量").Value myRS.MoveNext Loop myRS.Close : Set myRS = Nothing myDB.Close : Set myDB = Nothing

関連するQ&A

  • Excel VBA ADOでのCSV取込みについて

    下記は、Excel VBAでADOを使って、CSVデータを取り出すソースです。ソースは、とあるサイトからほぼ丸写しです。 Sub main()   Const DRIVER As String = "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ="   Const PROVIDER As String = "Provider=MSDASQL;Extended Properties="""   Dim cn As New ADODB.Connection   Dim rs As New ADODB.Recordset   Dim idx As Integer   Dim strSQL As String   cn.ConnectionString = PROVIDER & DRIVER & "C:\"""   cn.Open   '全件数取得   strSQL = "SELECT * FROM Sample.csv"   'CSVファイルの内容を取得   Set rs = cn.Execute(strSQL)   rs.MoveFirst   Do Until rs.EOF     For idx = 0 To rs.Fields.Count - 1       Debug.Print rs.Fields(idx).Value '←ここ     Next idx     rs.MoveNext   Loop   Set rs = Nothing   cn.Close   Set cn = Nothing End Sub ここで、「'←ここ」と示した行のrs.Fields(idx).Valueって、実際には「001」と書かれた値は、ダブルクォーテーションでも入ってない限りは「1」と変換されちゃいますよね?これをちゃんと、実際の値「001」のまま取得することって出来ないのでしょうか?

  • excelでのado接続での検索

    シートのA列に商品コードが入っており、別ブックのA列に商品コード、B列に商品名が入っています。 現シートのA列を一行ずつ読んで、その商品コードをキーに別ブックの商品コードを検索し一致するコードがあれば現シートのB列に別ブックの商品名をセットする、という作業を勉強がてらado接続を使って実行したいと思い、下記のコードで実行してみました。 Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open "C:\Users\*****\Desktop\shohinmaster.xls" For i = 2 To 最終行 Set RS = New ADODB.Recordset RS.Open "SELECT * FROM [shohin$] WHERE 商品コード = '" & Cells(i, 1) & "' ", CN If RS.EOF Then Cells(i, 2) = "???" Else Cells(i, 2) = 商品名 End If Next これで実行しますと、現シートの商品名は空白という結果になります。???とすらセットされませんでした。 また RS.Open の行の '" & Cells(i, 1) & "' という箇所なのですが、現シートの商品コードは数値で 入っているのですが、別シートの商品コードは文字列としてセットされていますのでこの形式にしております。 EXCELは2016、OSはWINDOWS7です。 どこが誤っているのかアドバイスいただければ幸いです。宜しくお願い致します。

  • accessのADOの記述について。

    表題についてなのですが、初心者のため宜しくお願いいたします。 T_顧客というテーブルをつくり、そこに名字のフィールド、氏名のフィールドがあり、その中からある人物だけ名字の後ろに"さん"という文字をつけようとしています。 そこで下記のように記述しました。 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim ipt As String rs.Open "T_顧客", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst ipt = InputBox("どの人を変更する?") rs.Find "[名字]='" & ipt & "'" If rs.EOF Then MsgBox "そんな人いないよ!" Else rs![名字] = rs![名字] & "さん" End If rs.Close cn.Close End Sub ・・・・と記述したのですが、実行すると、rs.Close の ところで「実行時エラー'3219' このコンテキストで操作は許可されていません。」とでます。これはいったい どういうことなのでしょうか。宜しくアドバイスお願い致します。

  • Excel VBA EOFに関して

    テキストボックスにDateを入力し、SQLServerに接続しSelectの結果をシートに書き込むだけのものなのですが、「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています」というエラーでさっぱりわかりません。どなたかアドバイスをお願い致します。 -前後省略- stdate = UserForm1.stdate.Value endate = UserForm1.endate.Value strsql = "select ***" strsql = strsql & "from ***" strsql = strsql & "where *** and ***.start_date between '" & stdate & "' and '" & endate & "' " con.Open connectionString Set rs = con.Execute(strsql) Sheets("Data1").Select rs.MoveFirst i = 2 Do Until rs.EOF Cells(i, 1) = rs.Fields(0).Value Cells(i, 2) = rs.Fields(1).Value Cells(i, 3) = rs.Fields(2).Value Cells(i, 4) = rs.Fields(3).Value i = i + 1 rs.MoveNext Loop con.Close Set con = Nothing Exit Sub Err_DBConnectOpen: MsgBox Err.Description If con.State <> ADODB.adStateClosed Then con.Close End If Set con = Nothing End Sub

  • ADOでエクセルに接続した後の文字検索方法について

    http://home.att.ne.jp/zeta/gen/excel/c04p42.htm こちらのページ下の方で■ADOレコードセットを取得して検索しますを 参考にさせて頂き、 検索.xlsを作成→VBAに下のように記述してtest.xlsのA列の中の文字列”excel”を検索して、 もしexcelという文字があれば該当セルの横のセルの文字を返すというものです、 この中で、test.xlsのA列を検索する部分の記述で RS.Find RS.Fields(0) & "='excel'" の部分でうまく行きません。 エラー内容としては 実行時エラー ’3001’: 引数が間違った型、許容範囲外、または競合しています。 と出てしまいます。 ためしにtest.xlsのA1セルにkoumokuと入力して RS.Find RS.Fields(0) & "='excel'"を 以下のように書き換るとうまく行きます RS.Find "koumoku='excel'" test.xlsには項目を作らずに今回は 項目指定ではなく列を指定して文字列を検索したいのですが どなたかお知恵を拝借させていただきたく存じます。 Public Sub test() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open "c:\test.xls" SQL = "SELECT * FROM [Sheet1$]" Set RS = New ADODB.Recordset RS.Open SQL, CN, adOpenStatic, adLockReadOnly 'RS.Find "koumoku='excel'" →これだとOK RS.Find RS.Fields(0) & "='excel'" If RS.EOF Then Debug.Print "Not Found" Else Debug.Print RS.Fields(1) TextBox1.Text = RS.Fields(1) End If End Sub

  • Excel実行時エラー[80004005]について

    ExcelのVBAにてSQLのSELECT文を実行し、取得したデータを一覧表示する仕組みを作っています。 同じプログラムを使用者する者7名の内、1名のみ以下のエラーが発生しています。 どのように対応すればよいか、ご教示ください。 環境 Excel2010 状況 SELECTの実行時 「実行時エラー[80004005] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。」 実行ソース Private Sub exeSelect(sheetNm as string ,sqlSt as String) Dim i As Integer Dim j As Integer Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bookNm As String bookNm = ThisWorkbook.FullName Set cn = New ADODB.Connection cn.Provider = "MSDASQL" cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & bookNm & "; ReadOnly=False;" cn.Open←ここでエラー Set rs = New ADODB.Recordset rs.Open sqlSt, cn, adOpenStatic j = START_ROW Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 Worksheets(sheetNm).Cells(j, i + 1).Value = rs(i).Value Next j = j + 1 rs.MoveNext Loop rs.Close cn.Close End Sub

  • エクセルファイルのadoでの編集

    下記のようにエクセルのレコード編集をこころみていますが 下記のように氏名に重複があると、重複レコードが一緒に編集されてしまいます。アドバイスをいただけないでしょうか。「加藤」さんのほうは問題なく編集できます。 id,氏名,住所 15,山田太郎,東京都 18,山田太郎,栃木県 20,加藤太郎,岩手県 sCoString = "DBQ=" & Server.MapPath("" & Session("DB") & "") & "; ReadOnly=False;" sCoString = sCoString & "DefaultDir=" & Server.MapPath("./") & ";" sCoString = sCoString & "Driver={Microsoft Excel Driver (*.xls)};" Set cn = Server.CreateObject("ADODB.Connection") cn.Open sCoString sSQL = Session("SR") & " where id = " & Request("key") Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sSQL, cn, 3, 3, 1 For i = 0 to rs.fields.count - 1 'Each Fld in Rs.fields If rs.fields(i).name <> "id" Then Response.write getcgivalue(rs.fields(i).name) & "<BR>" rs(rs.fields(i).name) = getcgivalue(rs.fields(i).name) End if next rs.UpDate function getcgivalue(str) getcgivalue= Request.Form(str) 'POST if getcgivalue="" then getcgivalue= Request.QueryString(str) 'GET end function

  • 重複チェック

    いま、重複チェックをしているのですが、MoveFirstで データをある分だけ調べていて、データが重複してなかったら、データを更新したいのですが、はじめにMoveFirst で、データを調べたので、カレント行が最終行にあると思うので、それを例えば、3行目のデータだったり、5行目のデータを変更したいのですが、よろしくお願いします。 重複チェック rs.MoveFirst   Do While Not rs.EOF    If Text2(0).Text <> rs.Fields(1) Then rs.MoveNext End If Loop rs.Fields(1) = Text2(0).Text

  • VBA ADOに関して

    お世話になります。 VBAに関して質問があります。 ADOでDBから値を取得する際、 TEXT型の値が全く取れてきません。 どなたか取得方法をご教授下さい。 宜しくお願い致します。 DB:Sybase OS: RedHat 8.0 Dim rs As ADODB.Recordset Dim sql As String sql = "select * from " & tblName //dbはADODB.Connection Set rs = db.Execute(sql) Do While Not rs.EOF //ここでTEXT型だと、取れてきません。  If IsNull(rs.Fields('Field名').Value) Then End If rs.MoveNext Loop

  • Excel ado処理について

    現在、Excel(インターフェース用)⇔(社内LAN経由)⇔Excel(マスターファイル×4)間で ADOを使用して、データ処理を行おうとしております。 (なお、今までは、画面更新OFFにしてファイルを素直にOPENして 各ファイルデータを格納して処理を行っていたのですが、 業務人員&量の拡大に伴い、Excelの競合が激しくなり、ADOによる処理へと 対応変更を考えております) マスターファイル×4はAccessのように、主キーが振ってあり、連結しております。 インターフェース用のExcelから各マスターファイルをADOで読み込み、 インターフェース用のExcelへとデータを転記する処理を作成中ですが、 なぜか、マスターファイル(A・B・C・D)のうち、Cのファイルのみ、データを10件ほど認識しておらず、 A=B=D≠Cとなってしまいます。 マスターファイルを直接開いて確認しますが、データ数は間違いなく一致しておりますが、 VBA上では認識しておりません。 自分なりに解析したところ、Cのファイルだけ、 "RS.MoveNext"の部分でデータが10件ほど飛んでいると思っております。 以下がそのソースですが、 どこが問題なのか?または、考えうる原因が他にあれば、ご教授いただきたいです。 本当に困っています。宜しくお願い致します。 --------------------------------------------------------------------- Sub StorageData() 'Frag初期値 SW_OK = True On Error GoTo ErrADO '取引先詳細 'ADO定型分 Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open Path00 & "反響データ\" & FileName01 Set RS = New ADODB.Recordset RS.Open SQL, CN, adOpenStatic, adLockReadOnly ReDim Data00(RS.RecordCount, 20) Ctr = 1 Do For i = 0 To 20 If Not RS.BOF Then Data00(Ctr, i) = RS.Fields(i) End If Next i i = 0 RS.MoveNext Ctr = Ctr + 1 Loop Until RS.EOF Ctr = Ctr - 1 ' ReDim Preserve Data00(Ctr, 20) Ctr = 0 Set RS = Nothing CN.Close 'お客さま詳細 'ADO定型分 Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open Path00 & "反響データ\" & FileNam