みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel Access操作

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

データは同じブックにあります。

投稿日時 - 2019-02-26 13:11:26

QNo.9591686

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(23)

ANo.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に変換したプログラムを掲示しますが、
そうでなければ何の意味もないので取り止めます。

投稿日時 - 2019-03-25 08:15:10

補足

>ひょっとして今までのプログラムは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に接続する方法が分からず苦戦しております。

こちらの事情で申し訳ございません。
私の説明不足と知識の低さによりご迷惑をおかけしておりましたら申し訳ございません。

もし可能でしたらご教授いただければ幸いです。
よろしくお願いいたします。

投稿日時 - 2019-03-25 13:47:48

ANo.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でということになるのですが、
ロジックの転換をしてみますかね。

投稿日時 - 2019-03-21 10:23:58

ANo.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

投稿日時 - 2019-03-20 19:37:58

ANo.20

参照設定の追加

Microsoft Access 16.0 Object Library



オプションの確認

Accessのメニューのツールからオプションを選択し、
「詳細」のなかの「既定の開くモード」で「共有モード」
を選択し「既定のレコードロック」で「ロックしない」
になっているか確認し、なっていなければそのように
設定してください。



そのうえで、No19を

Set db = CurrentDb

も含めて実行してみてください。



ところで、これはAccessで実行しているのですよね。

投稿日時 - 2019-03-20 15:21:26

補足

度々ご迷惑をおかけしております。

>「既定の開くモード」で「共有モード」を選択し「既定のレコードロック」で「ロックしない」になっているか確認。

なっておりました。

>Set db = CurrentDb

エラー:実行時エラー424 オブジェクトが必要です。
黄色の箇所:Set db = CurrentDb

となりました。

投稿日時 - 2019-03-20 16:07:27

ANo.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()

としたらどうなりますか。

投稿日時 - 2019-03-20 08:47:29

補足

修正を実行したら下記のようになりました。

(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()

投稿日時 - 2019-03-20 13:26:37

ANo.18

参照不可の項目というのは、

参照不可 対象ライブラリ

というような感じで参照設定に表記してあります。


現在参照設定されている項目は、コード表の
メニューのツールから参照設定で確認できます。
以下のホームページに参照設定で参照している
項目が画像として一番下のほうにあります。

https://www.feedsoft.net/access/guide-vba/guide22.html

確認してみてください。
64Bitの対応についてはコードの変更などで対応
できるか確認してみます。

投稿日時 - 2019-03-19 16:35:27

補足

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

投稿日時 - 2019-03-20 13:07:04

ANo.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

参照不可になっている項目はないか

現在参照設定されている項目


を教えてください

投稿日時 - 2019-03-19 09:33:37

補足

ご質問の件ですが下記のとおりです。
不足事項等がありましたらご連絡下さい。

>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で参照不可になっているか現在参照設定されている項目があるのかということでしょうか。
どのようにしたら分かるものなのでしょうか。
申し訳ございません教えて頂けないでしょうか。

お手数をおかけしますがよろしくお願いいたします。

投稿日時 - 2019-03-19 13:06:09

ANo.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

投稿日時 - 2019-03-17 11:01:28

補足

No.11でご提示いただいた受注一覧と売上一覧を作成して実行してみたのですが
下記のコードでエラーが出ます。
エラー424です。
Variant 型にしたほうがよろしいのでしょうか。

>Set db = CurrentDb

Micosoft DAO 3.6 object libraryはチェックすると「DLL読込時のエラーです」と
なりましたのでMicrosoft Office 16.0 Access databese engine Object Libraryに
チェック入れました。

ご指導いただけないでしょうか。
よろしくお願いします。

投稿日時 - 2019-03-18 16:18:15

ANo.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



一応、動作は確認していますが、
分からないことがあれば補足してください。

投稿日時 - 2019-03-15 09:35:47

ANo.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にエクスポートする
ということなのですかね。
これについても、後ほどということで。

投稿日時 - 2019-03-14 10:58:42

補足

説明が上手くできずにご迷惑をおかけしております。
色々と考慮していただき感謝申し上げます。
もしかしたら一般的な会社のデータと少し違うのかもしれません。

>商品名の並びに関して受注一覧と売上一覧の商品名の並びがリンクしているとは言い難いと
>思われるためです。

上からの順番はリンクしております。
但し、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へとい部分でどのようにしたら
よいのか行き詰っておりました。

長くなってしまいましたが、ご提示いただいたコードで試してみようと思います。
時間がかかるかもしれませんがまたご報告させていただきます。

ご迷惑でなければまたご指導いただけないでしょうか。
よろしくお願いいたします。

投稿日時 - 2019-03-15 20:40:35

ANo.13

すみません。No11の【受注売上比較一覧】の表のデータの中で、




14  マンデリン 900      マンデリン       C支店
14               みかん     500  D支店
15               いちご     600  E支店
16               バナナ    2300   E支店
17               たこ     1200   D支店
18               マンゴー   600   A支店
19               マンゴー   300   B支店


のところのIDがダブっていました。14が二つ並んでいます。数値を
一つずつずらして、

  【受注売上比較一覧】
ID   商品名(A) 金額(A) 結果  商品名(B)  金額(B)  支店名(B)
1   さば   100       さば     100   A支店
2   みかん  200       みかん    200   A支店
3   たい   300       たい     300   A支店
4   バナナ  400       バナナ    400   A支店
5   さば   1000       さば    1000   B支店
6   たい   2000       たい         B支店
7   いちご  3000      いちご    3000   B支店
8   バナナ  4000      バナナ    4000   B支店
9   たこ   150       たこ     150   C支店
10  さば    250      さば     250   C支店
11  みかん   350      みかん    350   C支店
12  たい    450      たい     450   C支店
13  いちご   550      いちご    550   C支店
14  マンデリン 900      マンデリン       C支店
15               みかん     500  D支店
16               いちご     600  E支店
17               バナナ    2300   E支店
18               たこ     1200   D支店
19               マンゴー   600   A支店
20               マンゴー   300   B支店



です。失礼しました。

投稿日時 - 2019-03-11 16:37:12

補足

お忙しいところ申し訳ございません。

(質問の件)
●重複については2パターンあります。
 (1)商品名が同じ場合
 (2)商品名は異なるが同じ種類の場合
  例えば、商品名「みかん」と「マンダリン」は同じ種類

(1)と(2)は売上一覧、受注一覧どちらにも発生します。
必ずしも全て合算ではないので、目視での振り分けが必要になると思います。
検討中ですが、受注一覧と売上一覧の不一致リストを並べて商品名の隣に新たに列
「分類」を設け番号を入力し、商品名の代わりに同じ分類番号で一致or不一致を
調べようかと思っております。

【売上一覧表】       【受注一覧表】
商品名 分類 A支店     商品名   分類 金額
みかん  1  200     マンダリン  1  100  ←(2)の例
               みかん   1  100  ←(2)の例
たい   2  100     たい     2  100  ←(1)の例
たい   3  100     たい     3  100  ←(1)の例


(1)の例は同じ商品名「たい」ですがそれぞれで確認すべき事象です。
(2)の例は商品名は異なるのですが同じものとみなす事象です。
分類番号が同じものを合算して一致するかしないかを見たらどうかと思っております。

何かよい方法がありましたら教えていただけないでしょうか。


●ソートについて
売上一覧と受注一覧の基データの並びが重要なので商品名や支店名でのソートは考えておりません。
同じ商品名で同じ金額の場合、どちらか不明になるためです。
できれば基データと同じ順番で結果を出したいのでオートナンバーがあったほうが
順番を基にもどしやすいかもしれません。

●データについて
受注一覧は支店ごとになっております。
こちらを一度全部まとめたほうがよろしいのでしょうか。
支店それぞれ様式が異なるため、少し手間かもしれません。
それと売上一覧と受注一覧それぞれにどこが一致しているかどうかを残さないと
いけないのでまたデータを戻す作業が発生してしまいます。
今の様式は壊さずに支店データに応じて参照先の列や行を変えていくほうが作業効率は
良いかもしれません。
但し、支店ごとに確認しなければいけなくなりますが。

表記についても支店ごとに異なります。
実際と同じものもあれば全然異なるものもあります。

例えば表記、参照先等、データごとに条件が異なる情報はセルに直接入力して
コードはセルを読ませて実行しようかと思っております。


以前教えて頂いたサイトを参考にして、Accessデータを加工してExcelにコピーする
ことはできたのですがExcelのデータをAccess新規データベースにて加工する方法が
分からず行き詰っておりました。

どんなことでもよいのでご指導をお願いいたします。

投稿日時 - 2019-03-12 13:44:50

ANo.12

No11の続きです。

「支店名(B)を昇順にしてソートした【受注売上比較一覧】」を
説明しますと、A支店では、受注一覧にはない「マンゴー」が売上一覧に表示
されています。「受注売上比較一覧」では商品名(A)、金額(A)が空欄に
なっています。
「たい」は受注一覧では二つデータが入っていますが、売上一覧では
計上されていません。「受注売上比較一覧」では金額(B)が空欄に
なっています。

B支店では、「マンゴー」が受注一覧にはありませんが売上一覧には計上
されています。「受注売上比較一覧」では商品名(A)、金額(A)が空欄に
なっています。

C支店では、「マンデリン」が受注一覧にありますが、売上一覧には
計上されていません。「受注売上比較一覧」では金額(B)が空欄に
なっています。

D支店およびE支店は受注一覧にはない売上が売上一覧に計上されています。
受注売上比較一覧」では商品名(A)、金額(A)が空欄になっています。

こういったことが、必要なフィールドが空欄になっていることで確認
できます。



以上です。実際のコードは補足をもらって手直しが必要な個所があれば
修正して載せます。

投稿日時 - 2019-03-11 11:19:10

ANo.11

No3です。
年度末、期末がいっぺんに来て手がつけられませんでした。
ようやく先週末があいたので急いでいただいた補足を読み直して、
一応Access側でできることにおおよそ目途が立ったのですが、
少し質問をさせてください。

補足の中で、重複ということがありましたが、どのような場合に起こる重複で
データ上ではどのように表れるのか明確ではないのでそのあたりを具体的に
してもらえたらと思います。

以下はこちらで考えた受注一覧、売上一覧のデータです。
補足の中に、重複、不一致とありましたが、それらが
データ上どのような形で現れるのか、実際はどのような
重複、不一致なのかが明記されていないのでこちらで
一応、補足の中での説明で考えられるいろいろな状況を見越して
データとコードを作成してみました。

受注一覧と売上一覧はExcelで作成されたd-他をそのままAccessに
インポートしテーブルとして保存したものです。
受注売上比較一覧はAccessでデータを解析した結果をテーブルとして保存した
ものです。受注売上比較一覧を作るコードはできたいます。
支店名(B)を昇順にしてソートした【受注売上比較一覧】ソートしていない
二つのものを出していますがどちらがいいかはそちらで判断してください。
なお、各表のIDというフィールドはオートナンバーで便宜上つけたもので
必要性のあるものではありません。
なお、受注一覧は各支店のデータをまとめたもとしています。Accessで
まとめるのかExcelでまとめておくのかは今のところは指定して
いません。

一応、受注売上比較一覧には金額(B)というフィールドを必要上
設定しています。つまり売上一覧の金額です。

なお、
日付、商品名、数量、金額、支店名
商品名(A)、金額(A)、結果、商品名(B)、支店名(B)
といった表記は実際と同じですか。もし違うならば
コードの中を何ヶ所か修正する必要があります。
そのあたりはどうですか。

また、売上一覧のコードというフィールドはどんなものが
入るのかは分からないので一応、スルーした状態です。

なお、結果のフィールドにはまだ何も入れる処置をしていません。
以下の説明を見て、どのように入れたいいか判断してください。
結果にデータを入れるのは簡単にコードでできるので(要望が
簡単なものであればですが)補足してください。

【受注一覧】
ID   日付      商品名  数量  金額  支店名
1   2019/01/10   さば    10   100  A支店
2   2019/01/10   みかん   15   200  A支店
3   2019/01/10   たい    20   300  A支店
4   2019/01/10   バナナ   50   400  A支店
5   2019/01/10   さば    50   1000 B支店
6   2019/01/10   たい    15   2000 B支店
7   2019/01/10   いちご   32   3000 B支店
8   2019/01/10   バナナ   15   4000 B支店
9   2019/01/10   たこ    20   150  C支店
10   2019/01/10  さば  56   250  C支店
11   2019/01/10  みかん   49   350  C支店
12   2019/01/10  たい    10   450  C支店
13   2019/01/10  いちご   46   550  C支店
14   2019/01/10   マンデリン10  900   C支店
15   2019/01/10   たい  10   150   A支店

 【売上一覧】
ID   日付     コード  商品名 A支店 B支店  C支店 D支店  E支店  合計
1   2019/01/10       さば   100  1000  250    0   0  1350
2   2019/01/10       みかん  200    0  350  500    0  550
3   2019/01/10       たい   300  2000  450    0   0  2750
4   2019/01/10       いちご   0  3000  550    0  600  3550
5   2019/01/10       バナナ  400  4000   0    0  2300  6700
6   2019/01/10       たこ    0    0  150  1200   0  1350
7   2019/01/10       マンゴー 600  300   0    0    0  900

  【受注売上比較一覧】
ID   商品名(A) 金額(A) 結果  商品名(B)  金額(B)  支店名(B)
1   さば   100       さば     100   A支店
2   みかん  200       みかん    200   A支店
3   たい   300       たい     300   A支店
4   バナナ  400       バナナ    400   A支店
5   さば   1000       さば    1000   B支店
6   たい   2000       たい         B支店
7   いちご  3000      いちご    3000   B支店
8   バナナ  4000      バナナ    4000   B支店
9   たこ   150       たこ     150   C支店
10  さば    250      さば     250   C支店
11  みかん   350      みかん    350   C支店
12  たい    450      たい     450   C支店
13  いちご   550      いちご    550   C支店
14  マンデリン 900      マンデリン       C支店
14               みかん     500  D支店
15               いちご     600  E支店
16               バナナ    2300   E支店
17               たこ     1200   D支店
18               マンゴー   600   A支店
19               マンゴー   300   B支店

      支店名(B)を昇順にしてソートした【受注売上比較一覧】
ID  商品名(A)  金額(A)  結果  商品名(B)  金額(B)  支店名(B)
20                  マンゴー   600    A支店
2   みかん    200       みかん    200    A支店
3   たい     300       たい     300    A支店
4   バナナ    400       バナナ    400    A支店
5   たい     150       たい          A支店
1   さば     100       さば     100    A支店
6   さば     1000       さば    1000    B支店
7   たい    2000        たい    2000    B支店
8   いちご   3000       いちご    3000    B支店
21                  マンゴー   300    B支店
9   バナナ   4000       バナナ    4000    B支店
12  みかん    350       みかん    350    C支店
11  さば     250         さば    250    C支店
13  たい     450       たい     450    C支店
14  いちご    550       いちご    550    C支店
15 マンデリン   900      マンデリン         C支店
10  たこ     150        たこ    150    C支店
16                  みかん   500     D支店
19                  たこ    1200    D支店
17                  いちご   600    E支店
18                  バナナ   2300    E支店


文字数がいっぱいになるので、説明を次のスレにします。

投稿日時 - 2019-03-11 11:16:35

ANo.10

【補足の補足】[売上一覧]⇒[売上情報]の変換アイデア

>[売上一覧]を別シートに変換すること。
>エーッ、それが簡単じゃーないから苦労しているのよ!

と、言わないでください。実は、この横縦変換は割と簡単なんです。

select 日付, 商品名, "支店A" as 支店名, A支店_受注金額 AS 金額 FROM 売上一覧 WHERE A支店_受注金額>0
UNION
select 日付, 商品名, "支店B" as 支店名, B支店_受注金額 AS 金額 FROM 売上一覧 WHERE B支店_受注金額>0
UNION
select 日付, 商品名, "支店C・・・・

 と、ユニオンクエリを使うのです。もちろん、難点もあります。例えば、[B支店_受注金額]が無いと、入力パラメータと解釈されます。ですから、ユニオンクエリは、その都度に最適化する必要があります。それを厭わなければ、売上一覧⇒売上情報の変換は、ユニオンクエリ一発です。

 で、その後は、如何なる比較も自由自在になります。

投稿日時 - 2019-03-01 16:00:31

補足

コメントありがとうございます。

本日は要領が悪いのでバタバタしており確認できておりません。
家に帰ってからゆっくり確認させていただきますのでご了承ください。

マッチング以外の一連の作業があることと、関数はデータ量が多いので他の方法を探している次第です。

投稿日時 - 2019-03-01 16:21:47

ANo.9

【補足】超簡単の求めるには?

・[売上一覧]を別シートに変換すること。

列1、日付
列2、支店名
列3、商品名
列4、金額

これで、全てが解決すると思いますよ。いわゆる、[売上一覧]を[売上情報]に戻すってことです。ただし、[受注一覧]にも列[支店名]は必要でしょう。なら、苦も無く比較可能だと思います。現状では、チャッチャとやるなら添付図方式。

投稿日時 - 2019-03-01 14:43:29

ANo.8

【添付図にミスあり】

・日付を照合条件にしていなので一致しています。
・日付を照合条件にするのであれば、不一致は増えます。

単に検索するだけなんでは・・・

投稿日時 - 2019-03-01 14:31:26

ANo.7

したいことって、添付図のようなこと。だったら、求める表のレイアウトを示せば解決するんじゃないかな。

投稿日時 - 2019-03-01 14:25:22

ANo.6

【お詫び】とんでもない代物の[受注情報]を提示していました。

 新しい添付図が、推奨(?)のそれです。

 前回との決定的な差は、主キー列[ID]が存在することです。

《採番方式の検討は要課題》

 [マスターテーブル]、[情報テーブル]、[レポート]という要素でエクセルシステムを開発する場合に、各テーブルに主キー列[ID]の存在は、絶対です。なぜかしら、エクセルユーザーの多くは、この大事な大事な主キー列を省いている場合が多いようです。

 さて、この必須で絶対と言える主キー列[ID]を持つテーブル構造を基本に据えることは、その採番方式を検討せざるを得ないことを意味しています。まあ、それがどんなものになるかは横に置いて、今は、[受注情報]シートのレイアウト(案)の検討が課題。

 添付図は、標準の余白でA4で印刷設定できる大きさになっています。

《挿入、削除に如何に対応するのか?》

 今朝の、お詫びで述べたように、過年度分の一括削除には課題を残しています。が、更に、言えば、入力順位9、[ID]=19の削除したいと言う要求への対応も難題です。当然、[ID]=19の行を消すことは簡単えす。が、エクセルの行14は残ります。多分、マイクロソフトは、《テーブルの行を消す<>エクセルの行を消す》と判断して、そのような仕様にしたんだと思います。

※※※※※※※※※※※※※※※※※※※※※※※※※
 この解釈が違うって方は、是非、指摘して貰いたい。
 ここんところは、テーブル管理のキモですから。
※※※※※※※※※※※※※※※※※※※※※※※※※

 まあ、この空白行には、DeleteNullRow関数で対応するとして、挿入操作を如何にして保証するのか?それが、今一つの検討課題です。

>コピーしてずらしてね!

は、ちょっと通用しません。ということは、DeleteNullRow関数をMoveRow関数に進化させる必要があるってことだと思います。多分・・・

 お詫びのついでに、検討課題についても触れておきます。設計段階で、出来るかどうかは、一切考える必要はありません。が、何が、問題であって、何を解決しなきゃーならないのかの解明は必須です。

では・・・

投稿日時 - 2019-02-28 11:44:43

補足

コメントありがとうございます。

こちらを見れる環境になかった為、確認が遅くなりました。
申し訳ございません。

色々と考えて頂き感謝申し上げます。

私が理解できていないせいかもしれませんが、受注一覧より売上一覧を作成する
ようになっているのでしょうか?
そのようでしたら私の説明不足です。

各支店より提出された受注一覧とシステムより出力した売上一覧を比較し、商品名、
金額が間違いないか確かめようと思っているのです。

受注一覧も売上一覧も既にあるデータです。
こちらで作成することはありませんし、様式を指定することもできません。
ですが入手したデータを比較しやすいように加工することは可能です。

もし私の解釈が間違っていたのでしたら申し訳ございません。


それと、Excelデータをマクロで空白行を消すコードは作れると思います。
空白セルを探して行全部が空白だった場合に消すという方法です。
VBA関数は使ったことがないので分かりませんがマクロで大丈夫でしたら
作成可能です。

もしかしたら当初の条件と変更されていましたら申し訳ございません。
既にあるデータも用いて比較する方法がありましたら引続きご教授願えないでしょうか?

投稿日時 - 2019-03-01 13:08:50

ANo.5

 先ず、今までの回答の中で一つ嘘があったことを先ずはお知らせしておきます。それは、エクセル上のテーブルの[受注一覧]から過年度のは簡単には消せないってことが判明しました。確かに、それらの行は消せましたが、行が自動的に上に詰まってくれずに空行が出来てしまいました。そこで、

※※※※※※※※※※※※※※※※※※※
 DeleteNullRow(空行を詰める範囲)
※※※※※※※※※※※※※※※※※※※

なるVBA関数が必須なようです。

 で、肝心のシート設計ですが、[受注一覧]てのは《レポートシート》として別途に添付図のような[受注情報]シートを用意します。

 レポート[受注一覧]は、作成対象期間を入力すると自動で作成されるようにします。それは、同シートに二つの式を書くだけで実現できるかと思います。(多分)

 仮に、開発する本アプリの名前を《売上管理システム》と命名します。で、この手法の利点は、来年度も、差来年度も、そのまんま使えるってことです。[受注一覧]が増えたら2年を経過したのを消せば良いだけ。

【課題】入力サポートシステムをどうするのか?

 如何に、《売上管理システム》の入力オペレーターが1分に3行程度の速さで入力できる代物として完成するのか?そこが、勝負です。如何せん、Excelは、今日、初めて操作しているど素人。実に、困っています。

 なお、添付図で黄色の列は非入力列です。

・[商品台帳_ID]が入力されたら、商品名と参考単価は、[商品台帳]シートを参照して表示します。同時に、[単価]にも”参考単価”を入力します。[金額]は、単価か数量が更新される都度に自動計算します。

 ところで、[参考単価]と[単価]という二つの列がなぜ必要なのか?それは、[商品台帳!単価]が変更した際に、[受注情報]や[受注一覧]が自動的に変更されるという事態の発生を防ぐためです。仮に、この対策を怠ると、既に提出したレポートとの矛盾が発生します。ですから、この措置は欠かせません。

 さて、入力の高速化構想ですが、

1、[日付]欄は、[ALT]+[D]を押すと前行をコピーする。
2、[商品台帳_ID]欄で0を入力すると、《商品入力フォーム》が開く。
3、オペレターは、商品の[検索スペル]を入力し《対象リスト》を得る。
4、その一つを選択すると[商品名][参考単価][単価」を更新して閉じる。

などが考えられます。また、[ALT][G]と入力すると、[商品台帳]シートに移動して新規に発生した商品を登録出来るようにします。

 この初手のハードルを越えたら、もう、《売上管理システム》は完成したも同然。で、これを越えて、初めて実用的なエクセルシステムが誕生します。

 なお、こんな感じで、[売上一覧]も《レポートシート》とします。で、作成対象期間を入力すると自動で作成されるようにします。参照するのは[売上情報]シートです。で、同シートでは、単純に、一支店ごとに売上情報を入力します。が、[コード]って何ですか?出来れば、これも[売上情報入力フォーム]でもって高速入力する環境を用意します。

10 Input a,b
20 Let c=a+b
30 Print c

の基本をエクセルで実現するってのは、こういうことです。まあ、はっきり言って、Access で作成すればチョチョイなんですが・・・。私は、エクセルで実現することに価値がある時代が来たと思っています。さて、質問者は、この初手のハードルを越える意思がありますか?

 エクセルのユーザーホームは、その編集メニューの在り処さえ知らない私。でも、何とかなるような気もします。ともかく、大事なことは、エクセルに向かって作業することではありません。全体のシートの構想、ユーザーフォームの構想を固めることです。その構想に間違いがないと判断した時点で初めてエクセルでの開発作業に着手すべきです。その後は、まあ、単なる肉体労働の世界かと思います。知恵を絞るのは、《売上管理システム》の設計書を如何に書き上げるのか?

 果たして出来るかどうか?なんて考える必要はありません。すべて出来る!という前提で、受注情報テーブル、売上情報テーブル、顧客台帳テーブル、社員名簿テーブルを設計。そして、その反映としての、それぞれのシートの雛形、そして、各種レポートの雛形を作成すべきです、それを、まとめて《売上管理システム設計書》として上司に提出。そして、決済を貰う。エクセルに向かうのは、それからです。

 で、「私なら、全部出来る」ということで、次は、[売上情報]シートの打ち合わせに進みますか?それとも、止めますか?

 思うに、この出しゃばりは、85%はやるべきではないと自覚しています。ですから、フェードアウトされていいですよ。その方がいいかな。でも、そうだとしても、大枠では、目指すべき方向性は理解してもらえたと思います。そして、今、やることも・・・。

以上。

投稿日時 - 2019-02-28 00:49:31

ANo.4

[確認] 設計は、絶対ですか?

 今の設計では、Accessを利用するのは不可能。なぜなら、示された表は、テーブルではなくてレポート。

10 input a.b
20 c=a+b
30 print c

 およそすべてのソフトを構成する要素は、この3行で説明できます。

テーブル: aとbを記録する
SQL: a,bを演算する
表: 演算結果をレポート形式で示す

 で、質問者の設計には、テーブルが存在しません。これが、作業が先に進まない根本原因です。仮に、テーブル設計を一般的なそれに改めると、全ての問題は解決します。

 まあ、テーブルの一般化と言っても、次のような改善を行うだけですが。

1、[支店名簿]、[商品台帳]を設ける。
2、[受注記録]とのリレーションという考えを導入する。

 つまり、エクセルのシートは、4種類になるってことです。

1、システム管理シート。
2、マスター管理シート。
3、随時データ管理シート。
4、レポートシート。

 この設計に移行すると同時に作業の倍速化を達成。で、もちろん、一切、VBAは組まないで実現を目指す。

 ともかく、全てが簡単に実現できるのに、プログラムの行10と20がない。あるのは、行30だけ。ここを、なんとかしませんか?

70にもなると、遠慮ってのを忘れる。気を悪くしないで検討してもらえないだとうか?

以上。

投稿日時 - 2019-02-27 05:47:35

補足

退院おめでとうございます。

さっそくのコメント感謝しております。

設計は絶対ではありません。
出来る限りの対応をいたします。
Excelシートも可能です。

それと、ただただ感謝の思いしかありませんので、私の事は気にせず、おかしい所はどんどん言って下さいね。


ですが、もう少し教えていただけないでしょうか。

1、システム管理シート。
2、マスター管理シート。
3、随時データ管理シート。
4、レポートシート。

私の知識が低い為、どのようなシートかイメージがつきません。
申し訳ございません教えていただけないでしょうか。

よろしくお願いいたします。

投稿日時 - 2019-02-27 21:09:38

ANo.3

質問の内容が具体的でないので以下のような回答になりますが。

AccessにExcelを外部データとしてテーブルリンクする方法もありますし、
あるいはExcelのデータをAccessからテーブルに取り込む、あるいはSQL
をVBAで発行してコード内で処理し、Excelに戻す、あるいは反映させる
といった手法をとることになるのでは、と思います。

Excelのデータの処理がAccessで処理をしたほうが都合がいいのであれば
Accessでの処理をすればいいでしょうし、Excelでできることであれば
Excelで処理をしたほうがいいのでは、と思います。

具体的なデータとその処理の内容がわからないので、できますとはいい
ませんが、以下にAccessとExcelの連携について書いてあるサイトが
あります。これらを読んでそれでもAccessとExcelの連携について
分からないけれども取り組みたいということであれば、再度質問を
されればいいのでは、と思います。


ExcelVBAとAccessの連携 第1回 Excelからデータベースへの接続
https://ateitexe.com/access-database1/

なぜエクセルとAccessデータベースを連携するのが良いのか、
またその際の注意点
https://tonari-it.com/excel-vba-access-database/

三流君VBAで Access から Excel 連携
http://www.ken3.org/cgi-bin/group/vba_access_excel.asp


探せば山ほどあります。


なお、ここで具体的にExcelのデータをAccessでどのように処理をしたいのか
説明されるならば出来ることであればこの場で回答をします。



以上です。

投稿日時 - 2019-02-26 17:56:27

お礼

コメントありがとうございます。

AccessからでもExcelでもできることがあるのですね。
勉強になります。

ご紹介いただいたAccessとExcelの連携のサイトをじっくり読んでみようと思います。

実はExcelにある受注一覧と売上一覧をマッチングさせ受注漏れや、売上計上漏れを
防ごうと考えております。

VBAでもできるのかもしれませんが私の知識が低い為、Accessの完全外部一致を
用いて一連の作業ができればとご相談させていただきました。

もし可能でしたらご意見頂けないでしょうか。
よろしくお願いいたします。

(目標)
・商品名をKeyに商品名と金額をマッチング
商品名(受注一覧)=商品名(売上一覧)
金額(受注一覧)=支店名(売上一覧)
・重複は別シートに抽出
・不一致は別シートに抽出

(概要)
・受注一覧は各支店によって様式が異なりますが商品名と金額は
必ず記載されております。
様式が異なる為、作業用にデータを加工すべきか、作業列をセルに
入力して、それを読ませた方がよいのか検討中です。
・重複の抽出はマクロで行うかAccessで行うか検討中(マクロは完成済)

(受注一覧)
日付 商品名 数量 金額

(売上一覧)
日付 コード 商品名 A支店 B支店・・・・・合計
※支店に金額が入力されております。  

(マッチング後)
商品名(A) 金額(A)結果 商品名(B)〇支店(B) 

Aは受注一覧、Bは売上一覧とします。
結果欄に一致している場合は「〇」、不一致の場合は「FALSE」と表示

投稿日時 - 2019-02-26 23:33:03

ANo.2

 私は、excel 端操作したことが門外漢。ですが、excelからAccessを操作できたらいいな考えて、そのライブラリの開発に着手。また、excelでも同シート上のデータをAccess のテーブルとみなしてselect文、insert文、update文、delete文を実行して結果を戻す関数があったら。と、考えて挑戦。どっちも、完成?しています。で、参考になるサイトはありませんね。vbaでプログラミングすることなく式に書くだけでokでなきゃー、ライブラリ関数とは言えないでしょう。それが、あるようでない。で、その関数ですが、僅かに4つ+α。早速に紹介したいところですが、只今、手術入院中。明日には、退院します。70歳の爺が考えたそれでよければご紹介します。

投稿日時 - 2019-02-26 17:23:11

お礼

コメントありがとうございます。

入院中??
明日は退院とのこと どうかご無理をなさいませんようごゆっくりご養生ください。

体調が戻られました時で大丈夫ですのでライブラリ関数を教えていただけないでしょうか。
よろしくお願いいたします。

投稿日時 - 2019-02-26 22:31:30

ANo.1

できます。が、Accessを介するという面倒な手順を踏まないでExcelのマクロだけで目的を達成するのがお勧めです。

投稿日時 - 2019-02-26 16:22:44

補足

もう少し教えていただけないでしょうか?

>Excelのマクロだけで目的を達成するのがお勧めです。

調べてみたのですがExcelマクロでどう書いたらいいのか分かりませんでした。 
Accessの作業部分はSQLになるのでしょうか?

どこか参考になるサイト等がありましたら教えていただけないでしょうか?

投稿日時 - 2019-02-26 16:44:30

あなたにオススメの質問