アクセスVBAからエクセルの操作

このQ&Aのポイント
  • アクセスVBAを使用してエクセルの操作方法について質問します。
  • エクセルへのデータ出力時に毎月のデータ件数が異なるため、VBAでピボットテーブルを自動作成する方法を教えてください。
  • 現在のVBAではデータ件数が固定なので使えません。どの部分を修正すればよいでしょうか?
回答を見る
  • ベストアンサー

アクセスVBAからエクセルの操作

おはようございます。 アクセスVBAを使用し作成しているのですが、ここ数 日悩んでしまっている事があります。ご教授頂ける と幸いです。宜しくお願い致します。 <悩み・相談> アクセス側からエクセルに出力させた際、オートにて、ピボットテーブルを作成しようと考えております。毎月のデータ件数が違う為(月毎にピボットテ ーブル作成のセル範囲が変わります)、どのように VBAを組めば良いのか悩んでいます。 今現状のVBは、下記の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'受注データ(確定)'!R1C1:R7231C31").CreatePivotTable TableDestination:="", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").PrintTitles = True ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("処理区分名", _ "地区", "集計コード", "病院名", "データ"), ColumnFields:="大分類名", PageFields:=Array("担当グループ" _ , "集計地区", "担当者", "中分類") With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("本・個") .Orientation = xlDataField .Position = 1 End With 毎月のデータ件数が、7231で終われば良いのですが、毎月データ件数がランダムな為、上のVBでは使えないですよね??データ件数に関係なく、ピボットテーブルを自動で作成するには、どこをどのように変えたら宜しいでしょうか?? お手数ですが、ご教授頂けると幸いです。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

私は、少し、誤解していた部分があったのですが、最初にご質問で書かれたコードは、Excelの自動記録マクロのもので、これをAccessに利用できないか、という類の内容だと思います。 ActiveWorkBook は、Excel側のもので、Access 側のものではありません。ExcelのApplicationのオブジェクトとブックのオブジェクトを作って、それからコントロールさせます。 >アクセス側からエクセルに出力させた際、 Access のVBAのコードで、Excelを開けたり、データを出力するコードはおできになっているのですか?それを、教えていただきたいのですが。 そうでないのでしたら、Access からのコントロールは止めてしまって、そのまま、#1 さんのおっしゃるように、後は、Excel側に任せてしまう方法ぐらいしかないのですが。 もちろん、私のお教えした部分も生きます。

yoshi7292
質問者

お礼

大変参考になりました。有難うございました。 今後も色々と勉強していこうと思っております。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>ほとんどエクセルから貼り付けたものでして、一体何の処理をしているのかが、さっぱりでして。。。 それで、Access 側のモジュールに貼り付けて、とりあえず動いているのですか? そうでないなら、Access側で、ピボットテーブルを作ってしまったほうが早いのではありませんか? 内容的には、ほぼ同じでしょうから。 唐突に、 ActiveWorkbook.PivotCaches.Add.... と、出てきていますが、下記の場合は、一応、先の回答は、以下のように書き換えるのですが……。 '-------Sub ○○○ --------------- Dim strDataRng As String ・ ・ '(ワークブックがOpenされて) strDataRng = ActiveWorkbook.Worksheets("受注データ(確定)").Range("A1").CurrentRegion.Address(, , xlR1C1) ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'受注データ(確定)'!" & strDataRng).CreatePivotTable TableDestination:="", _   TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10   ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)   ActiveSheet.Cells(3, 1).Select ・ ・ '------End Sub ---------------

yoshi7292
質問者

補足

有難うございます。早速書き直してみました。 実行をしますと、実行時エラー1004「worksheetクラスのpivottableプロパティを取得できません」のエラーが出てしまいました。 デバッグをしてみたところ、下記構文でエラーになっているようです。 ActiveSheet.PivotTables("ピボットテーブル.PrintTitles = True 教えて頂いた構文の直ぐ下に記述しているのですが、何か問題があるのでしょうか? お手数ですが、宜しくお願い致します。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

変わるところは、以下だけですか? '受注データ(確定)'!R1C1:R7231C31" strDataRng = Worksheets("受注データ(確定)").Range("A1").CurrentRegion.Address(, , xlR1C1) データソートには、"'受注データ!" & strDataRng とでもすればよいのでは?

yoshi7292
質問者

補足

有難うございます。 教えて頂いた部分を変更したいのですが、なにぶんVB初心者な者でして、どこをどのように変えたら良いのかが。。。先程私が書いたVBも。ほとんどエクセルから貼り付けたものでして、一体何の処理をしているのかが、さっぱりでして。。。 お手数でなければ、教えて頂きたいのですが。

  • VT250F
  • ベストアンサー率30% (26/84)
回答No.1

アクセスVBAですべてさせようとするのも手ですが、 アクセスはエクセルのVBAを起動するだけで、 後はエクセルVBAにさせると言う手もあります。 エクセルでツール-マクロの記録で、 データの一番最後に位置づけるやり方を、 VBAにしてみると、ある程度類推できると思います。 きちんとVBAにしてくれない場合もあるので、 マクロのヘルプを見てみましょう。

yoshi7292
質問者

補足

有難うございます。 私、正直VB初心者で、何がなんだか、さっぱり分からない状態でVBを書いています。先程のも、エクセルからそのまま貼り付けたものでして。。。 何をどのように処理したら良いのか、さっぱり??な状態です。 お手数でなければ、教えて頂きたいのですが。。。

関連するQ&A

  • Excel VBA:

    A1~AB11542 (先頭はタイトル行) の表をマクロでピボットテーブルを作りたいです。データを追加して範囲が変わっても、ピボットテーブルの範囲が変わってくれません。下記のマクロの意味が分からないのですが、どう修正すればいいのでしょうか。お願いします。 Range("A1").Select Selection.CurrentRegion.Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'200804~累計'!R1C1:R10501C28").CreatePivotTable TableDestination:="", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveWorkbook.ShowPivotTableFieldList = True With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入先名称") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入検収月") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("合価"), "合計 / 合価", xlSum ActiveSheet.Name = "月別集計" ActiveWorkbook.ShowPivotTableFieldList = False

  • Excelマクロ ピボットテーブル シート名指定

    お世話になります。 マクロでピボットテーブルを作成しようと思い、一連の動作をマクロ記録しましたところ下記のコードが記録されました。動作は問題ないのですが、ピボットテーブルが作成されるシート名や場所が指定できません。 出来れば、ピボットテーブルを作成するシート名は"ピボット"にして一番右端に配置したいのですが下下記のコードのどこを直せば(または追加)よいのか、どなたかご教授いただけますでしょうか? ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R15C4").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("納品日").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("地区").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").AddFields RowFields:=Array("納品日", "地区" _ ), ColumnFields:="商品" ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("出荷数量").Orientation = _ xlDataField ActiveWorkbook.ShowPivotTableFieldList = True よろしくお願い致します。 環境 Windows XP SP3 Excel2003

  • Excel マクロ アクティブシートの指定について

    こんにちは。Excelでマクロを作成しています。あるファイルを開きマクロを実行すると、日々エクスポートしているExcelファイルのシートが開き、自動的にそのシートにピボットテーブルを実行し集計するマクロを作成しています。ファイルの指定はファイル名が毎日日付のファイル名(例:02-12等)になるので、[ファイルを開く]ダイアログを表示させ、そこから指定することにしました。ただ、シート名もファイル名と同じなのですが、どうしてもそのシート名でしか作成できません。現在アクティブなシートにピボットを実行するようにするには、どうすればいいでしょうか。 下記に作成したVBを記載しておきます。 Fname = Application.GetOpenFilename(FileFilter:="Excel ファイル (*.xls), *.xls") ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'02-12'!R1C1:R91C23").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル3", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル3").AddFields RowFields:=Array("所属名", _ "受付担当者") ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("状況").Orientation = _ xlDataField ・・・ 上記の02-12の部分がシート名になるのですが、このシート名は毎日変化していきます(次の日は、02-13 など)。どのように作成すればいいでしょうか。 よろしくお願いします。

  • マクロでピボットテーブルを行う方法

    マクロ初心者です。よろしくお願い致します。 マクロでピボットテーブルにて集計を行いたいと思っています。 コマンドボタン1発で以下の全ての動作を行いたいです。 ■動作詳細■ [OK]コマンドボタンで指定したファイルを開く。 [OK]集計しやすいようにファイル内のデータを加工。 [NG]指定して開いたファイル上でピボットテーブル集計ができない。 ■NG要因として■ 指定して開いたファイルのSheet1上のデータをピボットテーブル新規作成でSheet2に作成するので、集計する元のデータの場所(Sheet1)をマクロ上に記載する必要があると思うのですが、うまくいきませんでした。 どなたかお分かりになる方がいらっしゃいましたらご助言いただければと思います。よろしくお願いします。 ■作成マクロ■ ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "test01!C1:C8").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("コード") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("色") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("売上"), "データの個数 / 売上数量", xlCount 一度、作成したピボットテーブルのデータをマクロにコピーしてコマンドボタンにペーストしました。 それによって参照してあるセルの位置もズレてしまったのでしょうか? どこを直せばよいのか分からなくなってしまいました。 よろしくお願いいたします。

  • マクロでピボットテーブルを作成したい

    こんばんは。マクロの自動記録を使って、ピボットテーブルを作成したのですが、記録した時のシート名とデータ範囲で記録されてしまいます。アクティブシートのデータがある範囲をピボットテーブルにしたい時は、どうすれば良いでしょうか? 以下のコードが自動記録で作成したコードです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "シート名!R1C1:R1000C30").CreatePivotTable TableDestination:= _ "", TableName:="ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品番号") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品名 ") .Orientation = xlRowField .Position = 2 End With Range("A9").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品番号").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("数量 "), "データの個数 / 数量 ", xlCount With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("発送日 ") .Orientation = xlPageField .Position = 1 End With Range("A1").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("発送日 ").Orientation = _ xlHidden With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("希望時期") .Orientation = xlColumnField .Position = 1 End With

  • VBAの質問です

    ピボットテーブルを作成するには、 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "copy!R5C1:R128C27").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False Range("F13").Select みたいにしますよね。(記録しただけです。) それで、テーブルを作る際に参照するデータ(上の例ではSourceData:="copy!R5C1:R128C27"の部分にあたります)を、固定された範囲ではなくて、そのときどきで与えられたデータによってフレキシブルに変えてくれるようにしたいんです。 ピボットテーブルを作成するときには、データ範囲のどこかのセルを選択した状態で、「データ→ピボットテーブルの…」を選ぶだけでいいですよね。 そんな感じで、僕の場合は、R128の部分を、その時のデータによって変わってくれるようにしたいんです。currentregionとか使って行の数を数えて、変数を定義してそれに格納して…とかやってみたんですが、結局SourceData:="copy!R5C1:R128C27"のところをどう書き直せばよいのか分かりません。 アドバイスよろしくお願いします。説明が分かりづらくて申し訳ありません。

  • ご質問です。素人です。お願いします。

    ピボットテーブルを作ったマクロで、新規ワークシートに作成する文はどこですかね?教えて下さい。 Sub 担当者名別売上() ' ' 担当者名別売上 Macro ' マクロ記録日 : 2008/2/25 ユーザー名 : aaaaaa ' ' 集計 = MsgBox("担当者別に売上の降順にしますか?", vbYesNo) If 集計 = vbYes Then ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "売上データ!R1C1:R255C6").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("担当者名") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("売上額"), "合計 / 売上額", xlSum Range("B5").Select Selection.Sort Key1:="R5C2", Order1:=xlDescending, Type:=xlSortValues, _ OrderCustom:=1, Orientation:=xlTopToBottom, SortMethod:=xlPinYin Range("B5").Select Sheets("売上データ").Select Range("A1").Select End If End Sub

  • ピボットテーブルをマクロで行なうには

    以下3行目が項目でデータレコードが4~588行目迄入っています。(行数は毎回変わります) これをピボットテーブルで 縦列に"分類" 横行に"月" フィールドに"受注額(合計)" としたく以下マクロ記録しましたが次に実行しようとするとうまくいきません。 参考書読むとActiveSheetとEnd(xlUp)を使うのかなと思えたのですが 具体的にどのようしたら良いのか宜しく御願いします。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'Aシート'!R3C1:R588C12").CreatePivotTable _ TableDestination:="", TableName:="ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1") .DisplayNullString = False .RowGrand = False .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="分類", _ ColumnFields:="月" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("受注額(合計)") .Orientation = xlDataField .NumberFormat = "#,##0_ ;[赤]-#,##0 " End With End Sub

  • Excel マクロ ピボットテーブル範囲選択

    マクロで、ピボットテーブルでの範囲のコーディングの仕方について、どなたかどうぞ教えてください。 列・行とも行が毎回異なります。 どのようにしたら、毎回異なる範囲を、「SourceData:=」に反映させることが出来ますか? マクロ初心者ですが、なんとか作業効率をUPさせたいと思っています。 どうぞよろしくお願い致します。 自動作成されたVBAは以下の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R3C2:R1767C52").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False

  • Excel VBAの自動生成VBAでエラーが発生?

    ' ↑ 'この上にピポットテーブルを作る為のデータをSheetに生成し '下記でそのSheetに名前を付けてピポットテーブルを作成するVBA Dim wk As String wk = Application.InputBox("シート名を入力ください") If wk <> "False" Then ActiveSheet.Name = wk Else MsgBox "キャンセルされました。" Exit Sub End If Sheets.Add MsgBox "選択したシート名は" & wk & "です。" '-------------------------------------------------------------------------------------------------------------------- 'この中でエラーメッセージが出てしまっています。 'どこがいけないのでしょうか? ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ wk & "!R1C1:R95C18", Version:=xlPivotTableVersion15).CreatePivotTable _ TableDestination:="Sheet1!R3C1", TableName:="ピボットテーブル1", DefaultVersion _ :=xlPivotTableVersion15 '------------------------------------------------------------------------------------------------------------------- Sheets("Sheet1").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("UserName") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("作業時間"), "合計 / 作業時間", xlSum ActiveSheet.PivotTables("ピボットテーブル1").CompactLayoutRowHeader = "UserName" Rows("1:2").Select Selection.Delete Shift:=xlUp Range("C16").Select Sheets("Sheet1").Select Sheets("Sheet1").Name = "名別"

専門家に質問してみよう