- ベストアンサー
複数シート、計算範囲が可変でのピボットテーブルマクロ
- 初めてのマクロで困っています。エラーメッセージは、実行時エラー '13': 型が一致しません。すみませんが、どなたかご指摘お願いします。
- マクロの目的は、複数のシートで計算範囲が可変のピボットテーブルを作成することです。
- マクロの途中で取得したテキストファイルのデータを使用してピボットテーブルを作成しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 複数シートからのピボットのSourceDataは、 R1C1形式アドレスの『配列』である事が必要のようです。 文字列をArray()に入れるのではなく、素直に配列に格納したほうが良さそう。 Sub sample() Dim ws As Worksheet 'For Each...Next WorksheetsLoop用 Dim r As Range '検索結果セル格納用 Dim rs As Range '各Sheetピボット元データ範囲格納用 Dim v As Variant 'アドレス,Sheet名格納用Array Dim x() As Variant 'Arrayをさらに格納する配列 Dim i As Long '該当Sheetカウントアップ用(配列サイズ変更) ActiveSheet.UsedRange.Clear For Each ws In Worksheets With ws If Not ws Is ActiveSheet And .Name <> "template" Then Set r = .Cells.Find(What:="業務名", _ After:=.Cells(2, 2), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ MatchByte:=False) If Not r Is Nothing Then Set rs = .Range(.Cells(r.Row, 3), .Cells(Rows.Count, 19).End(xlUp)) v = VBA.Array(rs.Address(1, 1, xlR1C1, True), .Name) ReDim Preserve x(0 To i) x(i) = VBA.Array(v(0), v(1)) i = i + 1 Set r = Nothing Set rs = Nothing End If End If End With Next ws 'ピボット計算------- With ThisWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, _ SourceData:=x) _ .CreatePivotTable(TableDestination:=Range("A11"), _ TableName:="ピボットテーブル1") .DataFields(1).Function = xlSum End With End Sub ちなみに検索範囲がC列限定なら、データ範囲を確定させる部分は下記でも。 Set r = .Columns("C").Find(What:="業務名", _ After:=.Cells(3), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ MatchByte:=False) Set rs = .Range(r, .Cells(Rows.Count, 19).End(xlUp))
お礼
pauNedさん こんばんは。 できました! ありがとうございました! データ型としてrangeを指定したり、VBA.Arrayなどは 本には載っていないし、初心者には難しい部分だったようですね。 大変勉強になりました。 教えていただいたソースは全て理解はまだできていませんが じっくり考えて理解して使えるようになりたいと思います。 自分の書いたソースは回りくどく、美しくありませんでしたが こんなにすっきりと簡潔にできるのですね。 本当に、どうもありがとうございました。