
A列
1 果物
2 りんご
3 みかん
4 みかん
5 りんご
6 メロン
7 メロン
8 ぶどう
9 りんご
10 みかん
11 りんご
|
|
以下名称が続きます
ExcelのSheet1にある上記のようなデータを、Sheet2のA1に対して下記のような形式で
出力するのをマクロ化したいと考えております。
果物 集計
ぶどう 1
みかん 3
メロン 2
りんご 4
総計 10
通常通りピポットテーブルを行うのをマクロで記録した場合に、
下記のようになりますが、上手く実行できません。
Sub Macro4()
Columns("A:A").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!C1").CreatePivotTable TableDestination:="[Book1.xls]Sheet2!R1C1", _
TableName:="ピボットテーブル3", DefaultVersion:=xlPivotTableVersion10
With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("果物")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("ピボットテーブル3").AddDataField ActiveSheet.PivotTables( _
"ピボットテーブル3").PivotFields("果物"), "データの個数 / 果物", xlCount
Range("D6").Select
End Sub
列の名称は“果物”以外でも実行でき、A列の全てのデータをピポットテーブルで
集計できるようにしたいのですが、初心者のためなかなか上手く実行できません。
どなたか教えていただけますと幸いです。
No.2ベストアンサー
- 回答日時:
さて、汎用性を持たせるためにここから修正していくわけですが、
それには「変数」というものについて理解しておいたほうが良いです。
変動する範囲に対して柔軟に対応する事ができ、
『列の名称は“果物”以外でも実行』できるようにしたりもできます。
またはWithステートメントについても理解しておいたほうが良いです。
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
簡単な例。
Sub test1()
Dim rng As Range
With ActiveWorkbook
With .Sheets("Sheet1")
Set rng = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
End With
End With
Application.Goto rng
Set rng = Nothing
End Sub
アクティブブックのSheet1のA1からA列最終データまでを取得するサンプルです。
これを使ってピボット元データを、一旦、Range型変数に入れたほうが判り易いです。
ついでにピボットの作成先も前もって指定したほうが判り易いです。
Sub try()
Dim data As Range '元データ範囲
Dim dest As Range 'Pivot作成先
Dim pvt As PivotTable
With ActiveWorkbook
With .Sheets("Sheet1")
Set data = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
End With
'作成先をSheet2に限定するなら『.Sheets.Add』を『.Sheets("Sheet2")』に。
'その場合はSheet2の既存データを事前にクリアしておいたほうが良いです。
Set dest = .Sheets.Add.Range("A1")
Set pvt = .PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:=data.Address(external:=True) _
).CreatePivotTable(TableDestination:=dest)
End With
'以降は作成後のPivotTableに対する処理
'列フィールド
pvt.AddFields RowFields:=data.Item(1).Value
'データフィールド
With pvt.PivotFields(data.Item(1).Value)
.Orientation = xlDataField
.Function = xlCount
End With
Set pvt = Nothing
Set dest = Nothing
Set data = Nothing
End Sub
VBEウィンドウからマクロを実行する時、
コード内で[F8]キーを押す事で1ステップずつ実行する事ができますから、
ワークシート上の動きも確認しながら理解に努めてください。
No.3
- 回答日時:
失礼..
> '列フィールド
> pvt.AddFields RowFields:=data.Item(1).Value
行フィールド..の間違いでした..orz
No.1
- 回答日時:
現在のコードを取り敢えず実行できるようにする最低限の修正にとどめるなら、
そのBookが[Book1.xls]だとして、
Sheet1のA列にデータがある場合、Sheet2を選択して
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!A:A").CreatePivotTable TableDestination:="[Book1.xls]Sheet2!R1C1", _
TableName:="ピボットテーブル3", DefaultVersion:=xlPivotTableVersion10
With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("果物")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("果物")
.Orientation = xlDataField
.Function = xlCount
End With
このように修正すれば動きます。
マクロ記録で
SourceData:= "Sheet1!C1"
と記録されたものはR1C1形式なのですが、
その記録されたマクロを実行する時にはA1形式だと判断されます。
つまりC1セル単独だと判断されるのでエラーになるわけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) excel ピポットテーブルの更新について 1 2022/05/13 16:12
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
evcel VBAについて
-
Excelのマクロについて教えてく...
-
列から特定の文字列検索→該当以...
-
縦型カレンダーを横型にできま...
-
オートフィルターの複数条件検...
-
文字を変換するマクロ
-
エクセルで行を挿入して小計合...
-
各個体に対する平均値の自動計...
-
エクセルのデータがない行には...
-
重複を除いて抽出
-
vbaで最終行に張り付け
-
エクセルマクロでグループごと...
-
同一値が連続している列の削除
-
ピポットテーブルのマクロについて
-
マクロの記述について
-
ExcelVBA特定の列にデータがあ...
-
Excel マクロ 平均
-
VBAの行削除について
-
【エクセルマクロ】シート内の...
-
【至急】Excel 同一人物の情報...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
Excel VBAでオートフィルタで抽...
-
数値に見えるものはすべて数値...
-
VB.net
-
列から特定の文字列検索→該当以...
-
エクセルで空白行を削除する ...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
【VBA】条件に一致しない行を削...
-
各個体に対する平均値の自動計...
-
エクセルのVBAで指定した行数の...
-
EXCEL VBAでA列にある空白行よ...
-
VBAでの重複データに色付け
-
空白を複数行一気に挿入するには?
-
エクセルで階層図を作る方法
-
vbaエクセルマクロについて she...
-
【至急】Excel 同一人物の情報...
-
Excel97 指定した行だけマク...
おすすめ情報