• ベストアンサー

ExcelからAccessデータを検索するマクロ

ExcelのA1セルにある値をAccessのデータベース (ファイル名:abc.mdb、テーブル名:Tbl_a)の フィールド1から検索し、対応するレコードの フィールド2の値をExcelのB1セルに書き込む というマクロはどのように書けばよいのでしょうか? Excel, Accessともに2000です。 よろしくご教授お願いします。

  • akey
  • お礼率69% (37/53)

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

Accessの[フィールド1]が、テキスト型フィールドの場合、次のコードで できると思います。 下記コードを設定する前にVBEのメニューから[ツール]-->[参照設定]で 「Microsoft DAO 3.6 Object Library」 にチェックを入れます。 Sub Macro1() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = OpenDatabase("c:\abc.mdb") Set rs = db.OpenRecordset("tbl_a", dbOpenDynaset) rs.FindFirst "[フィールド1]='" & Range("A1").Value & "'" If rs.NoMatch Then   Range("B1").Value = "" Else   Range("B1").Value = rs![フィールド2] End If rs.Close Set rs = Nothing Set db = Nothing End Sub

akey
質問者

お礼

早速のご回答ありがとうございます。 教えていただいた通りの方法で目的を達成することができました。

関連するQ&A

  • ExcelからAccessデータを検索するマクロ

    Excel、Accessとも初心者です。 下記を参考にさせて頂いております。 http://okwave.jp/qa/q441987.html これを、(1)~(3)に対応させたいのですが どのように書き換えればよろしいのでしょうか? (1)A1→ A列の最後まで (2)対応するレコードフィールド2   → 規定した複数のレコードフィールド     (例えば、フィールド3とフィールド5とフィールド8) (3)Excel, Accessともに2007です。 (4)検索の経過は表示させない  (少しでも早く処理したい。ひとつひとつ検索結果を表示すると遅くなると聞ききました) ・・・・・・・・・・・・・・・・・・・・・・・・・ Sub Macro1() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = OpenDatabase("c:\abc.mdb") Set rs = db.OpenRecordset("tbl_a", dbOpenDynaset) rs.FindFirst "[フィールド1]='" & Range("A1").Value & "'" If rs.NoMatch Then   Range("B1").Value = "" Else   Range("B1").Value = rs![フィールド2] End If rs.Close Set rs = Nothing Set db = Nothing End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・ よろしくご教授お願いします。

  • エクセルのデータをアクセスのテーブルに移動入力する

    エクセルのデータをアクセスのテーブルに移動入力するVBA フォルダAにおいて、a1.xlsxというファイルがあり、 そのsheet1のセル(a,1)=1 A1が1 とします その値をアクセスのデータベース(これもフォルダAにあります)  b.accdbのテーブル1の フィールド1に入力したいときの エクセルマクロのVBAを御教示いただけると助かります さらに続けて フォルダAにおいて、a2.xlsxというファイルがあり、 そのsheet1のセル(a,1)=2 A1が2 とします その値をアクセスのデータベース上記と同じ  b.accdbのテーブル1の フィールド1に追加で入力したいときの エクセルマクロのVBA 以上わかると助かります よろしくお願いします win10 office365

  • Excel → Access データをインポート

    OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

  • エクセルからアクセスのテーブルにデータ追加したい

    Excel(xls)からAccess(mdb)のテーブル(出力)にデータを追加できるVBAコードを教えてください。 条件 Accessの名前と場所 C:\SP3\Print.mdb テーブル名 (出力) (履歴) テーブル構造 (出力) (履歴)ともに、フィールド1~4、ID 履歴テーブルのIDは、カウントアップであり、プリント後のデータが格納される。エクセルでマクロを起動したときに、最初に履歴テーブルの最後のIDを知り、エクセルの対応するID列をレコード分だけ最後のID+1から通番を付ける。通番を付けたら、エクセルのフィールド1~4とIDのレコードセットを出力テーブルの該当列に追加する。 以上がやりたいことです。 エクセルに、10行から100行程度のデータを貼りつけて、このVBAを紐づけたマクロボタンを押したら、履歴テーブルの最後を調べて、その次の番号から順に、上からID列を更新して、その後、出力テーブルに追加したいのです。 検査機器用に専用開発されたプリントソフトがデータベースにAccessを持っていて、プリントソフトのフロントからデータを手入力する仕様なのですが、エクセルで加工したデータをAccessの所定のテーブルに横差ししたい考えです。対象のPCには、Accessをインストールしていないため、エクセル側からテーブルを操作したい理由です。 よろしくお願いします。

  • ACCESSのマクロ?

     ほとんど初心者なので、難しいことを教えていただいてもわからないのですが、Excelで他のシートのセルを引用するのに、 =VLOOKUP(A1,[ABC]Sheet1!$A$1:$D$19,4,FALSE)  こんな感じのマクロを書きます。 これと同じことをaccessでしたいのですが、VBAで書かないと無理なのでしょうか?  accessは、テーブルをたくさん使ってクエリで処理するようですが、excelで慣れてしまっているので、理解できなくて困っています。よろしくお願いします。

  • アクセス2000のマクロの設定について

    アクセスのマクロで、アクセスのデータベースを、指定したエクセルファイル内の、指定したシートにエクスポートするマクロ設定をしたいのですが、よく判りません。 マクロ設定で、アクションのワークシート設定を選ぶまでは判ったのですが、テーブル名、ファイル名、フィールド名の設定、範囲の設定の意味が判りません(ヘルプを見たのですが、理解出来ません)。どなたか設定方法を教えて下さい。

  • accessのマクロでODBC接続で外部データをインポートしたいのですが

    accessのマクロでODBC接続で外部データを自動でインポートしたいのですがうまくいきません。「ファイルから外部データの取込みでインポート→ファイルの種類でODBC DATABASES()を選択し、コンピュータデータソース指定→テーブルを指定」ではできたのですが、マクロで以下のように設定したのですがうまくいきません。 アクション・・データベース変換 変換の種類・・インポート データベースの種類・・ODBC データベース データベース名 ODBC;DSN=ACSKNSM1DS;APP=Microsoft® Access;WSID=JYOHO08;DATABASE=ACSKNSM1;Trusted_Connection=Yes;TABLE=dbo.tbl_bank オブジェクトの種類・・テーブル オブジェクト名・・dbo_tbl_bank 変換先名・・銀行T テーブルの構造のみ変換・・いいえ ※銀行Tのテーブルはアクセスのテーブルを作成しました。 どうか宜しくお願い致します。

  • ACCESS 以下のようなレコードを抽出するSQL

    ACCESSのデータベースで あるフィールド(フィールドAとします)の値に対して、 別のフィールド(フィールドBとします)の値が1つに決まる データベースがあるとします。 例えば、フィールドAの値が1のレコードは、 どのレコードもフィールドBの値はaである。など このようなデータベースでこのような関係になっていないレコード 例えば、フィールドAの値が1のレコードの中に フィールドBの値がaであるレコードと フィールドBの値がbであるレコードがある。など を抽出するSQLはどのように記述すればよいでしょうか。 テーブル名はTABEL1とします。 次の2つのケースでお願いします。 (1)フィールドAの値が異なればフィールドBの値が異なる場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが ある時、フィールドAの値が1でないレコードの中には、   フィールドBの値がaであるレコードが存在しない場合   (2)フィールドAの値が異なるがフィールドBの値が同じこともある場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが あっても、フィールドAの値が1でないレコードの中にも、   フィールドBの値がaであるレコードが存在する場合 【回答例】(ただし、1,a,bなどの具体的な値は使わないこと) ・フィールドAの値が1のレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1; ・フィールドAの値が1でフィールドBの値がaのレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1 AND フィールドB='a'; ・フィールドAの値が1でフィールドBの値がaのレコードと  フィールドAの値が1でフィールドBの値がbのレコードを表示する例 SELECT * FROM TABLE1 WHERE (フィールドA=1 AND フィールドB='a') OR (フィールドA=1 AND フィールドB='b'); この目的は、データベースに問題があり、 問題となっているレコードを見つけて直したいのです。 よろしくお願いします。

  • ExcelからAccessへのコピーする場合

    Access97とExcel2000を利用しています。  例えばaccessで、   テーブルAには  ID と 製品名 のフィールドを設けます。   テーブルBには  ID と 販売個数 というフィールドを設けます。      ここでテーブルA,BのIDは同じものでオートナンバーです。   また、Excelで、  セルA1,A2,A3にはそれぞれ製品名として   チョコレート、キャンディー、ビスケットが入力されています。  まず、ExcelのA1のチョコレートからA3のビスケットを範囲指定しコピーしました。  これをAccessのテーブルAに貼り付けしたいと考えています。 質問は、 Accessに貼り付ける場合、何処にカーソルを運んで貼り付ければ良いのでしょうか。 また、テーブルAにExcelのデータを貼り付けた場合、増えたレコードはテーブルBに反映されるのでしょうか。 初心者です。教えて下さい。  

  • accessマクログループの全マクロの実行方法

    お世話になります。 現在、顧客のデータベースを作成しております。DBは名前、住所等の連絡先を入力したテーブルを元に下記のクエリやマクロを作成しています。取引がない顧客等はメイン名簿テーブルから削除して、メインテーブルの構造をコピーした、削除テーブルに入れるようにしたいと考えています。 そこで下記のテーブル、クエリ、グループマクロを作成しました。グループマクロは作成したクエリ3つで構成されています。各アクションクエリは一個一個は正常に作動するのですが、グループマクロを実行しますと、1行目のクエリしか実行されません。実行方法はマクロの画面で更新ボタンを押しても、フォームに削除というボタンを作成してクリック時にグループマクロを実行させるよう設定した場合の両方で起きます。  グループマクロに登録されているマクロを全て実行するにはどうしたらいいのでしょうか。色々調べると、グループマクロは1行目しか実行できないようですが、全て実行する簡単な方法はありませんか?できればVBAではない方法を希望します。大変お手数ですがどうぞ、よろしくお願い致します。  ・(テーブル)メイン名簿(以下、名簿tblとします)    ⇒フィールド:名前、郵便番号、住所、電話、メモ欄、削除の有無、削除処理日  ・(テーブル)削除テーブル(以下、削除tblとします)    ⇒フィールドは上記と同じ  ・(更新クエリ)削除処理日追加    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除処理日」に処理日が     入力されるようにdate関数を設定しています。(date())  ・(追加クエリ)削除tblへ追加    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除tbl」へそのレコードを、     追加する。    ・(削除クエリ)名簿tblからの削除    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、名簿tblからそのレコードを、     削除する。  ・(マクログループ)削除処理(上から順番に実行希望)     マクロ名           アクション     クエリ名     削除処理日追加     クエリを開く    (更新クエリ)削除処理日追加     削除tblへコピー      クエリを開く    (追加クエリ)削除tblへ追加   名簿tblからの削除    クエリを開く    (削除クエリ)名簿tblからの削除                                                        以上

専門家に質問してみよう