エクセルVBA:個別値と小計を出力する
-
05-07-2019 - |
質問
次の形式のデータがあります。
Category Source Amount
Dues FTW $100
Donations ODP $20
Donations IOI $33
Dues MMK $124
並べ替え順序はありません。カテゴリはコンパイル時には不明です。VBA マクロで範囲を循環し、それぞれの小計を含む個別の値のリストを出力したいと考えています。上記のデータの場合、次のようになります。
Category Total Amount
Dues $224
Donations $55
これどうやってするの?また、上記のテーブルが更新されるたびにマクロを実行する方法はありますか、それともユーザーがボタンをクリックする必要がありますか?
解決
これを行うには、組み込みの Excel 機能を使用することもできます。ループする値が多数ある場合、ループには時間がかかり、問題が発生する可能性があります。
次のようなものは、ピボット テーブルの作成を開始する場合があります ( http://www.ozgrid.com/News/pivot-tables.htm)
Sub MakeTable()
Dim Pt As PivotTable
Dim strField As String
'Pass heading to a String variable
strField = Selection.Cells(1, 1).Text
'Name the list range
Range(Selection, Selection.End(xlDown)).Name = "Items"
'Create the Pivot Table based off our named list range.
'TableDestination:="" will force it onto a new sheet
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:="=Items").CreatePivotTable TableDestination:="", _
TableName:="ItemList"
'Set a Pivot Table variable to our new Pivot Table
Set Pt = ActiveSheet.PivotTables("ItemList")
'Place the Pivot Table to Start from A3 on the new sheet
ActiveSheet.PivotTableWizard TableDestination:=Cells(3, 1)
'Move the list heading to the Row Field
Pt.AddFields RowFields:=strField
'Move the list heading to the Data Field
Pt.PivotFields(strField).Orientation = xlDataField
End Sub
これは小計用です (ただし、私はピボット テーブルの方が好きです)http://msdn.microsoft.com/en-us/library/aa213577(office.11).aspx
編集:読み返してみて以下のような感想を持ちました。(コードを使用せずに) 別のシートにピボット テーブルを設定し、シートが選択されるたびにテーブルが更新されるように、ピボット テーブルのあるシートに次のコードを配置します。
Private Sub Worksheet_Activate()
Dim pt As PivotTable
'change "MiPivot" to the name of your pivot table
Set pt = ActiveSheet.PivotTables("MyPivot")
pt.RefreshTable
End Sub
編集#2シート上のすべてのピボットテーブルを更新しますhttp://www.ozgrid.com/VBA/pivot-table-refresh.htm
Private Sub Worksheet_Activate()
Dim pt As PivotTable
For Each pt In ActiveSheet.PivotTables
pt.RefreshTable
Next pt
End Sub
このリンクには、シート/ワークブック内のピボット テーブルを更新する方法に関する複数のオプションがあります。
所属していません StackOverflow