• 締切済み

Excel Access操作

piroin654の回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.16

コードの修正です。 受注一覧の支店名の並びの確定のためのSQL文の変更と、 受注売上比較一覧での受注一覧にデータが無いときに 売上一覧にデータが存在する場合の支店名の並びの 修正、および金額の不一致の場合の追加などのコードの変更を しましたので、一部修正ではなく、修正したものも含めて No15のコードを以下に差し替えてください。 Sub cmdMain()   Dim db As DAO.Database   Dim rs1 As DAO.Recordset   Dim rs2 As DAO.Recordset   Dim rs3 As DAO.Recordset   Dim rs4 As DAO.Recordset   Dim strSQL As String   Dim i As Long   Dim j As Long   Dim m As Long   Dim n As Long   Dim k As Long   'strSQLは支店名一覧の取得用   strSQL = "SELECT 受注一覧.支店名 FROM 受注一覧 GROUP BY 受注一覧.支店名 ORDER BY First(受注一覧.ID);"   Set db = CurrentDb   Set rs1 = db.OpenRecordset(strSQL, dbOpenDynaset)   Set rs2 = db.OpenRecordset("受注一覧")   Set rs3 = db.OpenRecordset("売上一覧")   Set rs4 = db.OpenRecordset("受注売上比較一覧", dbOpenDynaset)   '受注一覧のデータを受注売上比較一覧へ   If rs1.RecordCount > 0 Then     rs1.MoveFirst     Do Until rs1.EOF       rs2.MoveFirst       Do Until rs2.EOF         If rs1!支店名 = rs2!支店名 Then           rs3.MoveFirst           Do Until rs3.EOF             rs4.AddNew               rs4![商品名(A)] = rs2!商品名               rs4![金額(A)] = rs2!金額               For i = 0 To rs3.Fields.Count - 1                 If rs2!支店名 = rs3.Fields(i).Name Then                   '前もって支店名を売り上げ側の支店名のフィールドに入力                   rs4![支店名(B)] = rs3.Fields(i).Name                 End If               Next i               rs4![商品名(B)] = rs2!商品名             rs4.Update             Exit Do           rs3.MoveNext           Loop         End If       rs2.MoveNext       Loop     rs1.MoveNext     Loop   End If   '売上一覧のデータを受注売上比較一覧へ   If rs3.EOF Then     Exit Sub   Else     rs3.MoveLast: rs3.MoveFirst     m = rs3.RecordCount   End If   n = 0   For j = 0 To rs3.Fields.Count - 1     If rs3.Fields(j).Name <> "ID" And rs3.Fields(j).Name <> "日付" And rs3.Fields(j).Name <> "コード" And rs3.Fields(j).Name <> "商品名" And rs3.Fields(j).Name <> "合計" Then       If rs3.Fields(j).Name <> "ID" And rs3.Fields(j).Name <> "日付" And rs3.Fields(j).Name <> "コード" And rs3.Fields(j).Name <> "商品名" And rs3.Fields(j).Name <> "合計" Then         rs3.MoveFirst         Do Until rs3.EOF           rs4.FindFirst "[商品名(B)]='" & rs3!商品名 & "' And [支店名(B)]='" & rs3.Fields(j).Name & "' And IsNull([金額(B)])"           If Not rs4.NoMatch Then             Do Until rs4.NoMatch               If rs4![支店名(B)] = rs3.Fields(j).Name Then                 rs4.Edit                   rs4![金額(B)] = rs3.Fields(j).Value                 rs4.Update               End If             rs4.FindNext "[商品名(B)]='" & rs3!商品名 & "' And [支店名(B)]='" & rs3.Fields(j).Name & "' And IsNull([金額(B)])"               Exit Do             Loop           Else             If Not rs3.Fields(j).Value = 0 And Not IsNull(rs3.Fields(j).Value) Then               rs4.AddNew                 rs4![商品名(B)] = rs3!商品名                 rs4![金額(B)] = rs3.Fields(j).Value                 rs4![支店名(B)] = rs3.Fields(j).Name               rs4.Update             End If           End If           n = n + 1           If m = n Then             Exit Do           End If         rs3.MoveNext         Loop       End If     End If   Next j   '不一致データの検索   rs4.MoveFirst   Do Until rs4.EOF     For k = 0 To rs4.Fields.Count - 1       If (rs4.Fields(k).Value = 0 Or IsNull(rs4.Fields(k).Value)) And (Not rs4.Fields(k).Name = "ID" And Not rs4.Fields(k).Name = "結果") Then         rs4.Edit           rs4!結果 = "不一致"         rs4.Update       End If     Next k     If (Not rs4![金額(A)] = 0 Or Not IsNull(rs4![金額(A)])) And (Not rs4![金額(B)] = 0 Or Not IsNull(rs4![金額(B)])) Then       If rs4![金額(A)] <> rs4![金額(B)] Then         rs4.Edit           rs4!結果 = "不一致"         rs4.Update       End If     End If   rs4.MoveNext   Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing rs3.Close: Set rs3 = Nothing rs4.Close: Set rs4 = Nothing   MsgBox "売上一覧の移動および受注売上比較一覧の作成終了" End Sub

nnihon
質問者

補足

No.11でご提示いただいた受注一覧と売上一覧を作成して実行してみたのですが 下記のコードでエラーが出ます。 エラー424です。 Variant 型にしたほうがよろしいのでしょうか。 >Set db = CurrentDb Micosoft DAO 3.6 object libraryはチェックすると「DLL読込時のエラーです」と なりましたのでMicrosoft Office 16.0 Access databese engine Object Libraryに チェック入れました。 ご指導いただけないでしょうか。 よろしくお願いします。

関連するQ&A

  • Access終了後にExcelを立ち上げたい

     今度引継ぎする仕事の内容で、Accessでデータを打ち込んだ後、Excelのブックにマクロが書かれている(第三者が書いたもの)を立ち上げてマクロを走らせ、もう1つのブックを立ち上げてそちらのマクロを走らせているようです。  こんな面倒なことをしなくても、Access終了時に、Excelを立ち上げマクロを走らせて、それが終わったらもう1つのブックを立ち上げてそちらのマクロを走らせるというようにしたいと思います。ただし、必ずしも、マクロを走らせるのではなく、マクロを走らせない選択肢も残しておきたいと思います。  Excelのマクロについては、少しかじっていますが、Accessについては、全くわからない状態です。どうか教えてください。  1つ問題があるのですが、このマクロは共用するため、personalではなく、各々のファイルに記載したいのですが、こんな面倒なことは可能でしょうか?

  • ACCESSからエクセルを操作する方法

    宜しくお願いします。 (1)ACCESSのフォームをクリックして、抽出されたデータをエクセルに出力(マクロでやってます) (2)抽出されたデータを、エクセル上で、セル幅や項目変更等を、手動にて行っています。 この、(2)の処理を、エクセルのマクロを用いて行いたいのですが、ACCESSからエクセルのマクロ 操作は可能なのでしょうか? ご存知の方がいらっしゃいましたら、宜しくお願い致します。

  • VBA ACCESSからexcel操作

    仕事でアクセスから二つのファイルを操作したいです。 アクセスのテーブルから新規excel(BOOK1)にデータを抽出し、 そのデータを既存のデータが入っているexcel(BOOK2)にコピーしたいです。 どうしてもコピーメソッドのRANGEクラスのところで「アプリケーションの定義エラー」 なってしまいます。 BOOK1のデータをBOOK2の新規シートにコピー、BOOK1とBOOK2のデータ行を 数える、のは試しやってできたので、 二つのファイル操作は出来ていて、RANGEクラスのところで既存シートにコピーする部分が 出来ていないんだと思います。 基本操作だと思いますが困っています。よろしくお願いします。

  • AccessからExcelを操作

    WindowsXP、Access2002、Excel2002を使用しています。 AccessのVBAを記述して、Excelのブック「A」のシート「B」を、ブック「C」にコピーできますか? ブック「A」も「C」もすでに作成されたファイルです。よろしくお願いします。

  • Exce97でAccess97のデータを取り込む

    ExcelにAccessのテーブルのデータを取り込むマクロ作りたいのですが、Accessのデータを取り込むところから躓いています。2000などだと外部データの取り込みでできるのですが97だとありません。マクロで一発で取り込みをしたいのですが無理なんでしょうか?

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

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

  • 「excelがaccessを占有している」

    「excelがaccessを占有している」 accessのデータをexcelからマクロで呼び出すファイルがあります。 このファイルが開いており、かつ一度でもこのマクロを実行すると、 accessが読み取り専用になってしまいます。 excelを閉じれば、またaccessが使えるようになります。 excelのファイルを開いた状態で、accessが読み取り専用に ならない手段が知りたいです。 よろしくお願いします。

  • エクセルのマクロからアクセスのマクロ実行命令を出せますか?

    教えてください。 一連の作業をアクセスのマクロとエクセルのマクロを使って作業を完成させました。 まず最初にエクセルのブックを起動し、マクロを実行し作業をさせ、その後にアクセスを起動させ、マクロを実行し、作業ファイルをエキスポートさせ、またエクセルに戻り、エクセルマクロを実行させて作業を関せさせたいと思います。 そこで、エクセルのマクロでアクセスを起動させ、アクセスのマクロを実行させるようなことはできるのでしょうか? よろしくお願いします。

  • エクセルからアクセス

    アクセス2000ですが、エクセルのデータをインポート しようと「外部のデータの取り込み」→インポートをクリックして エクセルのデータを指定したのですが、 「ファイルの形式が違います」と出ました。 どういう形式にしたらよいでしょうか?

  • エクセルからアクセスDBを操作する

    エクセルVBAでアクセスのDBへ接続しそこから選択項目をエクセル側に引っ張ろうとしています。 エクセルVBAの場合、マクロの記憶で分からない操作を記録して、そのままVBAに使う事が出来ますが、アクセスにも似たような機能はありますか? 普段アクセスではクエリで検索条件を指定していますが、このクエリの検索条件をエクセルのマクロの記憶みたいな形でコードとして出す事は出来ないでしょうか? エクセルVBAでアクセスでの検索条件を組み込みたいのです。