中小企業の働き方改革をサポート>>

お世話になります。

VBAより抽出結果をExcelへ出力したいと思います。
とりあえず、抽出結果をExcelの特定の箇所へ出力することは
出来たのですが、今回は見出し(フィールド名)もあわせて出力
したいところです。

見出しの部分を出力するにはどうすればよいのでしょうか。

恐らく見出し部分と抽出結果部分はそれぞれ別々に出力
しなければならないとは思うのですが。。

なお、見出し部分は固定の文字列ではないため、毎回フィールド名を
取得し、それを見出しとして出力する必要があります。

抽出結果(集計クエリ)は、
項目 yyyy年mm月 ・・・・ yyyy年mm月
数量A      500   ・・・・    1200       
数量B      200   ・・・・     800
というような感じで、現在は
数量A      500   ・・・・    1200       
数量B      200   ・・・・     800
の部分だけ出力できている状況です。

Dim obj As Object
Dim MyDB As DAO.Database
Dim MyRs As DAO.Recordset

MySQL = SQL文(集計クエリ)
Set MyRs = MyDB.OpenRecordset(MySQL)
obj.Worksheets(シート名).Select
obj.Application.Cells(23, 1).CopyFormRecordset MyRs

上記でExcelへ出力してます。

ご教授の程、宜しくお願い致します。

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

A 回答 (3件)

以下 ★ 部分を追加してみてどうなりますか




Set MyRs = MyDB.OpenRecordset(MySQL)
obj.Worksheets(シート名).Select
For i = 0 To MyRs.Fields.Count - 1 ' ★
  obj.Application.Cells(22, i + 1) = MyRs(i).Name ' ★
Next ' ★
obj.Application.Cells(23, 1).CopyFormRecordset MyRs


※ これ動いていました?
CopyFormRecordset のスペルは CopyFromRecordset なのでは?
(そのままにしておきますけど)

GetObject した環境ですけど
> obj.Worksheets(シート名).Select
これ、オートメーションエラーになりませんでした?
(Vista+2007 の環境ですけど)
エラーになっていなければそれはそれで・・・
obj.Worksheets(シート名).Activate
はエラーなく動くようですが・・・


※ obj.Application.Cells(23, 1) の部分は、
わざわざ obj.Application でトップに行かなくても?
Application.Cells 記述では、
アクティブブック・アクティブシートが隠れているだけで・・・
obj の正体はブックでしょうか?
(以下の様にトップに行かずに obj から辿った方が良さそうに思いますけど)

Set MyRs = MyDB.OpenRecordset(MySQL)
With obj.Worksheets(シート名)
  .Activate
  For i = 0 To MyRs.Fields.Count - 1 ' ★
    .Cells(22, i + 1) = MyRs(i).Name ' ★
  Next ' ★
  .Cells(23, 1).CopyFormRecordset MyRs
End With
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。

>CopyFormRecordset のスペルは CopyFromRecordset なのでは?
記載ミスです。すみません。

色々調べてみて、理解しない状態でツギハギしながら作成しました。。
なので、おかしな部分が多々あるかと思います。
とりあえず現状はエラーは出ておりませんが、追々精査したいと
思います。ご指摘ありがとうございました。

見出しについてですが、こちらに質問を投稿しつつ自力でしらべて
出力できるようになりました(30246kikuさまの方法とほぼ同じ)。

ありがとうございました。

お礼日時:2014/10/22 17:52

No1です。

抜け落ちが、

For I = 0 to MyRs.Fields.Count - 1
obj.sheets(シート名).Cells(1,i+1) = MyRs.Fields(i).Name
Next i

ですね。セルの指定も反対になっていました。
    • good
    • 0
この回答へのお礼

piroin654様
いつもご回答ありがとうございます。

こちらへ質問を投稿しつつ、自力で調べてなんとか
出力できるようになりました。
方法としては、piroin654様のやり方とほぼ同じです。

ありがとうございました。

お礼日時:2014/10/22 19:05

クエリのフィールド名を取り出し、それを指定の


位置から順に貼り付けていくという手順になるかと。
たとえば、A1から貼り付ける場合は、

For I = 0 to MyRs.Fields.Count - 1
obj.sheets(i+1,1) = MyRs.Fields(i).Name
Next i

のような感じ。
obj.Worksheets(シート名).Select
のあとに。
    • good
    • 0

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

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

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

関連するカテゴリからQ&Aを探す

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

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

QAccessからExcelへの条件付エクスポート

お世話になります。
Access2000で住所録を作成し、運用しております。
普段はデータをフリガナ、会社名、市町村で検索し、表示しているのですが
この時に使用した、検索条件をそのまま使って、得られたデータをExcelに
エクスポートしたいのです。
(検索は、サブフォームの一覧表示部に各検索条件でフィルタをかけるという方法で行っています。)
テーブル作成クエリなどいろいろ試してみたのですが、なかなかうまくいきません。
良い方法をご存知の方いらっしゃいましたら、よろしくお願いします。

Aベストアンサー

テーブル作成クエリで抽出したものをテーブルに出来たらあとはコードで出来ます。
ただし、
1.エクスポート先のEXCELファイルは既にある前提です。ここでは仮にC:\Windows\デスクトップ\Expo.xlsというファイルのDataという名前のシートににエクスポートするとします。

2.VBAでDAOを使用しますが、2000の場合標準がADOになっていますので、ビジュアルベーシックエディターのツールメニューの参照設定からDAOの一番新しそうなヴァージョンのやつにチェックマークをつけておいてください。(ADOでやればいいのでしょうが私の知識が古いのでDAOしか使えないのです。)

3.抽出して作成したテーブルの名前はT_抽出Dataと仮にしておきます。
4.どれかのフォームにコマンドボタンを作成して、そのクリック時のイベントプロシージャに次のようなコードを書きます。

Private Sub ボタン_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim appExcel As Object
Dim Worksheets As Object
Dim I As Integer '行番号

Set db = CurrentDb
Set rs = CurrentDb.OpenRecordset("T_抽出Data")

'エクセルオブジェクト生成
Set appExcel = GetObject("C:\Windows\デスクトップ\Expo.xls")
Set Worksheets = appExcel.Worksheets("Data")

'作業中はエクセルシートを非表示
appExcel.Parent.Windows(appExcel.Name).Visible = False

With Worksheets

'データ追加ループ
Do Until rs.EOF = True
.Cells(I, 1) = rs.Fields("フィールド名")
.Cells(I, 2) = rs.Fields("フィールド名")
.Cells(I, 3) = rs.Fields("フィールド名")
.Cells(I, 4) = rs.Fields("フィールド名")
rs.MoveNext
I = I + 1
Loop

End With

appExcel.Parent.Windows(appExcel.Name).Visible = True

'エクセルブックを閉じる
appExcel.Close True

' オブジェクトの参照を解放
Set Worksheets = Nothing
Set appExcel = Nothing

MsgBox ("エクセルへの出力が終了しました")
End Sub

実は私も以前、教えてgooで同じような質問をして、別の人にこのコーディングを教えてもらいました。

テーブル作成クエリで抽出したものをテーブルに出来たらあとはコードで出来ます。
ただし、
1.エクスポート先のEXCELファイルは既にある前提です。ここでは仮にC:\Windows\デスクトップ\Expo.xlsというファイルのDataという名前のシートににエクスポートするとします。

2.VBAでDAOを使用しますが、2000の場合標準がADOになっていますので、ビジュアルベーシックエディターのツールメニューの参照設定からDAOの一番新しそうなヴァージョンのやつにチェックマークをつけておいてください。(ADOでやればい...続きを読む

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
...続きを読む

Q【Access】クエリで抽出したデータをCSV形式でエクスポートできますか?

タイトルの通りなのですが、
クエリーで抽出したデータをcsv形式でエクスポートするには
どのようにすればいいのでしょうか?
Accessに慣れていなくて困っています、どなたか教えてください(>_<)

その後はいろいろ加工したいので、
最終的にはExcel形式で保存しなおそうと思っています。
初めからExcel形式でエクスポートすると、とても重くなるし、
いちいち「再計算」がかかってしまうので作業がやりづらいんです。。。

どなたかお力を貸してください。
よろしくお願いします!

Aベストアンサー

クエリをクリックし選択状態にしてメニューのファイルのエクスポートもしくはクエリを右クリックしエクスポートを選択すると保存する場所の選択するダイアログが出ますのでファイルの種類をテキストファイルを指定し保存するホルダとファイル名を指定します。
指定するとテキストエクスポートのウィザードが表示されますので順次進めていきエクスポート先のファイル名でパスとファイル名が表示されますのでcsvで保存するなら最後の.txtを.csvに変更しOKをクリックすればcsvで保存でします。

QアクセスからVBAでエクセルに出力する方法

アクセスからVBAでエクセルに出力する方法
アクセスで下記のようなクエリの結果に対して、VBAにて会社毎のエクセルファイルを作成、
保存したいと思いますが、どのようにすればいいでしょうか?

ファイル名は、[KAISYA_MEI].xlsとし、それぞれをC:\ などに保存したい。

ちなみにExcel2003、Access2003を使用しています。

・アクセスのクエリ結果
KAISYA_ID  KAISYA_MEI  TANTOSYA_MEI     MAIL     TEL
1        ○○社        ***        ***@***0*-***-****
2        △△社        ***        ***@***0*-***-****
2        △△社        ***        ***@***0*-***-****
3        □□社        ***        ***@***0*-***-****
3        □□社        ***        ***@***0*-***-****

↓ 
ファイル名:○○社.xls のエクセルファイル
KAISYA_ID  KAISYA_MEI  TANTOSYA_MEI     MAIL     TEL
1        ○○社        ***        ***@***0*-***-****

↓ 
ファイル名:△△社.xlsのエクセルファイル
KAISYA_ID  KAISYA_MEI  TANTOSYA_MEI     MAIL     TEL
2        △△社        ***        ***@***0*-***-****
2        △△社        ***        ***@***0*-***-****

...


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

アクセスからVBAでエクセルに出力する方法
アクセスで下記のようなクエリの結果に対して、VBAにて会社毎のエクセルファイルを作成、
保存したいと思いますが、どのようにすればいいでしょうか?

ファイル名は、[KAISYA_MEI].xlsとし、それぞれをC:\ などに保存したい。

ちなみにExcel2003、Access2003を使用しています。

・アクセスのクエリ結果
KAISYA_ID  KAISYA_MEI  TANTOSYA_MEI     MAIL     TEL
1        ○○社        ***        ***@***0*-***-****
2   ...続きを読む

Aベストアンサー

もっぱらADOを使っておりますが、本課題はDAOの方が楽だと考え、諸サイトを参考に作成してみましたが、#2のリンク先で、DAOを用いているコードとほぼ同じですね。一時的なクエリを作成している(事前にダミーのクエリを作っておく必要なし)のが違っているのと、一時的なテーブルを作成していますが、これはdb.OpenRecordsetに直接SQLを与えてRecordsetを取得すれば必要がない様です。折角作ったので、ご参考までに載せておきます。テーブル名の記載がなかったので、「Table名」という名前のテーブルで記述しています。
'DAOに参照設定要
Sub test()
Dim db As DAO.Database
Dim qdf As QueryDef
Dim RS As DAO.Recordset
Dim mySQL As String, destFileName As String
Dim i As Integer

'重複しない会社名リストを作成、IDを用いる方がベター
Set db = CurrentDb
mySQL = "SELECT DISTINCT KAISYA_MEI INTO T_KAISHA_LIST FROM Table名;"
db.Execute mySQL
'会社名リストの各レコードについて処理
Set RS = db.OpenRecordset("T_KAISHA_LIST")
RS.MoveFirst
Do Until RS.EOF
mySQL = "SELECT * FROM Table名 WHERE KAISYA_MEI='" & RS(0) & "';"
'テンポラリクエリを作成
Set qdf = db.CreateQueryDef("Q_temp", mySQL)
DoCmd.SetWarnings False
'出力先エクセルファイルがすでに存在していれば削除
destFileName = "C:\" & RS(0) & ".xls"
If Dir(destFileName) <> "" Then Kill destFileName
'Access2000用コード
DoCmd.TransferSpreadsheet acExport, 8, "Q_temp", destFileName, True, ""
db.QueryDefs.Delete "Q_temp"
DoCmd.SetWarnings True
Set qdf = Nothing
RS.MoveNext
Loop
RS.Clone
Set RS = Nothing
db.Execute "Drop Table [T_KAISHA_LIST];"
db.Close: Set db = Nothing
End Sub

もっぱらADOを使っておりますが、本課題はDAOの方が楽だと考え、諸サイトを参考に作成してみましたが、#2のリンク先で、DAOを用いているコードとほぼ同じですね。一時的なクエリを作成している(事前にダミーのクエリを作っておく必要なし)のが違っているのと、一時的なテーブルを作成していますが、これはdb.OpenRecordsetに直接SQLを与えてRecordsetを取得すれば必要がない様です。折角作ったので、ご参考までに載せておきます。テーブル名の記載がなかったので、「Table名」という名前のテーブルで記述してい...続きを読む

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessからExcelにエクスポートする時に常に上書きしたい

AccessのテーブルをExcelへ出力する際に、常に同じファイル名で保存する場合、
2回目以降は、上書きするかどうかを尋ねるメッセージが表示されます。
「常に上書きする」と決まっているので、メッセージを表示させたくないのですが、どうしたらいいのでしょうか。

現在、マクロで作成しており、出力の前後に「メッセージの設定」を入れてみたのですが、ダメでした。
VBAなら可能でしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

エクスポートする直前に、元のファイルを削除するか、移動するか、リネームするのはどうですか。(VBAですが)


削除
Kill "C:\エクスポート.xls"

移動
Name "C:\エクスポート.xls" As "C:\移動後\エクスポート.xls"

リネーム
Name "C:\エクスポート.xls" As "C:\エクスポート_1.xls"

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

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

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

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

Aベストアンサー

#1です。

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

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

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


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

Qテキストボックスにクエリ結果を表示させたい

フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。

クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。

テーブルは
フィールド1|フィールド2
  A   |  10
  B   |  20
  C   |  30
  D   |  40
のような簡単なものです。

テキストボックスBのコントロールソースに
「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。

どのようにやればよいのでしょうか?

Aベストアンサー

クエリは必要ありません。

フォームのレコードソースに無いデータを表示させる
場合には DLookUp を使います。

テキストボックスBのコントロールソースに
=DLookUp("フィールド2","テーブル名","フィールド1='" & [テキストボックスA]) & "'"

上記は「フィールド1」が文字列型の場合です。

数値型の場合は次のようになります。
=DLookUp("フィールド2","テーブル名","フィールド1=" & [テキストボックスA])

DLookUp 関数は コントロールソースに限らず
VBA でも使用し、Access では、非常に使用頻度の高いものです。

ヘルプで調べて、ぜひマスターしてください。

もし Access でなかったら、このレスは無視して下さい。

QAccess フォームのテキストボックスに半角英字のみで入力する設定は

IME入力モードをテーブル・フォームともオフにしたのですがひらがな入力モードになってしまいます。
フォームのテキストボックスに半角英字のみで入力する設定としてプロパティのIME入力モードをオフにするやり方自体が間違っているのでしょうか。
それともATOKを使っているなど利用するパソコン側の問題でしょうか

Aベストアンサー

IME入力モードを「使用不可」にしましょう。


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

人気Q&Aランキング

おすすめ情報