• 締切済み

VBA比較処理の仕方

x0000xの回答

  • x0000x
  • ベストアンサー率52% (67/127)
回答No.2

>表1.2に共通するのは… 表=テーブルであれば、以下のSQLをクエリとして実行すればOKです。 クエリで「新規作成」新しいクエリダイアログを表示。 「デザインビュー」選択。 「閉じるボタン」選択。 テーブル表示ペインでマウス右ボタンクリックし、メニューから「SQLビュー」を選択。 以下のそれぞれを貼り付けます。 貼り付けた後、名前を付けて保存し、クエリを実行します。 更新クエリでは、更新前の確認メッセージも表されます。 ■一致するもの select 表1.商品no,表1.金額,表2.金額 from 表1 INNER JOIN 表2 on 表1.商品no = 表2.商品no ■一致するもの(表1.金額 < 表2.金額) select 表1.商品no,表1.金額,表2.金額 from 表1 INNER JOIN 表2 on 表1.商品no = 表2.商品no where 表1.金額 < 表2.金額 ■一致するもの(表1.金額 < 表2.金額 で 表1.金額を表2.金額で更新) update 表1 INNER JOIN 表2 on 表1.商品no = 表2.商品no set 表1.金額 = 表2.金額 where 表1.金額 < 表2.金額 ■不一致のもの(表1あり、表2なし) select 商品no,金額 from 表1 where not exists (select * from 表2 Where 表2.商品no = 表1.商品no) ■不一致のもの(表2あり、表1なし) select 商品no,金額 from 表2 where not exists (select * from 表1 Where 表2.商品no = 表1.商品no) VBAで処理する必要があるなら、 以下のクエリで抽出した結果をlistboxなどのデータソースとしてプロパティ設定することで表示できます。 また、更新処理は以下の様に「更新ボタン」押下後の処理として記述します。 Private Sub btnUpdate_Click() If MsgBox("更新しますか?", vbYesNo) <> vbYes Then Exit Sub Dim qdf As QueryDef Dim cnt As Long Dim strSql As String strSql = "" strSql = strSql & "update 表1 INNER JOIN 表2 on 表1.商品no = 表2.商品no " strSql = strSql & "Set 表1.金額 = 表2.金額" strSql = strSql & "where 表1.金額 < 表2.金額" Set qdf = CurrentDb.CreateQueryDef("", strSql) qdf.Execute dbFailOnError cnt = qdf.RecordsAffected qdf.Close Set qdf = Nothing MsgBox cnt & "件更新しました。" End Sub

sos0619
質問者

お礼

とてもわかりやすく教えて頂きありがとう御座います。実施してみたいと思います。 又、もう一点お伺いしたいのですが、どこが更新されたか一覧にだして、色をつけたいのですが、いい方法はないでしょうか? 色々とご質問してしまい大変申し訳御座いません。

関連するQ&A

  • VBAで別のシートへリンクをはりたい

    エクセルでシートの一枚目にある一覧表から、1行ごとに新規シートを作成し、内容をコピーするマクロを作りました。 一覧表のA欄にはNoを振りそのNo名でシート名を作成しています。 一覧表からシートを作成している途中でも、シートを全て作成した後でもいいので、一覧表のNo欄をクリックすると、そのシートへ飛べるようにリンクをはりたいのですが、どうすればよいでしょうか。 教えて下さい。 よろしくお願いします。

  • 比較表

    Excelで専用帳票とコピー用紙の金額の比較一覧表を 作成したいです。。 見易い表にしたいのですが、どんな感じに作ったら良いか思いつきません。 そういう表の作り方のったホームページとか知ってら教えてください。

  • ACCESS VBA

    ACCESS2000を使用しています。 行いたい処理があるのですが方法がわかりません。 方法を知ってる方がいればアドバイスの程よろしくお願い致します。(VBAでも全然OKです) リストボックスのリレーション 例えば左側のリストボックスで4種類の選択肢のいずれかを選び、それに応じたテーブル内容を右側のリストボックスに表示する方法 (右側に表示させたいテーブル4種類は既に作成しています) ↓行いたい処理  季節の商品一覧から「夏の商品一覧」を選んだ場合 左リストボックス  右リストボックス ------------ -------- |春の商品一覧 | |Tシャツ| |夏の商品一覧 | |短パン | |秋の商品一覧 | |~~~ | |冬の商品一覧 | |~~~ | ------------

  • 【関数とVBA】教えてください。

    EXCELの関数またはVBAについて教えてください。 【2月 受注明細一覧表】 番号 受注日   受注先    商品名  見積金額  請求金額 1  2/1 (株)○○○○  △△△△ ¥10,000-  ¥12,000- 2  2/3 (株)□□□□  ▲▲▲▲ ¥25,000-   3 4 ・ ・ ・ 私は、デザイン会社で経理をしています。 上記の様な受注明細一覧表を作成したのです。 月次で担当デザイナーから経理に報告してもらうのですが、 月をまたがる業務の場合、3月の一覧表にも記入しなければなりません。受注は2月でも作業終了が3月で、請求金額が 決定するのも3月という場合です。 1月/2月/3月/・・・とシートを分けています。 2月の一覧表から、請求金額が未記入の受注分のみを3月に反映させることが自動でできますでしょうか。 関数かVBAを使用するってことはわかるのですが、どうしていいのかわかりません。 回答お願い致します。

  • アクセエスのレコードの更新をVBAでするには?

    アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。 それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。 元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか? よろしくお願いします。

  • VBAの質問です。

    エクセルVBAの質問です。商品と価格をCSVでデータを取り込んで別の表に商品一覧に価格の合計をSAMIFの常駐で出しているのですが商品項目が増えた場合に表に自動で追加できるようにしたいのですが、どのようなコードを書けばいいんでしょうか?是非教えていただけないでしょうか?

  • VBAでaccessのデータと比較…

    エクセルVBAについてです。 正・誤の2列のみで構成されるエクセルの正誤表があります。フォームのボタン押下のイベントでこの正誤表の「誤」の列すべての値と、10項目程度からなるaccessのデータの正誤表の項目に該当する列の値を比較(検索)して、相違が見つかった場合に、accessデータの該当行をすべてCSV形式で出力するツールを作りたいです。 アタマが混乱中なので質問が分かりにくいと思いますが御力添え願えたら幸いです。

  • accessで画面で更新した内容を全て元に戻す方法

    access初心者です(access2003使用)。 フォームのレコードソースにクエリを指定して詳細部分に条件に一致するレコード内容を一覧形式で表示しています。 一覧ではある項目だけ修正可能としており、フォームの仕様として全てを更新するか全てを更新しないかの二択です。 全てを更新するに関しては修正項目で入力すると自動的(?)にテーブルが更新されており、ある意味何も考慮不要に見えますが、全てを更新しないに関してはどのように行ったらよいか分かっていません。 (イメージとしてフォーム開いたときにトランザクション開始し、フォーム閉じるときにコミット又はロールバックするです。) アドバイスよろしくお願いします。

  • Access VBA 処理 落ち 不具合

    AccessVBAの処理落ちで困っています。 開発環境は Office 2003 Access OSはWindowsServer2003 Standard Edition(VM Ware上で稼働)、データベースは別に用意したAccess2003MDBファイルです。 処理概要は データベース上の業務データが登録されているテーブル(以後テーブル1と呼ぶ)のデータ(主キー)を元にデータベース上の商品単価が登録されているマスタテーブル(以後マスタ1と呼ぶ)のデータを抽出し、テーブル1に金額をセットするものです。 業務データは月毎に約4000件存在します。 金額のセット処理はレコードセットを用い、テーブル1の該当する月のデータ件数分繰り返し行います。 テーブル1の金額フィールドにテーブル1のデータを主キーとして用い、マスタ1の該当する金額を抽出し、セットしなければならないのですが、金額が正しく登録されている物と全く違う金額が登録されている状態が発生しています。 テストデータは 例:2009年4月分のデータのみ(テーブル1、マスタ1共に) という状態でテストしています。 作成したソースコードをチェックしてみましたがロジック上は 何処にも異常は見当たりません。 ループの中でソースコードの命令外の処理が行われているようにしか思えません。 説明が分かり辛ければ申し訳ありません、ご指摘頂ければ補足します。 どなたかこの現象についてご存じの方はご教授願えませんでしょうか? どうか宜しくお願い致します。

  • ExcelのVBAで。

    BOOK1とBOOK2にそれぞれ表があります。 例としてBOOK1には No | 商品名 | 値段 | 品番 1  | みかん |  80 | 11111 2  | りんご |  100 | 22222 とあり、 「No」と「枚数」を入力してボタンを押すと、 BOOK2に情報を反映させるといった形です。 BOOK2の方の表は、BOOK1と同じですが、全部で表が3枚あり、 それぞれに反映させたあと、印刷させます。 「枚数」が1枚ならそのまま反映させればいいのですが、 2枚以上になると、品番の最後にアルファベットをつけなくてはならないのです。 例えば、「No=1」「枚数=3」とした場合には、 1 | みかん | 80 | 11111A というものを反映させ印刷させたあと、 1 | みかん | 80 | 11111B とし、さらに印刷をし、また 1 | みかん | 80 | 11111C として印刷をして完了です。 これをどのようにしてやっていいのかまったくわかりません。 Accessのコードなら触ったことがあるのですが、Excelは今回が ほとんどはじめてといっていいです。 マクロも自動で組むことができるくらいです。 ぜひお願いします。 # わからないことがあったら補足しますので、要求お願いします。