• 締切済み

Excel Access操作

お邪魔します。 Excelデータを使ってAccessで外部結合してExcelに戻すような ことはマクロでできるのでしょうか。 データは同じブックにあります。

みんなの回答

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

No16のDAOでのプログラムをADOに変換したのですが、 掲示する前に大きな疑問があるのでそれを先に 述べておきます。 補足をよみかえしてみましたが、どうにも腑に落ちないのが No18の補足で、 現在は、下記が参照されております。 Visual Basic For Application Microsoft Excel 16.0 Object Library OLE Automation Microsoft Offuce 16.0 Object Library Microsoft Offuce 16.0 Access databese engine Object Library とありましたが、本来Access2016で初期設定では Visual Basic For Applications Microsoft Access 16.0 Object Library OLE Automation Microsoft Office 16.0 Access database engine Object Library となっていて、Accessで初期設定にあるはずの Microsoft Access 16.0 Object Library ではなく、 Microsoft Excel 16.0 Object Library があるように補足されていたことです。 このことから、ひょっとして今までのプログラムはAccess の標準モジュールではなく、Excelの標準モジュールに 貼り付け実行していたのではないですか。そうすると 今までのエラーの起こり方に納得ができるのです。 テーブルを設定したAccessの標準モジュールに貼り付け、 実行すべきプログラムをExcelで実行しても何の 意味もないのです。 すでに4週になろうとしているのでこの質問も自動的に 閉じられると思いますが、以上についての疑問に答えて もらえばADOに変換したプログラムを掲示しますが、 そうでなければ何の意味もないので取り止めます。

nnihon
質問者

補足

>ひょっとして今までのプログラムはAccessの標準モジュールではなく、Excelの標準モジュールに >貼り付け実行していたのではないですか。 Excelに張り付けておりました。 大変申し訳ございません、piroin654さん以外の方とExcelで行う流れになっておりましたので てっきりExcelなのだと勘違いしておりました。 以前教えて頂いた下記サイトにてExcelVBAでAccessへの接続は可能となりました。 >なぜエクセルとAccessデータベースを連携するのが良いのか、またその際の注意点 https://tonari-it.com/excel-vba-access-sql-select/ ただ私の知識が低いのでサイトと同じようにAccessにテーブルがあることが前提でしか コードを作成できません。 せっかく接続できたのとAccessが入ってるPCとAccessが入っていないPC両方で作業する こととなったのでExcelVBAにてExcelデータをAccessに接続してSQL、結果をExcelに コピーすることができればと思います。 (事務所のPCはAccess有なのですが現場のPCはAccessが有にしてもらえなかったです。 なのでAccessが無PCでも作業が可能になればと考えております。) 今はExcelVBAにてExcelデータをAccessに接続する方法が分からず苦戦しております。 こちらの事情で申し訳ございません。 私の説明不足と知識の低さによりご迷惑をおかけしておりましたら申し訳ございません。 もし可能でしたらご教授いただければ幸いです。 よろしくお願いいたします。

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

Set db = CurrentDb を set db = currentdb と小文字で入力し、 マウスのカーソルを別行で クリックすると、 Set db = CurrentDb のようにcurrentdb が CurrentDb のように 変更されますか。 もし、変更されるならばその時点でCurrentDbメソッドが 認識されて、エラーが出なくなり、コードを 実行することができるはずなのですが。 これで認識されなければ、DAOが機能していないからか、 あるいは同じaccdbのファイルになんらかの阻害要因が 存在するかです。 たとえば、 Sub test() MsgBox "おはようございます" End Sub のような簡単なメッセージの表示さえもできないと いうのであれば、これは論外になりますけど。 DAOはADOよりもレコードの検索、編集が柔軟で 簡易に行えることが特徴で、ADOにはない機能もいくつか あります。とても便利なのですが。 DAOがだめならばADOでということになるのですが、 ロジックの転換をしてみますかね。

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

(1) オブジェクトが必要、というのが気になりますが。 コード表を表示し、メニューのデバッグからコンパイル を実行してみてください。コンパイルが通るのか、 あるいは何かエラーが表示されるのか確認してみて ください。 (2) 試しに、 Dim db As DAO.Database のところで、 Dim db As DAO.Database をこの行の下をあけて同様に打ち込んでみてください。 そのときに As を打ち込んだ時に選択候補が表示 されますがその中に DAO が候補の中に存在しますか。 あるいは  Dim db As DAO まで打ち込んで、ドットを打ち込むと同様に選択候補が 表示されると思いますが、その中に Database が 候補の中に存在しますか。 もし、これらが表示されないとなると参照設定が うまくいっていないとということになります。 (3) 確認のために以下をExcelの標準モジュールに貼り付け、 参照設定で、 Microsoft Offuce 16.0 Access databese engine Object Library にチェックを入れて実行してみてください。OKが表示されるかエラー が出るか確認してみてください。 strPathはaccdbへのファイルパスです。No19と同じです。 Sub test100() Dim strPath As String Dim db As DAO.Database On Error GoTo ERH 'accdbへのパス' strPath = "C:\Users\HogeHoge\Desktop\\OKWeb2\sample.accdb" Set db = OpenDatabase(strPath) MsgBox "OK" ERH: MsgBox Err.Description ERHE: If Not db Is Nothing Then db.Close Set db = Nothing End Sub

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

参照設定の追加 Microsoft Access 16.0 Object Library オプションの確認 Accessのメニューのツールからオプションを選択し、 「詳細」のなかの「既定の開くモード」で「共有モード」 を選択し「既定のレコードロック」で「ロックしない」 になっているか確認し、なっていなければそのように 設定してください。 そのうえで、No19を Set db = CurrentDb も含めて実行してみてください。 ところで、これはAccessで実行しているのですよね。

nnihon
質問者

補足

度々ご迷惑をおかけしております。 >「既定の開くモード」で「共有モード」を選択し「既定のレコードロック」で「ロックしない」になっているか確認。 なっておりました。 >Set db = CurrentDb エラー:実行時エラー424 オブジェクトが必要です。 黄色の箇所:Set db = CurrentDb となりました。

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

以下を試してみてください。 (1) Set db = CurrentDb のところをOpenDatabaseを使って Set db = OpenDatabase("C:\Users\HogeHoge\Desktop\\OKWeb\sample.accdb") のように現在のファイルのパスを入れて試してみてください。 (2) Set db = CurrentDb を Set db = CurrentDb() としたらどうなりますか。 (3) Set db = CurrentDb を Set db = Application.CurrentDb() としたらどうなりますか。

nnihon
質問者

補足

修正を実行したら下記のようになりました。 (1)Set db = OpenDatabase("C:\Users\HogeHoge\Desktop\\OKWeb\sample.accdb") こちらは、受注売上比較一覧ので大丈夫でしょうか? エラー:実行時エラー3051 ファイルを開くか書き込むことができませんでした。     他のユーザーが排他的に開いているか、データの表示と書き込む権限がありません。 黄色の箇所:Set db = OpenDatabase("C:\Users\****\Documents\?A?g\?V?????t?H???_?[") (2)Set db = CurrentDb() エラー:subまたはFunctionが定義されておりません。 黄色の箇所:Sub cmdMain() (3)Set db = Application.CurrentDb() エラー:実行時エラー438 オブジェクトはプロパティまたはメソッドをサポートしていません。 黄色の箇所:Set db = Application.CurrentDb()

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

参照不可の項目というのは、 参照不可 対象ライブラリ というような感じで参照設定に表記してあります。 現在参照設定されている項目は、コード表の メニューのツールから参照設定で確認できます。 以下のホームページに参照設定で参照している 項目が画像として一番下のほうにあります。 https://www.feedsoft.net/access/guide-vba/guide22.html 確認してみてください。 64Bitの対応についてはコードの変更などで対応 できるか確認してみます。

nnihon
質問者

補足

VBAの参照設定だったのですね。 勘違いしておりました。 現在は、下記が参照されております。 Visual Basic For Application Microsoft Excel 16.0 Object Library OLE Automation Microsoft Offuce 16.0 Object Library Microsoft Offuce 16.0 Access databese engine Object Library

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

>エラー424 >Microsoft Office 16.0 Access database engine Object Libraryにチェック Microsoft Office 16.0 Access database engine Object Libraryにチェックを入れて Micosoft DAO 3.6 object libraryのチェックははずして、コードを実行すると どうなりますか。 DAOは3.6以外にありますか? 念のために、 OSのバージョンと32Bit版なのか64Bit版なのか 例 Windows10 Pro 64Bit インストールされているAccessのバージョンと32Bit版なのか64Bit版なのか 例 Access2016 64Bit 作成したAccessのファイルの拡張子はMDBなのかACCDB 参照不可になっている項目はないか 現在参照設定されている項目 を教えてください

nnihon
質問者

補足

ご質問の件ですが下記のとおりです。 不足事項等がありましたらご連絡下さい。 >Microsoft Office 16.0 Access database engine Object Libraryにチェックを入れて >Micosoft DAO 3.6 object libraryのチェックははずして、コードを実行するとどうなりますか。 実行エラー424でコードのSet db = CurrentDbが黄色くなります。 >DAOは3.6以外にありますか? ありません。 >OSのバージョンと32Bit版なのか64Bit版なのか Windows10 Pro 64Bitです。 >Accessのバージョンと32Bit版なのか64Bit版なのか Access for office 365 MSO 64Bitです。 >Accessのファイルの拡張子はMDBなのかACCDB ACCDBです。 >参照不可になっている項目はないか現在参照設定されている項目 こちら私の知識不足で質問が理解できておりません。 Accessで参照不可になっているか現在参照設定されている項目があるのかということでしょうか。 どのようにしたら分かるものなのでしょうか。 申し訳ございません教えて頂けないでしょうか。 お手数をおかけしますがよろしくお願いいたします。

  • 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に チェック入れました。 ご指導いただけないでしょうか。 よろしくお願いします。

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

テーブルの設定 受注一覧、売上一覧にデータを設定しておきます。 売上一覧の各支店名は金額のフィールドですが、 Excelから都度インポートするので本来はフィールド数、 フィールド名は不定です。    受注一覧 ID    オートナンバー 日付   日付/時刻型 商品名  テキスト型 数量   数値型 金額   数値型 支店名  テキスト型    売上一覧 ID     オートナンバー 日付    日付/時刻型 コード   テキスト型 商品名   テキスト型 A支店    数値型 B支店    数値型 C支店    数値型 D支店    数値型 合計    数値型   受注売上比較一覧 ID      オートナンバー 商品名(A)   テキスト型 金額(A)    数値型 結果      テキスト型 商品名(B)   テキスト型 金額(B)    数値型 支店名(B)   テキスト型 以下を標準モジュールに貼り付け実行してみてください。 なお、DAOを使用していますので、コード表のツールから 参照設定を選択し、    Microsoft DAOxx Object Library にチェックが入っているか確認してみてください。 xxは3.6のような数値です。Accessが64bit版で なければ Microsoft DAO3.6 Object Library のチェックを確認してください。 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 受注一覧.支店名;"   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   rs3.MoveFirst   Do Until rs3.EOF     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         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       End If     Next j     n = n + 1     If m = n Then       Exit Do     End If   rs3.MoveNext   Loop   '不一致データの検索   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   rs4.MoveNext   Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing rs3.Close: Set rs3 = Nothing rs4.Close: Set rs4 = Nothing End Sub 一応、動作は確認していますが、 分からないことがあれば補足してください。

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

遅くなりました。 補足では、 (受注一覧) 日付 商品名 数量 金額 (売上一覧) 日付 コード 商品名 A支店 B支店・・・・・合計 のようになっていますが、これを見たとき受注一覧の商品名の 並びの順序は支店ごとそれぞれ順序があると思いますが、 売上一覧の商品名の順序は支店毎の並びとは明らかに違い、 売上一覧の作成がどのような手順で行われたのか、また データ作成時に既存のデータベースの並びに統一された 並びになっているのでは、と思案することとなります。 したがって私が >なお、各表のIDというフィールドはオートナンバーで便宜上つけたもので >必要性のあるものではありません。 と述べたのはこういう商品名の並びに関して受注一覧と 売上一覧の商品名の並びがリンクしているとは言い難いと 思われるためです。受注一覧、売上一覧が記載された 商品名が異なっていても一定の規則の下に記載されて いるならば、非常に有意義だと思われます。 【売上一覧表】       【受注一覧表】 商品名 分類 A支店     商品名   分類 金額 みかん  1  200     マンダリン  1  100  ←(2)の例                みかん   1  100  ←(2)の例 たい   2  100     たい     2  100  ←(1)の例 たい   3  100     たい     3  100  ←(1)の例 の中で、 たい   2  100     たい     2  200  ←(1)の例 たい   2  200     たい     2  100  ←(1)の例 という分類と並びだったら、どのように判断しますか。今のところ プログラムの中では金額の違いは考慮に入れていませんが。という のも受注時と売上時では金額の違いはあるかもしれないと思われる からです。これは単にこちらの推測ですが。したがってこのような 場合、現状では受注売上比較一覧には ID   商品名(A) 金額(A) 結果  商品名(B)  金額(B)  支店名(B) 3   たい   100       たい     200   A支店 4   たい   200       たい     100   A支店 となってもおかしくなく、実際にプログラム上は受注一覧、売上一覧 のデータがリンクしていないのでこのような出力になります。これは どのようなソフト使っても同じことです。 つまり、各データ例えば 【売上一覧表】       【受注一覧表】 商品名 分類 A支店     商品名   分類 金額 たい   2  100     たい     2  100  ←(1)の例 たい   3  100     たい     3  100  ←(1)の例 で、売上一覧の たい   2  100 が、受注一覧表の たい     2  100  ←(1)の例 に対応した売上データとはどこにも保証がないからです。ましてや データが隣り合っていたり近くにあれば違いに気がつきますが、 多くのデータの中で離れていると見逃してしまうこともあります。 金額の違いも不一致の条件に入れるのかは別にして、このところ をどのようにするかは考えておいてください。 いろいろ述べましたが、何はともあれプログラムを整理して テーブルの設定等も含めて別スレに貼り付けます。 また、いただいた補足の中の >表記についても支店ごとに異なります。 >実際と同じものもあれば全然異なるものもあります。 についてもいろいろありますが、これは後からでも。 なお、 >Accessデータを加工してExcelにコピーする >ことはできたのですがExcelのデータを >Access新規データベースにて加工する方法が >分からず行き詰っておりました。 は、ExcelのデータをAccessにエクスポートする ということなのですかね。 これについても、後ほどということで。

nnihon
質問者

補足

説明が上手くできずにご迷惑をおかけしております。 色々と考慮していただき感謝申し上げます。 もしかしたら一般的な会社のデータと少し違うのかもしれません。 >商品名の並びに関して受注一覧と売上一覧の商品名の並びがリンクしているとは言い難いと >思われるためです。 上からの順番はリンクしております。 但し、A支店にはあってB支店にはない商品等がありますので、そういう意味ではリンクしておりません。 ですので何行目に必ず同じ商品名があるわけではありませんが売上一覧を支店ごとにソートで空白を 表示させないようにすれば何行目かもリンクしております。 >たい   2  100     たい     2  200  ←(1)の例 >たい   2  200     たい     2  100  ←(1)の例 >という分類と並びだったら、どのように判断しますか。 不一致と判断します。 金額の違いも考慮します。 なぜかと言うと、おっしゃるとおりに受注時と売上時に金額が違う場合もありますが、 一致していることを確認している受注一覧の金額欄は変更後の金額欄であるからです。 (金額欄には変更前と変更後があり。) ですので、この確認作業は入力ミスや受注漏れ等の発見を目的としております。 結果が商品名と金額が違う場合、特別な事象がなければ入力ミスや発注漏れとなります。 特別な事象はごくまれですし、システムデータだけでは分からないのでプログラム外での 確認を考えております。 >3   たい   100       たい     200   A支店 >4   たい   200       たい     100   A支店 >となってもおかしくなく、実際にプログラム上は受注一覧、売上一覧 >のデータがリンクしていないのでこのような出力になります。 こちら分類が同じ場合は、商品名と金額は必ずリンクするのでこちらは金額の 不一致で要確認対象となります。 >売上一覧の >たい   2  100 >が、受注一覧表の >たい     2  100  ←(1)の例 >に対応した売上データとはどこにも保証がないからです。 保障はあります。 照合する項目以外の欄に確認できるものがあります。 ですので重複と不一致だけを別に抽出し目視で確認し、それぞれ一致するものどおしを分類で 繋げる作業は可能です。(現状でも行っております。) 例え金額が異なっていても対応するものは判別つきます。 ただプログラム内には決まったルールで記載されていないため、プログラムに入れることは 難しいと思います。 >ExcelのデータをAccessにエクスポートするということなのですかね。 ExcelのVBAでAccessのデータをSQLで照合しExcelに結果をコピーすることまではできました。 Excelの基データ(売上一覧と受注一覧)をVBAを使ってAccess上で照合しExcelに結果をコピー することが目標なのですが、Excelの基データをVBAでAccessへとい部分でどのようにしたら よいのか行き詰っておりました。 長くなってしまいましたが、ご提示いただいたコードで試してみようと思います。 時間がかかるかもしれませんがまたご報告させていただきます。 ご迷惑でなければまたご指導いただけないでしょうか。 よろしくお願いいたします。

関連する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でアクセスでの検索条件を組み込みたいのです。

専門家に質問してみよう