Access VBA Excelエクスポートの方法とファイルの処理についての修正

このQ&Aのポイント
  • Access VBAを使用してExcelファイルにユーザーが作成したクエリを出力する方法について説明します。
  • また、処理の都合で、繰り返しが偶数回目の場合は新しいExcelファイルを作成し、奇数回目の場合は既存のファイルに新しいシートを追加する方法についても解説します。
  • ユーザーが作成したクエリ数はすべて偶数となっているため、修正は繰り返しの回数に合わせて行います。
回答を見る
  • ベストアンサー

Access VBA Excel エクスポート

Accessにてユーザーが作成したクエリを各クエリごとにExcelファイルに出力するVBAを運用しています。 'QName()という配列にユーザーが作成した全クエリ名が格納されています。 'Pathという変数にAccessファイルのフルパスが格納されています。 'Ename()という配列に作成するExcelファイルの名前が格納されています。 j = UBound(QName) For i = 0 To j 'Excelファイルを作成する DoCmd.TransferSpreadsheet acExport, 10, QName(i), Path & EName(i), True, "" Next Excelに出力した後、ファイルを開いて処理をするのですが、処理の都合で、繰り返しが偶数回目の時に、Excelファイルを作成し、奇数回目の時は、1つ前に作成したExcelファイルの先頭に新しいシートを作成する形で、出力したいです。 どのように修正すればよろしいでしょうか? 例: i = 0 ⇒ 新しくExcelファイルを作成する i = 1 ⇒ 0の時に作成したファイルを開いて、先頭に新しいシートを作成する形で出力する i = 2 ⇒ 新しくExcelファイルを作成する i = 3 ⇒ 2の時に作成したファイルを開いて、先頭に新しいシートを作成する形で出力する これをユーザーが作成したクエリ数だけ繰り返したいです。 ※1:ユーザーが作成したクエリ数は、偶数となっています。

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

  • ベストアンサー
  • iruyasu
  • ベストアンサー率37% (3/8)
回答No.1

i Mod 2 = 0 ⇒ 新しくExcelファイルを作成する i Mod 2 = 1 ⇒ 0の時に作成したファイルを開いて、先頭に新しいシートを作成す

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>VBAを運用しています ベテランのように書いているが、課題が起こるとすぐ質問し、回答コピペという状態ではね。 ーー https://oshiete.goo.ne.jp/qa/426358.html Access-VBAでExcelファイルを作成する https://oshiete.goo.ne.jp/qa/1437135.html アクセスからエクセルのシートを追加して、名前をつける方法 など、自分でまず真似て、やってみて、もう少し細部のことでで質問したら。 ーー 質問の前に、VBAに関し、WEB照会もやっていないようだが、それでは、周りにVBAのベテランが居ない時は、疑問を聞けなくて、先へ進めないだろう。本当はまだ、仕事にVBAを使うべきではないと個人的に思う。

関連するQ&A

  • Access VBA Excel エクスポート

    Access VBAにてExcel エクスポートの処理を記述しました。 現在の記述だと、出力対象のテーブル(クエリ)ごとに1つのファイルとなっており、ファイルの管理が大変なため、1つのExcelファイルで、複数シートに出力したいのですが、どこを修正すればよろしいでしょうか? ’出力対象のクエリ名が入っている配列の要素数(出力対象のクエリ数)を取得する j = UBound(QName) ’出力するクエリの分だけ繰り返す For i = 0 To j   ’同じファイル名のExcelファイルが見つかった場合 If Dir(Path & EName(i)) <> "" Then 'データ更新のため、見つかったファイルを削除する Kill Path & EName(i) End If   ’出力対象のクエリにデータ(レコード)が存在する場合 If Count(i) > 0 Then 'Excelファイルを再度作成する   ’Qname(i)が出力するクエリ名、Pathが出力先のパス、Ename(i)が出力ファイル名です。 DoCmd.TransferSpreadsheet acExport, 10, QName(i), Path & EName(i), True, "" End If End If Next

  • Access VBA クエリパラメーターについて

    Access VBA についてご質問させていただきます。 AccessVBAにてフォームを起動したときに、ユーザーで作成したクエリにおいて各クエリのデータ件数を取得するプログラムを作成いたしました。 '各クエリの件数をカウントする処理 Public Sub Data_Count() 'カウント用変数を宣言して、初期化する Dim i, j As Integer: i = 0: j = 11: b = 0: Dim rs As Recordset: Dim str(1) As String Dim Fname As Form: Set Fname = Forms!F99_メイン Dim mydb As Database: Set mydb = CurrentDb 'クエリ名・エクセル名用配列を初期化する Erase QName: Erase EName: Erase Count 'クエリの数だけ繰り返す For Each myqer In mydb.QueryDefs If Left(myqer.name, 1) = "Q" And Left(myqer.name, 3) <> "Q0_" Then 'クエリ名用変数の要素数を変更し、クエリ名を格納する ReDim Preserve QName(i): QName(i) = myqer.name 'エクセル用変数の要素数を変更し、エクセルファイル名を格納する ReDim Preserve EName(i): EName(i) = QName(i) & ".xlsx" '件数用配列の要素数を変更する ReDim Preserve Count(i) 'クエリを開く Set rs = CurrentDb.OpenRecordset(QName(i)) 'クエリのレコードが0件の場合 If rs.EOF Then 'クエリの件数を保存する Count(i) = 0 'クエリのレコードが1件以上の場合 Else 'クエリの最終行に移動してクエリ件数を保存する rs.MoveLast: Count(i) = rs.RecordCount End If End If rs.Close i = i + 1 End If Next End Sub 上記のコードを実行してみたところ、ユーザーで作成したクエリを開く際に、 実行時エラー'3061':パラメーターが少なすぎます。1を指定してください。というエラーが発生してしまいました。 どのように修正すればよろしいでしょうか?

  • ACCESS2002のエクスポートで・・・

    特に困ってはいないのですが不思議に思ったので質問します。 OS:WinXP Pro 環境:ACCESS2002およびEXCEL2002 1.ACCESSでクエリ「TEST1」をEXCELにエクスポートします。 2.エクスポートして作成されたEXCELファイルを開き、シート名「TEST1」を「TEST2」に変更します。 3.再度、ACCESSでクエリ「TEST1」を1.で作成されたEXCELファイルを指定してエクスポートすると「オブジェクト「TEST1」は存在します。置き換えますか?」旨のメッセージが表示されます。 指定したEXCELファイルにはシート「TEST1」は存在しないのになぜそのようなメッセージが表示されるのでしょうか?ちなみそのまま出力するとクエリ「TEST1」のデータはEXCELのシート「TEST2」に出力されます。

  • ACCESSからエクセルへのエクスポートについて

    はじめまして。 VB2000、Office2000の環境です。 (1)複数のクエリの内容を、フォームにあるボタンを押下すると、テンプレートのエクセルを   別名保存してそのエクセルに出力する (2)同一エクセル内に用意してある計算式(出力したデータを計算)が設定されているシートに   結果を表示 ※クエリ結果は日々変わります。 ※計算式の設定してあるシートはテンプレートに用意したいと思っています。 上記をボタンを押下すると自動的に(1)、(2)が実行され、デスクトップにエクセルが出力される といった機能を作っています。今現在はクエリの内容をエクセルに手動で貼り付けています。 出力は問題なくできたのですが、その後の計算処理の実装方法が分かりません。 出力は DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "クエリ(1)", DeskTopPath() & Format(Date, "yyyymmdd") & "_シート.xls", True で行っています。 クエリは(1)~(14)あり、別シートにそれぞれ出力しています。(計14シート) 該当するシートがないと、計算式のあるシートでエラーが出てしまいますし、 頭が痛いです。 このような要件を解決する手段は何かありますでしょうか? 当方勉強を始めたばかりで行き詰っております。 どうぞよろしくお願いいたします。

  • AccessからのExcelエクスポートについて

    お世話になります。 Access2010にてツールを作成し、データをExcelにてエクスポートしたいと考えております。 新規Excelファイルでエクスポートする分は問題無いのですが、既存のExcelファイルにエクスポートすることは可能なのでしょうか。 例えば、既存のExcelファイルの特定のセル(範囲)に出力するイメージです。 その範囲は表になっており、そこにデータが入ることによって、自動的にグラフを生成したいと考えております。 ご教授の程、宜しくお願い致します。

  • アクセス2007のエクスポートについて教えてください!

    アクセス2007の質問です。 マクロでクエリをエクセル形式で出力する方法を教えて下さい。 アクセス2003では「ワークシート変換」というアクションがあったと思います。この機能をアクセス2007で実施したいと考えています。簡単なフォームのボタンを押すと、クエリに定義した内容がデスクトップ等にエクセル形式でエクスポートするように作りたいのです。 ご存じの方どうぞよろしくお願いいたします。

  • accessからexcelへのエクスポート時のシート

    access2002 excel2002 現在accessのクロス集計クエリで各店舗の損益表を作成しフォームからの出力指示でexcelにエクスポートしています。店舗番号を抽出条件にして1店舗ずつ出力しています。 これを店舗番号を指定せずクエリを実行し全店舗分の損益データを店舗ごとのシートに出力するようにしたいのですが、そんなことはできないでしょうか。 店舗,項目 ,8/1 ,8/2 ,8/3 ... 0001,売上 ,10000,12000,13000 0001,原価 , 5000, 5000. 6900 0001,人件費, 4000, 4500, 5000 0002,売上 ,20000,21000,19000 0002,原価 , 9000, 8900. 9000 0002,人件費, 6000, 7000, 6000 上記クエリ結果を シート0001に 店舗,項目 ,8/1 ,8/2 ,8/3 ... 0001,売上 ,10000,12000,13000 0001,原価 , 5000, 5000. 6900 0001,人件費, 4000, 4500, 5000 シート0002に 店舗,項目 ,8/1 ,8/2 ,8/3 ... 0002,売上 ,20000,21000,19000 0002,原価 , 9000, 8900. 9000 0002,人件費, 6000, 7000, 6000 店舗ごとにクエリを作成すればできるような気がするのですが、店舗数が50以上あるのでどうにかひとつのクエリでできないものか考えたのですがどうしても分かりませんでした。 どなたかご存知の方がいらっしゃいましたらご教授願います。

  • ACCESSのクエリーからEXCELにエクスポート時のエラー

    WINDOWS ME上でACCESS 97を使っています。 ACCESSのクエリーをEXCELにエクスポートしています。 10個のクエリーを1つのファイルにエクスポートしているのでクエリー名のシートが10個ファイルにできます。そのEXCELのファイルを更新して毎月作成していくのですが、そのうちのいくつかのシートが上書きできません。まず「同じ名前がありますが名前を変更しますか?」という旨の確認がありそのはまま「はい」にするとすんなり上書きしてくれるシートと「同じ名前のシートが存在します」とエラー出て、データーを上書きできないシートが同じファイル内にあります。シートを削除してエクスポートすればエラーはかからないのですが、集計表シートと計算式をいれているのでその都度削除して計算式を再度作成していくのも大変です。なにか思い当たることがありますか?

  • アクセスからエクセルのテンプレートへの出力

    お世話になっております。 アクセス(クエリ)から テンプレートファイル(エクセル)へ ユーザー単位で出力するには どのようにすれば良いでしょうか? QRY_出力: ユーザー名|ユーザーID|商品|単価|数量|日付 という表示クエリがあり、 このクエリから ユーザー名毎(もしくはユーザーID毎)に テンプレートファイル(エクセル)の「出力Sheet」へ出力した上で、 [ユーザー名]_出力日.xlsx という名前で別名保存したいです。 ※商品×1のユーザーは1レコード  商品×2のユーザーは2レコード・・・の出力のイメージです。 初心者につき、つたない説明かもしれませんが、 ご教示のほどよろしくお願い致します。

  • Access VBA 新しいシート作成

    Access VBAにてExcelファイルを編集するプログラムを作成しています。 Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 '実行時バインディング Set AppObj = CreateObject("Excel.Application") '編集を実施するワークブックを開く 'PathにはExcelファイルのフルパス、ExfにExcelファイル名が格納されています。 Set WBObj = AppObj.WorkBooks.Open(Path & Exf) 'Excelアプリケーションを表示する AppObj.Visible = True ※各Excelファイルはシートが1つだけ存在します。 この処理の直後に『数値』という名称の新しいシートを左から2番目に作成したいのですが、どのように記述すればよろしいでしょうか?