ExcelからAccessのデータを呼び出す方法

このQ&Aのポイント
  • ExcelのVBAを使用して、Accessのデータを呼び出す方法について説明します。
  • 具体的なコード例を示し、データの抽出条件を変数として扱う方法についても解説します。
  • この方法を使うことで、選択した値を変数として利用することができます。
回答を見る
  • ベストアンサー

ExcelからAccessのデータを呼び出す

ExcelのVBAの自動記述にて以下のソースを記録しました With ActiveSheet.QueryTables.Add(Connection:= _ "ODBC;DSN=MS Access Database;DBQ=D:\アクセス練習\db1.mdb;DefaultDir=D:\アクセス練    習;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _ , Destination:=Range("A1")) .CommandText = Array("SELECT テーブル1.ID, テーブル1.教室名, テーブル1.コース名, テー ブル1.講師名" & Chr(13) & "" & Chr(10) & _ "FROM `D:\アクセス練習\db1`.テーブル1 テーブル1" & Chr(13) & "" & Chr(10) & _ "WHERE (テーブル1.教室名= '英語')" & Chr(13) & "" & Chr(10) & _ "ORDER BY テーブル1.ID") .Name = "MS Access Database からのクエリ_1" .Refresh BackgroundQuery:=False End With 抽出条件の部分(今回は「英語」)をインプットボックスまたは、フォームのコンボボックスなどで選択した値を変数として代入したいのですが、  KWD=Commbobox1.Text "WHERE (テーブル1.教室名= 'KWD')" KWDを変数として見てくれず、うまく走りません 変数として処理するにはどのように記述すればよいでしょう よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

変更前: "WHERE (テーブル1.教室名= '英語')" & Chr(13) & "" & Chr(10) & _ 変更後: "WHERE (テーブル1.教室名= '" & KWD & "')" & Chr(13) & "" & Chr(10) & _ のように文字列結合します。

doredora
質問者

お礼

できました! ありがとうございます。 これで作業に幅が持てます ほんとうにありがとうございました

関連するQ&A

  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。

  • ACCESS2000のUPDATE

    すみません、検索はしたのですが・・・ VB6.0でACCESS2000のデータをUPDATEしたいと思っています。 ですが ※P_CN_DATABASEは、ADODB.Connectionです。 ※VAL_1/VAL_2は変数です。 --------------------------------------------------------------------- P_CN_DATABASE.Execute "UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "'" --------------------------------------------------------------------- とすると、全件のデータが更新されるのですが、 --------------------------------------------------------------------- P_CN_DATABASE.Execute "UPDATE SET TABLE1 COLUMN1 = '" & VAL_1 & "' WHERE COLUMN2 = '" & VAL_2 & "'" --------------------------------------------------------------------- このようにWhere句をつけるとエラーも発生せず、何も更新されません。 更新するデータとWhere句のデータの、それぞれのシングルクォーテーションが不要なのかな?と思い、はずして試しましたがダメでした。 何がいけないのでしょうか? よろしくお願いします!

  • Access VBA 日付で抽出できない?

    次の質問にお答えいただけませんか。 フォームで抽出条件を入力しテーブルから抽出をするとき Dim db As DAO.Database Dim rs As DAO.Recordset Dim mySQL As String Set db = CurrentDb() mySQL = "SELECT * FROM T_明細 " _ & "WHERE 顧客ID = " & CStr(Me!txtKey) & ";" Set rs = db.OpenRecordset(mySQL, dbOpenDynaset) 上記のような記述をしました。 テーブル名:T_明細   フィールド:顧客ID  日付 金額  フォームの抽出条件入力テキストボックス:txtKey このとき顧客IDでの抽出は問題なく出来ましたが "WHERE 顧客ID = を "WHERE 日付 = に変更して日付で抽出をしたいのですがうまくいきません。 テーブルの日付フィールドは 書式をgee-mm-dd 定型入力を>L99\-99\-99;0;# で書き込みました。 フォームのtxtKeyテキストボックスのプロパティも書式をgee-mm-dd 定型入力を>L99\-99\-99;0;#に設定してあります。 このようなときは mySQL = "SELECT * FROM T_明細 " _ & "WHERE 日付 = " & CStr(Me!txtKey) & ";" の、記述を何か変更しないといけないような気もしますが 対処の方法を教えていただけませんか。

  • エクセルからアクセスへ

    お世話になります。 エクセルからVBAでアクセスのテーブルに レコードを追加させたいのですが、 下記の記述でいきなり mydb as database の所が 青く塗られ 「コンパイルエラー:ユーザー定義型は定義されていません」 とエラーになってしまします。 また、databaseのdが小文字なのも気になります。 参照設定での項目チェックが必要なんだと思うのですが どこにチェックしたら良いのか、またそれだけではダメなのか 分かりません。 どなたかご教授下さい。     記 Dim mydb As database Dim myrs As Recordset Dim myrnge As Range Dim myrow As Long

  • Accessのリンクテーブル

    すみません、教えてください。 Accessで複数端末から一つのMDBにデータ登録をさせる為に、VBAでツールを作っています。以下のように記述をして いるのですが、MDBを閉じるたびに、リンク先のDBを認識しなくなってしまいます。テーブルでリンクを貼りなおすとまた動くようになるのですが、どうしたらリンクを貼りなおせずにできるようになるのか、どなたか教えてください。どうかお願いいたします。 Dim LinkDB as Database Dim RST AS Recordset Set LinkDB = WorkSpaces(0).OpenDatabase("リンク先のDBの名前") Set RST = LinkDB.OpenRecordset("テーブル名",DbOpenTable)

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • アクセス97のVBAが2000で使えません。

    ACCESS97で問題なく動いていたVBAなのですが、ACCESS2000では「ユーザー定義型は定義されていません。」というエラーとなって動きません。 ソースで言うと、 Dim DB As Database というような変数宣言の部分でいきなり出てきます。 Database型がユーザー定義型と認識されているようですが、何故こうなってしまうのでしょう? またどのようにすればこの問題を解消できるでしょうか? また97と2000でのコーディング上の変更点などは、どこで調べるのが分り易いでしょうか?

  • EXCELのVBAでACCESSにアクセスすると「My Documen

    EXCELのVBAでACCESSにアクセスすると「My Documents」フォルダに.odcファイルが多数生成される。 (1)ACCESS(業務DB.mdb)にあるAテーブルのデータをEXCELのシートに取り込みたいために、EXCELで「外部データの取り込み」から業務DB.mdbのAテーブルとリンクしています。 (2)EXCELをオープン時に自動で業務DB.mdbのAテーブルのデータを更新させたいため、以下のVBAで更新処理をしています。  ---------------------------------------------- With Selection.QueryTable .Connection = Array( _ "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" & ThisWorkbook.Path & "\業務DB.mdb;" _ , _ "Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:" _ , _ "Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password" _ , _ "="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLE" _ , "DB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False") .CommandType = xlCmdTable .CommandText = Array(シート.Name) .Refresh BackgroundQuery:=False End With  ---------------------------------------------- (3)上記(2)を実行するたびに「My Documents」の下にある「My Data Sources」フォルダに業務DB.odcファイルが生成されます。  具体的には、処理1回目で「業務DB.odc」が生成され、2回目で「業務DB(1).odc」、3回目で「業務DB(3).odc」というように.odcファイルが処理毎に生成されてしまいます。 この.odcファイルを処理毎に生成されるのを防ぎたいのですが、手法がわかりません。 .odcファイルは1ファイルだけで十分です。 ご存知の方、ご教授宜しくお願い致します。m(_ _)m

  • と改行を含んだデータが入ってるのですが

    アクセスのレコードに 水300cc 味噌13g と改行を含んだデータが入ってるのですが VBAでこの改行を置換するにはどうすれば良いのでしょうか? str置換前 = Chr(10) & Chr(13) str置換後 = "," strSQL = "UPDATE テーブル Set テーブル.[フィールド] = """ & str置換後 & """ WHERE (テーブル.[フィールド])=""" & str置換前 & """;" DoCmd.RunSQL strSQL としても置換できませんでした。

  • テキストボックス名を変数で指定してプロパティ設定?

    Ms Access2000,2003 のVBAで テキストボックスのプロパティを変更する時 Me.TextBoxName.Fontsize = 9 などと記述しますが、 この式の左側、テキストボックス名等を変数で処理することが出来るのでしょうか?

専門家に質問してみよう