[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロの省略』(フムフム)
下記は、マクロの記録等でピボットテーブルを処理したものですが、
えらく冗長なマクロなので短くまとめることは可能でしょうか?
特に、.Subtotals = Array(False, False, False, False, False,
False, False, False, False, False, False, False)が、
みづらいのですが・・・
Sub 注残一覧まとめ()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"手配残数抽出!R2C1:R5000C13").CreatePivotTable
TableDestination:=Sheets("注残一覧まとめ").Range("B2"), _
TableName:="ピボットテーブル4"
Sheets("注残一覧まとめ").Select
With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("I_指示先番号")
.Orientation = xlRowField
End With
With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("I_品目番号")
.Orientation = xlRowField
.Subtotals = Array(False, False, False, False, False, False, False,
False, False, False, False, False)
End With
With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("I_手配日")
.Orientation = xlRowField
.Subtotals = Array(False, False, False, False, False, False, False,
False, False, False, False, False)
End With
With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("I_手配数")
.Orientation = xlRowField
.Subtotals = Array(False, False, False, False, False, False, False,
False, False, False, False, False)
End With
With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("I_受入数")
.Orientation = xlDataField
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("データの個数 : I_受入数").Function = xlSum
End With
With ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("I_手配番号")
.Orientation = xlRowField
.Subtotals = Array(False, False, False, False, False, False, False,
False, False, False, False, False)
End With
Application.CommandBars("PivotTable").Visible = False
Range("C1").Value = Date & " NETIS更新作成"
With Range("C1").Font
.Bold = True
.Size = 14
.ColorIndex = 3
End With
ActiveWindow.SplitRow = 3
ActiveWindow.FreezePanes = True
End Sub
マクロは、環境を整えないと動かせません。 しかし、コードから環境を想像して整えるのは大変です。
どの様なデータがあるのか。 どの様なピボットテーブルを作成したのか。 どの様な結果になればよいのか。
書いて於いた方が、良いと思いますよ。
想像で書くと .Subtotals = Array(False, False,・・・ の部分は .Subtotals(1) = False に出来るんじゃないかと思います。
後は
「ActiveSheet.PivotTables("ピボットテーブル4")」
が何度も出てきているので、Wiht でまとめて仕舞うと
少しはすっきりするかもしれません。
上手く行くかどうかは分かりませんけどね。
(HANA)
こんにちは。かみちゃん です。
HANAさんからコメントがついていますが、検討していましたので、アップさせていただきます。
> マクロの記録等でピボットテーブルを処理したものですが、 えらく冗長なマクロなので短くまとめることは可能でしょうか
以下のような感じではいかがでしょうか? あまり短くはなっていませんが、多少は、すっきりさせたつもりです。
Sub 注残一覧まとめ2()
Dim WS1 As Worksheet
Set WS1 = Sheets("注残一覧まとめ")
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"手配残数抽出!R2C1:R5000C13").CreatePivotTable(TableDestination:=WS1.Range("B2"))
With .PivotFields("I_指示先番号")
.Orientation = xlRowField
.Subtotals(1) = False
End With
With .PivotFields("I_品目番号")
.Orientation = xlRowField
.Subtotals(1) = False
End With
With .PivotFields("I_手配日")
.Orientation = xlRowField
.Subtotals(1) = False
End With
With .PivotFields("I_手配数")
.Orientation = xlRowField
.Subtotals(1) = False
End With
With .PivotFields("I_手配番号")
.Orientation = xlRowField
.Subtotals(1) = False
End With
.PivotFields("I_受入数").Orientation = xlDataField
With .PivotFields("データの個数 : I_受入数")
' With .PivotFields("データの個数 / I_受入数")
.Function = xlSum
End With
With WS1.Range("C1")
.Value = Date & " NETIS更新作成"
With .Font
.Bold = True
.Size = 14
.ColorIndex = 3
End With
End With
End With
ActiveWindow.SplitRow = 3
ActiveWindow.FreezePanes = True
End Sub
なお、上記は、環境を作って動作確認していますが、うまく動作しない場合は、 HANAさんもおっしゃっているとおり
> どの様なデータがあるのか。
を説明していただきたいと思います。
To,HANAさん
> 想像で書くと > .Subtotals = Array(False, False,・・・ > の部分は > .Subtotals(1) = False > に出来るんじゃないかと思います。
このような書き方ができるのですね。 非常に勉強になりましたので、勝手ながら、使わせていただきました。 ありがとうございます。
(かみちゃん) 2009/08/24 22:22 22:27 追加/修正
こんにちは。 以下のような処理では如何でしょうか? 前段に"注残一覧まとめ"シートのデータを削除する処理を加えています。
ピボットテーブルを名前で指定して処理しないのであれば , TableName:="ピボットテーブル4" を省略することもできます。
Sub 注残一覧まとめ改造()
Dim PvtFldName As Variant
With Worksheets("注残一覧まとめ")
.Cells.Clear
.Cells.ColumnWidth = .StandardWidth
Windows(.Index).SplitRow = 0
Windows(.Index).FreezePanes = False
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:="手配残数抽出!R2C1:R5000C13").CreatePivotTable( _
TableDestination:=.Range("B2"), TableName:="ピボットテーブル4")
Application.CommandBars("PivotTable").Visible = False
For Each PvtFldName In Array("I_品目番号", "I_手配日", "I_手配数", "I_手配番号")
.PivotFields(PvtFldName).Subtotals(1) = False
Next PvtFldName
.AddFields RowFields:=Array("I_指示先番号", "I_品目番号", "I_手配日", "I_手配数", "I_手配番号")
With .PivotFields("I_受入数")
.Orientation = xlDataField
.Caption = "データの個数 : I_受入数"
.Function = xlSum
End With
End With
With .Range("C1")
With .Font
.Bold = True
.Size = 14
.ColorIndex = 3
End With
.Value = Date & " NETIS更新作成"
End With
Windows(.Index).SplitRow = 3
Windows(.Index).FreezePanes = True
.Activate
End With
End Sub
(OtenkiAme)
> .Subtotals(1) = False で、だいぶみやすくなりました。 無事に動きました。
(HANA)、(かみちゃん)、(OtenkiAme) さんいろいろありがとうございます。 これからも勉強しますのでなにかあったらお願いします。
(フムフム)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.