• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessの初心者です。)

Access初心者のためのVBAを使ったExcel出力の方法

このQ&Aのポイント
  • Access初心者の方がVBAを使ってExcel出力する方法を教えてください。
  • 検索条件に指定して表示した結果を一部の項目だけExcel出力したいです。
  • Excel2007を使用しています。お力添えいただける方はいらっしゃいますか?

質問者が選んだベストアンサー

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

追加です。 エクセルのバージョンが2007なので拡張子を 2007形式で保存するためにxlsxという一般的 なブックの形式で保存しておけば良いで しょうからコード、および説明の一部変更を します。 コード: Set wkb = objExcel.Workbooks.Open(Filename:=CurrentProject.Path & "\会員誕生日.xls") を Set wkb = objExcel.Workbooks.Open(Filename:=CurrentProject.Path & "\会員誕生日.xlsx") 説明: 次に同じフォルダの中に会員誕生日という名前で エクセルファイルを作ります。そのファイルの シートの名前を 会員誕生日シート とします。 シートのA1は漢字氏名、B1は誕生日としておい てください。 の中で、 会員誕生日.xlsx という名前でファイルを作ります。 とします。つまりブックの保存形式をコードと 同じにします。他の形式で保存したいのならば コードの部分と保存する会員誕生日ブックの 形式を同じ形式にして訂正してください。

その他の回答 (5)

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

一応、動作確認ができているので以下に説明します フォームの名前をF検索とします。フォームには 既存のテキストボックスtxtNameがあるものと すます。ボタンを一つ追加します。ボタンの 名前をcmdExportとします。標題は適当に。 フォームのコード表を表示し、以下のコードを 貼り付け、保存します。 Private Sub cmdExport_Click() Dim db As Database Dim rs As Recordset Dim qdf As QueryDef Dim objExcel As Excel.Application Dim wkb As Excel.Workbook Dim wks As Excel.Worksheet Dim xId As Long Dim usedRow As Long Dim nextRow As Long If IsNull(Forms!F検索!txtName) Then MsgBox ("名前を記入してください。") Exit Sub End If Set objExcel = CreateObject("Excel.Application") Set wkb = objExcel.Workbooks.Open(Filename:=CurrentProject.Path & "\会員誕生日.xls") Set db = CurrentDb Set qdf = db.QueryDefs("Qエクスポート") qdf.Parameters(0) = [Forms]![F検索]![txtName] Set rs = qdf.OpenRecordset If rs.RecordCount > 0 Then usedRow = wkb.Worksheets("会員誕生日シート").UsedRange.Rows.Count nextRow = usedRow + 1 With wkb.Worksheets("会員誕生日シート") .Range("A" & nextRow).CopyFromRecordset Data:=rs End With Else MsgBox ("レコードがありません") End If wkb.Save wkb.Close Set wkb = Nothing qdf.Close Set qdf = Nothing rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub 次に新しいクエリをつくり、SQLビューに 以下のSQL文を貼り付け、名前をQエクスポート とします。 SELECT Q_会員情報.漢字氏名, Q_会員情報.誕生日 FROM Q_会員情報 WHERE (((Q_会員情報.漢字氏名) Like "*" & [Forms]![F検索]![txtName] & "*")); 次に同じフォルダの中に会員誕生日という名前で エクセルファイルを作ります。そのファイルの シートの名前を 会員誕生日シート とします。 シートのA1は漢字氏名、B1は誕生日としておい てください。 使い方はtxtNameに名前を入力し、ボタンを クリックするとエクセルに選択した名前と 誕生日がエクスポートされます。順次選択 してはボタンをクリックすると追加されて いきます。たぶんこのような機能でいいの ではと思っていますが。 シートの変更が必要になったらデータの 入ったシートを別名にし、他のシートを 会員誕生日シート とすれば新しいシートに データが入力されていきます。列名は 必要なら記入しておいてもいいです。 フォーム名はF検索としていますが、違う フォーム名にしたければF検索の部分を 希望のフォーム名にすべて置き換えて ください。 コードを今理解できるかどうかはわかり ませんが、適当なクエリを作ればできる ような代物ではないことだけはおわかり だと思います。本を手にいろいろ勉強 するのはいいとしても、ご自分の力に 合わせてステップアップしていくように してください。思考錯誤を繰り返す ほど力がついてきます。単純なコードを 書くほどに難しくなります。機能は 単純なものの集まりです。 何かあれば書き込みを。

finetomato
質問者

お礼

ご回答ありがとうございます。 動作確認までしていただいて、頭があがりません。 こんなに複雑なことになるのだと、びっくりました。 ちょっと根気よくVBA組んでみたいと思います。 本当にありがとうございました。

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

画像がよくわからないので推測で書きます。 フォームのレコードソースはQ_会員情報で、 検索結果をフォームに表示するために フォームのプロパティでレコードソースに Q_会員情報を指定して抽出条件を設定して いる、ということでエクスポートの対象と なっているのはQ_会員情報そのものではなく、 抽出条件を設定したフォームのレコード ソースということですね。 そのレコードソースでは余分なフィールドが 含まれるために、ある条件で抽出したレコード セットから名前と誕生日だけをExcelに エクスポートしたい、ということですか。 ということは、抽出条件にフォームの フィールドの参照がふくまれていると 思います。この場合はパラメータを VBAの中で設定するか、あるいは フォームのレコードソースのSQL文を VBAの中に表示して送り出すように するかのどちらかですが。この場合は エクスポートする条件がレコードソース の変更を伴うのでSQL文をVBAの中で 変更設定してエクスポートすることに なります。 したがって一番いいのはフォームの レコードソースを提示してもらい、 そのSQL文をもとにエクポートする イベントのプロシージャを設定して みる、ということになります。 こんなところです。

finetomato
質問者

お礼

ご回答ありがとうございます。 なかなか私の知識では、難しいなと感じています。 検索フォームのコードはこんな感じです。 検索ボタンを押下したとき、以下のようなVBAを設定しています。 その中に、SQLに書き込むVBAを作成したらよいのでしょうか? もしよろしければ、教えてください。 (これもとある参考書のVBAそのままに近いですが) Q_会員情報には、以下のようなフィールドが存在しています。 『会員番号』『漢字氏名』『カナ氏名』『性別コード』『都道府県コード』『生年月日』『職業』 『メルアド』『郵便番号』『住所』『電話番号』です。 これをフォームで検索した結果、Excel出力するときは、『漢字氏名』『生年月日』のみ Excelで出力したいです。 Option Compare Database Option Explicit Const cBaseQuery = "SELECT * FROM Q_会員情報" Private Sub btnSearch_Click() Dim strWhere As String strWhere = vbNullString '性別検索 If Me.txtSeibetsu.Value > 0 Then strWhere = strWhere & "AND" & " 性別コード = " & Me.txtSeibetsu.Value End If '都道府県検索 If Me.txtPref.Value > 0 Then strWhere = strWhere & "AND" & " 都道府県コード = " & Me.txtPref.Value End If '漢字氏名検索 If Me.txtName.Value <> vbNullString Then strWhere = strWhere & "AND" & " 漢字氏名 LIKE '*" & Me.txtName.Value & "*'" End If 'WHERE句編集 strWhere = Replace(strWhere, "AND", "WHERE", , 1) 'レコードソース書き換えと再クエリ Me.RecordSource = cBaseQuery & " " & strWhere Me.Requery End Sub

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

SELECT 会員名, 誕生日 FROM Q_会員情報; を新規のクエリのSQLに貼り付け、これを Qエクスポとします。 ファイルへのパス設定は"会員誕生日.xlsx" ではなく、"\会員誕生日.xlsx" です。 そうしないとたぶんデスクトップに 作成されます。 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _ "Qエクスポ", CurrentProject.Path & "\会員誕生日.xlsx", True

finetomato
質問者

お礼

ご回答ありがとうございます。 ご指示どおり試してみたのですが、Excel出力はできるのですが、 検索結果のExcel出力ができません。 具体的な画面の画像を添付してみました、もしよろしければ、見てください。 画像がよくないので、見えづらくてすみません。 (とある参考書の練習用のファイルの画面ですが…) いろいろ検索した結果の 『会員名』『誕生日』をExcel出力したいです。 この場合、検索するときのVBAにもなんらか記述する必要がありますでしょうか? もしご存知でしたら、お力添えください。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

>もっと複雑なことをしないといけないのでしょうか? いえ、こんなのとか。

finetomato
質問者

お礼

ご回答ありがとうございます。 私がやりたいことは、かなり複雑なVBAを組まないとできないようです。 根気よくやっていきたいと思います。 画面の添付までしていただいて、ありがとうございました。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

select [会員名],[誕生日] from Q_会員情報; ――みたいな、Q_会員情報を元にした新たなクエリを作って、それをエクスポートするとか。

finetomato
質問者

お礼

ご回答ありがとうございます。 私の知識が浅すぎるので、申し訳ないのですが、 以下のように作成すると、 存在しないというエラーがでます。 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _ "select 会員名,誕生日 from Q_会員情報", CurrentProject.Path & "会員誕生日.xlsx", True もっと複雑なことをしないといけないのでしょうか? もしご存知でしたら、教えてください。 よろしくお願いします。

関連するQ&A