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

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

Accessの初心者です。

Accessの初心者です。 Accessの初心者です。 VBAでExcel出力をする記述について、おわかりになる方、教えてください。 フォームで検索条件に指定して表示した結果を、Excel出力したいのですが、 フォーム上に出力した項目全てではなく、一部の項目だけExcel出力したいです。 以下のような検索フォームを作成しています。 検索して表示するまでのVBAはできています。 検索条件:非連結 フォーム:連結フォーム(Q_会員情報 というクエリと連結) たとえば、検索条件に『男性』を指定して検索すると、 フォームに『会員番号』『会員名』『性別』『誕生日』の情報が出力されるとします。 これをマクロの機能で、Excel出力をすると、 [Q_会員情報]の項目が全てExcelに出力されますが、 これを、『会員名』『誕生日』だけをExcel出力したいです。 この場合、どのようにVBAを記述したらよいでしょうか? 使用しているのは、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

  • Access2007の初心者です。VBAの記述で困っています、お力添え

    Access2007の初心者です。VBAの記述で困っています、お力添えお願いします。 チェックボックスにチェックが入っている場合に、誕生日が空白のものを抽出する部分のVBAの 記述のところで躓いているのだと思っています。 ■テーブルの情報 ・テーブル名:T_会員情報 ・T_会員情報のフィールド:会員名(テキスト形式)・性別(数値型)・誕生日(日付/時刻型) ■実現したいこと ・T_会員情報で、「検索」ボタンを押下したら、条件にあった情報がフォーム上に抽出できるもの。 ■用意したフォーム T_会員情報の連結フォーム ・フォーム上には以下を用意  ◆「性別」の非連結コンボボックス:txtSeibetsu  ◆「誕生日が空白」という非連結チェックボックス:chkBirthday  ◆「AND OR」のいずれかが選択できるオプションボタン  ◆「検索ボタン」  ◆「会員名」「性別」「誕生日」のT_会員情報の帳票フォーム ■VBA Option Compare Database Option Explicit Const cAnd = 1 Const cOr = 2 Const cBaseQuery = "SELECT * FROM T_会員情報" Private Sub 検索ボタン_Click() Dim strWhere As String Dim strAndOr As String strWhere = vbNullString If Me.optAndOr.Value = cAnd Then strAndOr = " AND " Else strAndOr = " OR " End If '性別検索 If ISNull(Me.txtSeibetsu.value)=False Then strWhere = strWhere & strAndOr & " 性別 = " & Me.txtSeibetsu.Value End If '誕生日空白検索 If Me.chkBirthday=False Then strWhere = strWhere & strAndOr & " 誕生日= " & Null End If 'WHERE句編集 strWhere = Replace(strWhere, strAndOr, "WHERE", , 1) 'レコードソース書き換えと再クエリ Me.RecordSource = cBaseQuery & " " & strWhere Me.Requery End Sub 誕生日が空白の検索のところの記述が問題だと思っています。 初心者でよくわかっておりません。 ご存知の方がいらっしゃいましたら、教えてください。 よろしくお願いします。

  • Accessの初心者です。Access2007を使用しています。

    Accessの初心者です。Access2007を使用しています。 非連結フォームで作成しています。 下記のようなイメージです。 <親フォーム> 「会員番号」:主キー⇒フォーム上で直接入力して検索させて、会員名などフォームにVBAで表示させています。 <サブフォーム> 親フォームで入力した「会員番号」を元に、サブフォームの内容を抽出して表示させたいです。 非連結の親フォームと子フォームを連結させる、プロパティシートの設定すら よくわかっておりませんが、ご回答お願いします。

  • Access SELECT INTO に関する質問です。

    Access SELECT INTO に関する質問です。 いつもお世話になっております。 Access 2002 VBAなのですが、 http://okwave.jp/qa/q4994969.html の内容にちなんだご質問です。 VBAで、SELECT INTO で作成したテーブルを そのままTransferSpreadsheetでExcelに吐き出したいと思っております。 しかし、TransferSpreadsheetでは引数にテーブル名しか指定できないため、 任意のソートがされていない状態でExcel出力されてしまいます。 なにか、任意のソートをした状態でExcel出力できる方法はありますか? TransferSpreadsheetでExcel出力した後、 Excel VBAコードを埋め込んで、Excelで並び替えを行うしかないのでしょうか? よろしくお願いいたします。

  • エクセルからアクセスDBを操作する

    エクセルVBAでアクセスのDBへ接続しそこから選択項目をエクセル側に引っ張ろうとしています。 エクセルVBAの場合、マクロの記憶で分からない操作を記録して、そのままVBAに使う事が出来ますが、アクセスにも似たような機能はありますか? 普段アクセスではクエリで検索条件を指定していますが、このクエリの検索条件をエクセルのマクロの記憶みたいな形でコードとして出す事は出来ないでしょうか? エクセルVBAでアクセスでの検索条件を組み込みたいのです。

  • アクセスのマクロについて教えて下さい

    当方アクセスは素人です。 1つのテーブルを基に作ったクエリとフォームがあります。 このフォームの中にボタンを作り、1つの操作で クエリの条件指定をしたり、その抽出したデータをエクセルに出力したりできるようにしたいのですが どうすればいいのかわかりません。レポートにして出力、程度ならできるんですが…。 自分ひとりなら、クエリの画面で条件指定をして開き、ツール→エクセルに出力、とするところなんですが、 もっとド素人のおじさんに「誰でもボタンひとつでできるようにしておいてほしい」と言われて困っています。 助けてください。よろしくお願いします。m(__)m

  • Access 抽出したフォームをファイル出力

    いつもお世話になっています。 フォームにボタンを作成して、指定したフォームをExcelファイルで保存しています。 これまではクエリに直接抽出条件を入力し、それをフォームにしていました。 条件が増えたので、読み込みのイベントで抽出(入社年度、部署名)を指定して フォームで抽出しています。そこからのレポートもフォームも抽出結果どおりです。 ただすべての内容がExcelファイルに出力されてしまいます。 抽出した内容だけをExcelファイルに出力するにはどうしたらいいでしょうか。 Private Sub Eccelで保存_Click() DoCmd.OutputTo acOutputForm, "活動記録", acSpreadsheetTypeExcel9 End Sub お力添えをお願いいたします。

  • Access2000で検索フォームの作成方法を教えてください。

    Access2000で検索フォームの作成方法を教えてください。 Accessの知識はテーブル、クエリー、フォームの初歩的な作成方法ぐらいしか分かりません。 【今の状況】 フォームを4つ作成しています。 (1)検索条件を指定するフォーム1つ(F4)を作成済みです。 (2)フォーム(F4)には、条件を指定するコンボボックス(条件1、条件2)を2つと、  コマンドボタン(検索ボタン)を1つ作成しています。  ※コンボボックスは、非連結で、値集合タイプに値リストを設定し、値集合ソース値を指定しています。   ※コマンドボタンは、フォーム上にボタンを描いただけで何も設定していません。 (3)検索結果を表示させるフォーム3つ(F1、F2、F3)を作成済みです。 (4)それぞれメインフォーム(M)とサブフォーム(S)で構成されています。 (5)メインフォーム(M)は、3つのフォーム(F1、F2、F3)共通です。  サブフォーム(S)は、3つとも表形式ですが、表示している元データ(クエリー)が異なります。 (6)検索条件を設定したい項目は、メインフォーム(M)にも表示されている項目です。 【やりたいこと(完成イメージ)】  検索条件指定のフォームに作成している「検索ボタン」をクリックすると、  検索結果表示用のフォーム(F1、F2、F3)に検索条件に該当するデータのみ表示させたい。  (上記(6)にも書きましたが、メインフォーム(M)にも検索条件に指定した値を表示させたいです。)  検索条件は、最大6項目指定しますが、条件が選択されているもののみをAND条件で検索したいです。 【教えていただきたいこと】  コンボボックスの条件をANDで指定するには、どこに何を設定すれば良いのでしょうか?  「検索ボタン」の作成方法後に、設定をする必要があると思うのですが、どこに何を設定すれば良いのでしょうか?  検索条件フォーム(F4)の結果を、検索結果表示フォーム(F1、F2、F3)に関連付けるには、どこに何を設定すれば良いのでしょうか?  その他に設定が必要な部分はありませんか?    あと、お勧めの方法が他にあれば教えてください。 初歩的なことしか理解していませんので、 不十分な説明文で申し訳ありませんが、 よろしくお願いします。

  • Access VBA で

    初めまして、eavenと申します。 Access VBAを使って、フォームにある項目に入力された数字の1つ1つにロジカルチェックを入れ、条件に当てはまればMsgBoxでNGと出力し、全ての項目で条件に当てはまらなければOKと出力したいのです。 項目が全部で15個あり、項目ごとに条件式が違います。例えば、Aという項目には  If A >= 20 Then MsgBox "AはNGです" といった単純なものです。 今回、教えていただきたいのは上記にありますように『全ての項目がOKであった場合』に、OKですという表示を出したいのです。 言葉足らずな質問で申し訳ありません。どうぞご教授ください。 よろしくお願い致します。

  • Access2000で非連結オブジェクトの保存について

    フォームにエクセルのシートを非連結オブジェクトで張り付けてみたんですが、VBAで保存するにはどんなメソッドでコントロールは何になるんでしょうか?どなたか教えて下さい。宜しくお願いします。

  • Accessで質問です

    お世話になります。 Accessでの検索フォームにて、検索用のテキストボックスにプルダウンメニューで 検索項目(A,B,Cのいずれか)を選択させるようにすることは可能でしょうか? また、メニュー以外の項目は入力できないように設定する必要があります。 可能であれば設定方法やVBA記述を教えて頂きたいのですが・・ 初心者ですが宜しくお願い致します。

専門家に質問してみよう