AIと戦って、あなたの人生のリスク診断 >>

お世話になります。

Accessのクエリ結果をVBAでExcelへ出力をしたいと思っています。

内容としては例えば、「Q_aaa」「Q_bbb」「Q_ccc」というクエリの結果をExcel
に出力したいのですが、別々のシートではなく、ひとつのシートにまず「Q_aaa」
を出力し、その次の行から「Q_bbb」を、またその次に「Q_ccc」を…という動き
をさせたい思っています。
なお、それぞれのクエリ結果のレコード数は決まっていません。

サンプルコード、参考サイト、もしくは考え方でもお教え頂ければ幸いです。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

新しくクエリを作成し、SQLビューで開き



Select * From Q_aaa
Union All Select * From Q_bbb
Union All Select * From Q_ccc;

と記述し、先に全ての対象データを抽出するクエリを作成してからExcelにエクスポートすることで解決できないでしょうか?
    • good
    • 0

質問に


(1)アクセス側のモジュールで記述
(2)EXCEL側のもVBAで記述
のどちらかを明記すべきだ。(1)らしいが、
受ける側がEXCELなので(2)でやるか、コードの早い段階でExcel.Applicatioの世界に入る方が良いと思う。
ーー
何も書いてないが、
それにEXCELにはマクロの記録と言うのが有るのを知らないのかな?
初心者はマクロの記録が取れないか、まず頭をめぐらすべきだ。操作(メニュー)によっては、取れない場合も有るが。
ーー
持ってくるのが3つクエリがあっても、まず1つについて
EXCELでマクロの記録状態にして
データー外部データの取り込みーデータの取り込みーファイルの指定
(もちろんmdb指定とクエリやテーブルの2段階指定)と取り込みするEXCELシートの左上セルを指定で、取りこままれる。
このEXCELの操作を知らないとどうにもならないが、EXCELVBAをやるには、EXCELの知識も要るということ。
Sub Macro1()

With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\Documents and Settings\OTO\My Documents\社員2.mdb;Mode=S" _
, _
・・・
), Destination:=Range("A16"))
・・・
End With
End Sub
となる(中間行略)
ーー
第2の取り込みは
Sub test02()
d = Range("A65536").End(xlUp).Row
MsgBox d
End Sub
をテスト実行すればわかるように、上記実行後の最下データ行番号が
このコードで判る(常識的なぐらい良く出てくるコード)。
だから第2の繰り返し時には
マクロの記録のDestination:=Range("A16"))を
Destination:=Range("A21"))のように指定して第2ループに入り実行する。インポートするクエリの数の回数だけ、Loopすればよい。
ここまでぐらいやって、突きあったった点について質問しないと、丸投げ質問だ。
ーー
アクセスVBAでExcel.Applicatioの世界に入った(そのやり方はGoogleで「Excel.Applicatio」で照会)場合は、EXCEL定数などで、上記のそのままのコードが使えない場合が有るので、その点にぶつかったらGoogleででも調べること。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセスクエリ(複数)→マクロ→エクセル出力(ワークシート別)

仕事で必要になり、マクロ(アクセス)の勉強を始めました。
そこでわからないことがあります。どうか、よろしくお願いします。

マクロでエクセルに出力する方法はわかったのですが、それはばらばらのエクセルファイルで作成してしまう方法で、私の希望する一つのエクセルファイルに別々のシートで作成するのとは違うものでした。
試行錯誤してみたのですが、私の今の力ではできそうにありあません。

もしかしたらスクリプトを使ったりすればいいのかもしれませんが、私はエクセルでもマクロを使ったことがないのでとてもビビってます。

もしこの場合はスクリプトしか方法がないのであれば、これを機会に勉強をしようと思っています。
ただ、何から手をつけていいものか、さっぱりわからないのでオススメの参考書籍などあれば是非教えて下さい。

質問は2点「マクロの組み方」「スクリプトを使う場合は参考書籍等」を教えて下さい。
どうかよろしくお願いします。

Aベストアンサー

複数のクエリーの結果を、1つのエクセルファイルに別々のシートとして出力したいんですよね。
自分も試行錯誤していて、先程ちょうどできたところです。

まず、マクロの「アクション」で「ワークシート変換」を選び、引数(画面下部分の設定)を以下のように指定します。

変換の種類: 「エクスポート」
ワークシートの種類: Microsoft Excel 8-10など
テーブル名: クエリー名 <テーブルとあるがクエリーも可能>
ファイル名: (出力するエクセルのファイル名をフルパスで指定)
フィールド名の設定: フィールド名を1行目の見出しにするなら「はい」
範囲: <エクセル出力時のシート名>

最後の「範囲」がミソで、これでシート名が指定できることが、試してみて初めてわかりました。

上記の「ワークシート変換」アクションを、出力したいクエリーの数だけ順番に作成し、テーブル名と範囲だけ変えれば、同じエクセルファイルに複数のクエリーを出力できます。

ちなみに、AccessはVBAの解説書は多いようですが、マクロなどが詳しく載っている本は自分も見たことがありません。

複数のクエリーの結果を、1つのエクセルファイルに別々のシートとして出力したいんですよね。
自分も試行錯誤していて、先程ちょうどできたところです。

まず、マクロの「アクション」で「ワークシート変換」を選び、引数(画面下部分の設定)を以下のように指定します。

変換の種類: 「エクスポート」
ワークシートの種類: Microsoft Excel 8-10など
テーブル名: クエリー名 <テーブルとあるがクエリーも可能>
ファイル名: (出力するエクセルのファイル名をフルパスで指定)
フィールド...続きを読む

Qaccessへエクセルの複数のシートのインポートの仕方

エクセルの複数のシートをアクセスにインポートをするにはどうしたらいいのでしょうか?
シート数が40以上あって困っています。

できればVBAやマクロ等はわかりませんのでそれ以外の方法で無いでしょうか?
よろしく御願いいたします。

Aベストアンサー

VBAで書けば、例えば、こんな感じになります。
db1.xls というエクセルのファイルがあって、そのファイルに Sheet1、Sheet2、、、、、、Sheet40というシートが含まれている、という前提です。
(行替えやタブがここでうまく書けないので、読みにくいし、そのままコピーしてもうまく行かないかもしれません)

Sub A()
Dim I As Intege
For I = 1 To 40
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Sheet" & I, "db1.xls", True
Next
End Sub

F5で実行します。
データベースに、シートと同じ名前のテーブルができます。
同じシート名のテーブルがすでにあれば、インポートしたレコードは追加されます。

コードは実際に自分のパソコンで走らせて確認していますが、やる前に絶対にパックアップを取っておいてください。
お手元のデータベースがめちゃくちゃになってしまったら、私は、これも絶対に、直せません。

ポイントは DoCmd.TransferSpreadsheet という命令です。
引数は左から順番に、インポート、ソースはエクセル2000、シートの名前は Sheet**、ソースのファイル名は db1.xls、先頭行をフィールド名として使う、と言う意味です。

詳しくはヘルプで見ていただきたいと思います。
ヘルプはもしかしたら、デフォルトでインストールされていないかもしれません。
インストールされていれば、TransferSpreadsheet の部分のどこかにカーソルを置いて、F1で表示されます。
2番目の引数について、エクセル2000より後の場合にどうなるのかは、申し訳ないですが、知りません。
これについては、ヘルプで確認してください。

もし、シート名がこのように規則的な名前でなければ、この DoCmd.TransferSpreadsheet をシートの数だけ羅列します。

Sub A()
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "なんとか"db1.xls", True
DoCmd.TransferSpreadsheet acImport acSpreadsheetTypeExcel9, "かんとか"db1.xls", True
............(以下同様)
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "ほにゃら"db1.xls", True
End Sub

さて、余談になりますが、今回きりの作業であれば、私なら、ひとつひとつインポートウィザードでインポートします。
高々、40シートですよね。スプレッドシートの構成や中身によりますが、1シートあたり10分もあれば、インポートできるのではないでしょうか。

TransferSpreadsheet メソッドでインポートしても、あとでフィールドのデータ型を変えたり、主キーを設定したり、という作業がそれぞれのテーブルで必要になるかもしれません。つまり、モジュールをつくってみても、それで終わりにはなりません。定期的なルーチン作業ならともかく、今回限りなら、大して手間は変わらないと思います。

VBAで書けば、例えば、こんな感じになります。
db1.xls というエクセルのファイルがあって、そのファイルに Sheet1、Sheet2、、、、、、Sheet40というシートが含まれている、という前提です。
(行替えやタブがここでうまく書けないので、読みにくいし、そのままコピーしてもうまく行かないかもしれません)

Sub A()
Dim I As Intege
For I = 1 To 40
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Sheet" & I, "db1.xls", True
Next
End Sub

F5で実行します...続きを読む

QAccess 複数のクエリの結果をひとつの表にまとめたいのですが

Access2002の初心者です。
健康診断の結果の個別の検査数値から異常値の人数を、部署ごとにカウントするクエリを検査の数だけつくりました。これをひとつの表としてクエリでまとめたいのですが、うまくいきません。
イメージとして

クエリ1 血圧
A部署  2人
B部署  1人
C部署  3人

クエリ2 血糖値
A部署  4人
B部署  2人
C部署  1人

↓↓このようにまとめたいのですが
    体重 血糖値
A部署 2人  4人
B部署 1人  2人
C部署 3人  1人

よろしくおねがいいたします。

Aベストアンサー

クエリ1、クエリ2をクエリデザインビューに取り込み、部署で結合するだけで
目的のものは得られますが

クエリ1、クエリ2と分けて結果を出さなくとも
クロス集計クエリで大元のテーブルからいきなり最終結果がでるはずですよ
クロス集計クエリについて勉強してみてください

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qエクセルの指定したシートにエクスポート

Windows2000/Access2000
エクセルの売上ブックには、コピー画面と売上明細書というシートがあります。
アクセスで作った売上明細をエクセルの売上ブックのコピー画面に直接エクスポートさせたいのですが・・・
エクセルのシートを指定してエクスポートって出来るのでしょうか?
もし出来るのであればその方法を教えて頂けたらと思います。
宜しくお願い致します。

Aベストアンサー

 
> アクセスで作った売上明細をエクセルの売上ブックのコピー画面に直接エクスポートさせたいのですが・・・
> エクセルのシートを指定してエクスポートって出来るのでしょうか?


(方法1)
DAO.Database.Execute "SELECT ...... INTO [Excel 8.0;Database=DriveName:\......Path......\FileName].[SheetName] FROM ......"

(方法2)
Excel.Application.Worksheets("SheetName").Range(........).CopyFromRecordset


(方法1)はExcelがインストールされていなくとも、ISAMのドライバがあれば動作可能。
ただし、セルに格納された文字列にシングルクォート「'」が付加されてしまう。

(方法2)を使用するにはExcelが必要。
 

Qアクセスからエクセルのシートを追加して、名前をつける方法

アクセス2000で、ある所定の条件を満たした時に、規定の場所にあるエクセルファイルの先頭から2番目に空のワークシートを追加し、そのシート名を変数に格納されている値でリネームしようとしております。結構急務なんですが、excel.application~等使っても出来ませんでした・・・。プロフェッショナルな方、誰か方法を教えていただけないでしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。

急ぎということで、取り急ぎで作ったコードです。目的の処理以外は一切おこなっていませんので、カスタマイズしてください。

また、処理速度の点で実行時バインドではなく、参照設定を予め行って下さい。


Option Compare Database

'要参照設定:Microsft Excel x.x Object Library
Sub AddXLWorksheet()

  Dim xlApp As Excel.Application
  Dim WB As Excel.Workbook
  Dim SH As Excel.Worksheet
  Dim strXLfile as stirng

  strXLfile = "C:\TEST.xls" 'Excelブックフルパス

  Set xlApp = Excel.Application
  With xlApp
    .Visible = True
    Set WB = .Workbooks.Open(strXLfile)
    'シートを3番目に追加
    Set SH = .Worksheets.Add(After:=WB.Worksheets(2))
    'シート命名
    SH.Name = "aaaaa" 'ここを変数で渡せば良い
  End With

  Set SH = Nothing
  Set WB = Nothing
  Set xlApp = Nothing

End Sub

こんにちは。

急ぎということで、取り急ぎで作ったコードです。目的の処理以外は一切おこなっていませんので、カスタマイズしてください。

また、処理速度の点で実行時バインドではなく、参照設定を予め行って下さい。


Option Compare Database

'要参照設定:Microsft Excel x.x Object Library
Sub AddXLWorksheet()

  Dim xlApp As Excel.Application
  Dim WB As Excel.Workbook
  Dim SH As Excel.Worksheet
  Dim strXLfile as stirng

  strXLfile = "C:\TEST.xls" 'Excel...続きを読む

QAccessでエクセル出力の保存先指定

Accessでマクロを使ってエクセル出力をしています。
出力時に自動的にマイドキュメントに保存されてしまうのですが、
保存先を選択するダイアログを表示させることは可能でしょうか。
VBAを使わないとだめなのでしょうか。
教えてください。
よろしくお願いします。

Aベストアンサー

マクロは何を使っていますか?
「出力」 アクションなら、
ファイル名を省略すれば 「ファイルへ出力」 ダイアログが表示されますが。

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QAccess-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む

QAccessからExcelのファイルを起動する

Accessのフォーム上にボタンを作成して
クリックすると特定のExcelのファイルが起動する
ようにしたいのですが、簡単な手はありませんか?

Aベストアンサー

こんにちは。maruru01です。

Shell関数を使って、

Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE ファイル名"

とします。
ちなみに、Excelの実行ファイルのパスは環境によって違ってきます。

あと、Excelの実行ファイルのパスがわからなくても、ファイルに関連付けられたアプリケーションで開くには、API関数のShellExecute関数を使用します。
API関数については、WEB上で検索して下さい。
このサイトの過去の質問でもヒットするかも知れません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング