• ベストアンサー

〔VBA・マクロ〕EXCELからACCESSデータをひっぱるには?

当方のレベルはアクセス初級者(基本的な操作)、 エクセルはごく簡単なVBAをいじる中級者です。 アクセスにて顧客マスター、商品マスターを作成しています。 エクセルで納品書を作成しています。 現状では外部データの取り込みをつかって エクセルシートに顧客データ(シート1)と商品データ(シート2)を 取り込んだ後に、納品書(シート3)でシート1、2に VLOOKUP関数をかけて、納入先と商品情報を 伝票におとしこんでいます。 こんなまどろっこしいことをせずに、 エクセルからアクセスのテーブルへ直接データを取り込む方法は ないものでしょうか? どなたかよろしくお願いいたします。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.7

>当方のレベルはアクセス初級者(基本的な操作)、 >エクセルはごく簡単なVBAをいじる中級者です。 Accessのレポートと言う方向になっていますが、 この条件でしたら、エクセルで帳票もありだと思います。 その理由は、 ・mdbからデータを引っ張るのはVBA+ADOを使えばそれほど難しくない。  Ecxel VBA経験者なら大丈夫でしょう。 ・Excelの方が表現力が豊かなので、最終的な帳票の見栄えは良い。  もちろん、作りこめばの話ですが・・・。 ・ADOに慣れることは、今後VB等の他の開発言語を使う際に役立つ。  そういう機会が有ればの話ですが・・・。 Excel帳票のメリットは他にも ・帳票をExcel形式で保存できるので、後から簡単に加工できる。 ・メールで送ったりも出来る。  (Accessは持っていないが、Excelは持っている、という人は多い) もちろん、Accessの勉強のためレポートを使うのもありだと思いますし、 その方が簡単かもしれません。 参考のため、Excelでの方法を書いてみます。 どちらを選択するかは、お好みで。 ****Excel VBA+ADO で mdbファイルからデータを取り込む例**** まずAccessの方で、帳票用のクエリを作ります。 データの入っているテーブルと、マスターテーブル等を結合して、並び順なども指定しておきます。この辺りはデータベースの方が便利ですので、ExcelのVLOOKUP関数は使わない方向で・・・。 データベースを扱う上でSQL文(クエリ)の学習は必須です。SQL文は標準化されていますので、Access以外のデータベースでも応用が利きます。覚えておいて損はないと思います。  SQL  SELECT  INNER JOIN 上記のキーワードを検索すれば必要な情報は見付かると思います。この辺りが、データベースを扱う際の、最初の難関でしょう。 もっと具体的な情報が必要でしたら、テーブルの構造(テーブル名、フィールド名、主キー)を補足してください。 次に、Excelの準備ですが、VBAの画面で[ツール]→[参照設定]を開き  Microsoft ActiveX Data Objects 2.7 Libray を選択しておきます。(バージョンは多少異なるかも。最新の物を選択) ----サンプルソース----  Dim cnn As New ADODB.Connection  Dim rst As New ADODB.Recordset    Dim dbName As String  Dim dbPath As String    dbName = "db1.mdb" 'MDBファイル名  dbPath = ActiveWorkbook.Path & "\" 'MDBのPath 今回は ExcelのBook と同じフォルダを指定  ' MDB との接続を確立する。決まり文句です。  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbPath & dbName & ";"  'レコードセットを開く。今回は"Q1"というクエリを参照のため開きます。  'この部分で、SQL文を指定することも可能です。  rst.Open "Q1", cnn, adOpenForwardOnly, adLockReadOnly    'レコードが無くなるまで繰り返します。  Do Until rst.EOF      'Recordset![フィールド名]で各フィールドのデータを参照できます。   Debug.Print rst![ID], rst![DATA]      rst.MoveNext '次のレコードに移動します。  Loop    rst.Close  cnn.Close  Set cnn = Nothing  Set rst = Nothing ---------------------- これだけのコードでデータベースのデータを参照できます。 後は、ExcelのVBAの知識があれば帳票を作ることは可能でしょう。 (この部分が多少面倒かも・・・(^^;、Accessのレポートにするか悩むところです) ADOに関しては、Webで検索すれば解説しているサイトは見付かると思いますので、詳しくはそちらで。

taniyan777
質問者

補足

おおおおうっ!師匠!おおおんっ! 私の気持ちを汲んでいただきありがとうございますぅぅっ! レポート作れば簡単コールに責め立てられ ヨヨと泣いておりました・・・ 既に見栄えはそこそこいいフォーマットをつくっていたんですぅぅ! いざ、アクセスレポートに叛旗をひるがえさんっっっ! でもADOって何・・・・orz

その他の回答 (6)

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.6

>できれば、アクセスでの納品書の作り方がわかる本・サイト等をおしえてくださいませ。。。 このあたりでいかがですか? http://www.amazon.co.jp/o/ASIN/4898146902/503-7159227-1001546?SubscriptionId=02ZH6J1W0649DTNS6002 下記サイトでは初心者向けのACCESS開発手法の説明があります。 http://www.naboki.net/access/beginner/index.html

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.5

できることはできますけど。 ACCESS側のレポート作成で納品書を作成するほうが、はるかに簡単だと思います。 ExcelからACCESSのDBのデータを直接使うのは、それなりにACCESSを勉強されてからでないと難しいかと思います。(はっきり言ってレポートの作成より、EXCEL側でのACCESSデータ取り込み用VBA作成のほうが桁違いに難しいです)

taniyan777
質問者

お礼

できれば、アクセスでの納品書の作り方が わかる本・サイト等をおしえてくださいませ。。。

taniyan777
質問者

補足

了解です。 では、アクセスで納品書をつくるとして、 必要なのは (1)レポートフォーマットの作成方法 (2)顧客データと売上データ(商品×数量)の入力方法 になりますよね。 参考書カモーーーンw

noname#60992
noname#60992
回答No.4

エクセル側からアクセスのデータの更新などがあるのなら、ADOを使うという手もあります。 SQL文なども発行できるので、どうしてもエクセルから行いたいのであれば、このあたりを探ってみてはいかがでしょうか? 私はエクセルのVBAはあまり知りませんので、詳細はよくわかりませんが、エクセルの特定のセルに、sqlの結果を入れていけばよいと思います。  まあ、No2の方のおっしゃるとおりアクセスでレポートを作るほうがはるかに簡単だと思いますけれど。 

taniyan777
質問者

補足

顧客コードと商品コードと数量を入力したら、 自動的に金額計算されたシートがでてくる・・・ 入力フォームの作成方法であるとか、データのつなぎ方・・ という部分がアクセスでどうやっていいか、わかっていない 参考書をひきながらではとてもじゃないが前にすすまない という、状態です。 皆さんが、簡単と前提にある知識が 私にとって今なんだかよくわかっていない、という 厳しい現実を前にたたずんでいる状態で こんなことになってます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

Accessで全て行えば・・とも思いますが、完成までに時間がかかりそうですね。 Excelに MS Queryをインストールして・・リンク先(後半部分)でも良さそう。 私は使ったことはありませんけど (^^ゞ 井上 治 氏のHPです。 Microsoft Accessなど、外部で作成されたデータソースをシートに取り込む方法です http://www.asahi-net.or.jp/~ef2o-inue/kihon/sub01_05_22.html

noname#182251
noname#182251
回答No.2

納品書もアクセスで作った方が、もっと楽だと考えますが。 何か不都合があるのでしょうか?

taniyan777
質問者

補足

初級者ゆえ 作り方がよくわかっていないんです。 参考書は買ってるんですがいまいち理解できていない。 よって慣れたエクセルのほうがいいやー という判断に。。。笑

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

インポートとかリンクです インポートを自動化したいときだけ >〔VBA・マクロ〕 ですね

関連するQ&A

  • ACCESS2003を使って請求・納品伝票を作っています

    ACCESSの素人です。 本を見ながらこのたびACCESS2003で請求・納品伝票を作っているのですが、クリエで行き詰っています。。 どんな請求・納品伝票を作ろうとしているかご説明します。 現在手書きで使っている伝票(請求書控え、請求書、納品書、納品書控えの4種類を手書き複写式)そのもののフォームをワードで打ち直してワード文章にしてあります。 その原稿にACCESSで打ち込んだデータをはめたいと思っています。 フォームは手書きをする要領(点数計、小計合計、正味合計などは自動で計算できるようにしたいと思っています)で画面上確認しながら打てるようにしたいと思っています。 現段階ではテーブルをようやく作ることができました。 商品マスター、受注明細マスター、伝票情報マスターを作りました。 内容は商品マスターは商品の名称と価格を入れています。 受注明細マスターは受注明細ID、受注ID、顧客ID、数量、割引 伝票情報マスターは顧客ID、受注ID、あとは請求先の送付先や宛名などです。 これらをどういうクリエでつないだらいいのかわかりません。。 そのためここで今本とにらみ合いをしていますが、どうしても打開策が見つかりません。。 どうかご教授くださいますようお願いいたします。。

  • AccessやExcelのマクロができるようになりたいのです

     私はAccessやExcelでデーターベース、住所録や顧客管理を作成して使うことはできるのですが、いまいちマクロを構築して更に使いやすくすることができません。  AccessやExcelのマクロはVisual Basicという言語のようですが、それは初級シスアドを勉強すればできるようになるのでしょうか?別に資格にこだわっているわけではありませんが、資格を取るという目的に向かって勉強した方がはかどるので・・・。  また、わかりやすい参考書などありましたら、合わせて教えて下さい。おわかりの方、よろしく御指導お願いします。  

  • エクセルのマクロやアクセスについて

    よろしくお願いします。 アクセスや、エクセルのマクロやVBAについて勉強しようと思っています。 (転職活動の時、上記のものを使えますか、とよく質問されたため) 今は本を読んで自分でやっているのですが、いまいち実際にどのように使うのかがイメージがわきません。 エクセルのマクロやVBAは、単純作業を自動化するものだと勉強しましたが、関数式でも作れるものもあり、どのような場面で使うのかイメージがわきません。 アクセスに関して、エクセルでもできることもあり、データベースとしてアクセスを使ったほうが良い時というのはどのような時なのかがわかりません。 アクセスであれば本を見ながら、顧客伝票などを作ったりしました。しかし、顧客伝票とか作らない部署では必要ないツールなのか?と言われればたぶんそうではないと思うのですが。。。 データの解析とかでもアクセスは使うと思うのですが。 実際上記のものはどのような場面で使うのでしょうか? また、独学で勉強し、一通り学ぶのにはどれくらい時間がかかるでしょうか? 3か月必死で勉強すればある程度こなせるでしょうか? お金の問題上、スクールに通うのではなく本で勉強したいです。 アドバイスをお願いします。

  • 既存シートにデータ追加したい

    ■マスターシート 日付 商品 個数 付加データ ↓ (項目列ごとに下記追加されていきます) (付加データだけは月末に一括手入力) ↓ ■納品書TMPシート ■日付名シート納品書(印刷用) --------------------------- 現在、マスターシートから、納品書TMPシートを使い、 同ブック内に日付名シートの納品書(付加データ除く)をVBAで作成しています つまり、付加データだけが入力されてない納品書が日付名シートで作成されます 月末の処理都合上、マスターシートへ付加データ一括入力して 既に作成されている各日付名シートに追加転記させたいのです マスターデータの項目日付と日付名シートが一致の場合、 その日付の付加データを抽出し、該当の納品書へ転記する 関数VLOOKUPなどで、各納品書に表示はできるのですが、 都合上月初にマスターデータをクリアしなければならず、 そうした場合、表示エラーになるので、転記データを残す方法を VBAで考えています。 For文などで固定日付でのシート抽出は何とか出来るのですが、 さらにマスターシートの日付も動くので?入れ子?ループ?悩んでいます どなたか助けて下さい

  • 【エクセルマクロ】シート間のデータ切取⇒貼付マクロをくみたいです。

    シートが2つあって、それぞれ「商品・顧客マスタ3」、「取引終了データ」というシート名です。 「商品・顧客マスタ3」のシートの列A~Kまでをドラッグしている状態で「CTRL+SHIFT+U」 をおすと、切り取り処理されて、「取引終了データ」シートの同じA~Kまでに「すべて貼り付け」されるマクロをつくりたいのですが、スキル不足からできません。ぜひ教えていただけないでしょうか? 【備考】 ・「商品・顧客マスタ3」シートのドラッグしている行は様々で1行限りのときもあれば、5行(超え)等になるときもあります。列はつねにA~Kまでです。例 5行のとき⇒A401~K405までをドラッグしている状態。常に連続しています。 ・「取引終了データ」の貼り付け位置はA~K列の文字が入っていないところの一番最初の位置にしたい  です。現在では、A1~K402までデータがぎっちり入っていて、A403を先頭に切り取ったデータを貼り付けしたいです。(データのはいっていないA列の一番上にはりつけできれば十分です。) ・貼り付け後は、「商品・顧客マスタ3」の空欄になったところを「削除」して上方向につめたいです。削除は行  全体ではなく、列A~Kまでとしたいです。 なお、EXCEL2002をビスタで使っています。 お手数をおかけいたしますが、ぜひよろしくお願いいたします。

  • エクセルとアクセスの勉強について・・

    エクセルとアクセスの勉強について教えてください。 エクセルは初級レベル。基本的な関数まではできます。 アクセスにいたっては、触ったことすらありません。 そこで、その両方を勉強しようと思っているのですが、なるべく早くマスターするには、 やはりスクールなどに通った方がいいのでしょうか? 独学で勉強は難しいでしょうか? もし独学でエクセルとアクセスを中級レベル以上まで勉強された方がいれば、どのような方法で 上達までにいたったのか教えて頂きたく思います。 宜しくお願いします。

  • Excelのコマンドボタンでアクセスのデータを返す。

    Excelのブックに2シートあります。 シート1にはコンボボックス商品を選択させる行が複数あります。 シート2には、商品名がずらっと並んでいます。 (その商品名をシート1のコンボボックスで選択) シート1上にコマンドボタンを設定して、 コマンドボタンを押すと、アクセスのクエリで 抽出したデータ(商品名)を返したいのです。 マクロに外部データの取り込み→アクセスクエリ→ シート2の行にデータを返す。 事はできましたが、それをコマンドボタンに 上記マクロを書き込むことはできるのでしょうか? 表現が下手ですみません。。 よろしくお願い致します。

  • Microsoft office access VBAについて

    Access2007を用いて、旅館の客室の在庫管理をしたいのですが、 おおまかなイメージがつかず、手詰まり状態となってしまいました。 商品、商品注文、顧客のマスターを作成し、在庫テーブルを作ってクエリで現在在庫数を  現在在庫数: [総在庫数]-[現在出荷数]  のように表示させました。 各テーブルについては サービスマスター:ID、サービス名、価格 顧客マスター:ID、氏名、住所、電話番号 注文マスター:注文ID、顧客ID、サービス名、注文日、納品日 商品注文マスター:商品注文ID、顧客ID、商品名、注文日、納品日 商品マスター;商品ID,商品名、価格 となっています。 この後は、予約をするとその場で在庫が減る・在庫はマイナスにならないようにしたいのですが どのように行うべきでしょうか。 予約は1度に1件までで、エラーはなしとします。 検索をしたり参考書を参照したところ、VBAを使用するとのことですが、まったくもって知識がないです。ほかの方法かわかりやすい解説のほうをよろしくお願いします。

  • VBAでデータ更新作業自動化

    エクセルで、シート1に顧客データ(会員番号、氏名、住所等)が有り、シート2の入力セルに会員番号を入力すると、シート1の顧客データがVLOOKUP関数により呼び出されるというエクセルファイルがあります。シート1の顧客データは、別システムでデータ更新しており、USBメモリにCSVファイルとして定期的に抽出しています。このCSVファイルのシート1の最新顧客データを元のエクセルファイルのシート1にすべてコピー&ペーストすることで最新の顧客データを更新しています。 このたび、その作業の自動化を図るにあたり、元のエクセルファイルのシート2で作成したボタンを押下することにより、自動実行したいのです。 お忙しいところ大変申し訳ないですが、そのような他ファイルに及ぶVBAの記述を教えていただけたらありがたいです。よろしくお願いします。

  • EXCELデータの棚卸し

    EXCELデータに ひとつのシートにマスターデータ(6000件程度) 複数(15枚)のシートにトランザクションデータ(60000件程度)があります。 このトランザクションデータの中にマスターのコードがあるのですが、トランザクションの中にヒットしなかった、マスターデータないのコード(行)のレコードを削除候補データとしてピックアップしたいのです。 例えば (担当マスターシート)6000レコード(1シート) 担当コード 名称 属性 (トランザクションデータ)15シート×60000レコード 使用日付 商品 担当コード あり、トランザクションデータに使われていない、担当マスターシート上の担当コードをピックアップし、棚卸対象リストを 作成したいのです。 EXCELの関数を使って行うべきでしょうか? 今後も行う事が考えられるので、ACCESSを用いるべきでしょうか? ぜひ、皆様が考える最善の対応方法をご教示頂けるとありがたいです。 宜しくお願い致します。