質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

4回答

1852閲覧

ExcelからAccessでデータ集計を実行させ、その結果をExcelに戻したい

takamak

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2021/09/18 07:42

編集2021/09/18 09:49

【やりたいこと】
ExcelからAccessを起動しAccessで集計した結果を、もとのExcelのシートへ貼り付けたい。

【詳細】
1.Excelに作成したマクロ実行ボタンからAccessを起動

Sub Aecees集計() Dim objACCESS As Object Set objACCESS = CreateObject("Access.Application") objACCESS.OpenCurrentDatabase ActiveWorkbook.Path & "\仕入用.accdb" With objACCESS .Visible = false .Run "Execute_Manager", Format(Cells(2, "c").Value, "yyyymm") End With Set objACCESS = Nothing End Sub

 2.Accessでは
・データのリンク処理
・クエリの実行(テーブル作成クエリ)
・作成したテーブルをCopyFromRecordsetでExcelのシートへ貼り付け

 3.その後、Excelへ戻り貼り付けたシートをもとに計算処理などをして保存して終了

【困っていること】
Accessから最初に開いていたExcelのシートにデータを貼り付ける処理がわかりません。
Accessからファイル名を指定して開くと、当然ですが別ファイルが開き困っています。
(ユーザーの操作はExcelのみとしたいため、また貼り付けた後に数値を確認し、
手修正で微調整を行い最終的に計算結果を確定させるため、このような処理の流れを検討しています)

どなたかお知恵をぜひお貸しください。。。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takamak

2021/09/18 10:04

皆様 ご回答ありがとうございます。 Accessにすでにあるテーブルではなく、 Excelからボタンを押したら必要なデータをAccess内にインポートして集計し、その結果をExcelへ戻したいため、ExcelオブジェクトをAccessに渡せれば… と思っているのですが書き方が分からず、困っています。 .Run "Execute_Manager", Format(Cells(2, "c").Value, "yyyymm") ←ここで渡す?? また、Excelに戻したいテーブルは複数あります。 もともとExcelで、必要なデータ(レコード数もかなりあります)を複数のシートに貼りつけて計算処理をさせて複数シートを完成させていたのを 業務改善するためにAccessとの連携に切り替えようと思っています。 宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2021/09/18 11:17 編集

ここは追記修正依頼欄なので、情報不足があるなら質問を編集して追記してください。 いずれにせよ、何が不明なのかちょっとよく判らないんですけど。
guest

回答4

0

思いついたアイデアだけ
実現性は不明です

  1. Access側の関数'Execute_Manager'の引数にEXCELのオブジェクト

例えばWorkbookオブジェクト OR Worksheetオブジェクト OR Rangeオブジェクトを渡して、Execute_Manager内で中身を設定する。

  1. Access側の関数'Execute_Manager'の戻り値をobject型にしていおいてRecordsetオブジェクトを設定して返し、Excel側のコードでCopyFromRecordsetメソッドを実行する。

  2. Access側の関数'Execute_Manager'の戻り値をVariant型にしていおいてRecordsetの結果を2次元配列に変換して設定して返し、Excel側のコードで2次元配列をRangeに設定する

投稿2021/09/18 08:18

takanaweb5

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Accessのテーブルデータまたはクエリデータをエクセルのシートに貼り付けたいということですよね。
ならば、Accessを起動する必要はありません。

・作成したテーブルをCopyFromRecordsetでExcelのシートへ貼り付け

そもそも CopyFromRecordset は Access.Application のメソッドではありません。
ADODBのメソッドです。

「Excel ADODB CopyFromRecordset」でWEB検索すると解説やサンプルコードがいろいろ見つかるのでまずはそれで勉強して、コードを書いてみてください。

例えば、

【VBA】テーブル(Access)のデータをワークシートに転記する

投稿2021/09/18 08:14

編集2021/09/18 08:15
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ExcelからADOでAccessのクエリ実行すればいいんじゃないですかね。
ADOを使ってExcelからAccessデータを利用してみよう
"excel ado access"でググったら他にも記事出てくると思うので探してみてください。

投稿2021/09/18 07:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

ご回答いただいた皆様ありがとうございました。
またサイトの使い方を理解できておらず、記載方法が悪く申し訳ございませんでした。

ExcelからAccessを裏で動かし、テーブルの作成→Excelのシート操作までを行わせようと思っておりましたが
回答内容から考え方に間違いがあることに気づき、
Accessではテーブル作成までで処理を終了させ、残りはExcel内で行うように変更いたしました。

参考URL等とても勉強になりました。
ありがとうございました。

Sub Aecees集計() Dim objACCESS As Object Set objACCESS = CreateObject("Access.Application") objACCESS.OpenCurrentDatabase ActiveWorkbook.Path & "\仕入用.accdb" objACCESS.Run "Execute_Manager", Format(Cells(2, "c").Value, "yyyymm")   'モジュール"Execute_Manager"では ソースデータのリンク/テーブル作成クエリを実行  Set objACCESS = Nothing Call AccessDataImport End Sub Sub AccessDataImport() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim dbFile As Variant dbFile = ActiveWorkbook.Path & "\仕入.accdb" CN.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFile & "" CN.Open ' '----- 計算シート--------------------------------- RS.Open "計算", CN, adOpenKeyset Sheets("計算").Range("A10").CopyFromRecordset RS RS.Close ' '----- 通知書シート--------------------------------- RS.Open "通知書;", CN, adOpenKeyset Sheets("通知書").Range("C5").CopyFromRecordset RS RS.Close: Set RS = Nothing Calculate '再計算 '連番もろもろ '書式設定もろもろ xlApp.Calculation = xlCalculationAutomatic xlBook.SaveAs StrPath & "_" & strDate & ".xlsm" xlBook.Close: Set xlBook = Nothing xlApp.Quit: Set xlApp = Nothing End Sub

投稿2021/09/21 06:02

takamak

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/21 06:21 編集

他回答と全然違う方法で解決したならともかく、 他回答を参考にしていて自己回答にベストアンサーは無いでしょう。
takamak

2021/09/21 08:12

すみません。操作がいまいちわかってなくて自己解決に記載したところベストアンサーになってしまいました・・・。すみません。
退会済みユーザー

退会済みユーザー

2021/09/21 08:16

ベストアンサーは変更出来る筈です。
退会済みユーザー

退会済みユーザー

2021/09/21 14:37 編集

つーか、過去にも似たような事やってんのか。スコアマイナスも納得。 こんな事ばかりやってると、誰も回答付けてくれなくなるよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問