質問

次の形式のデータがあります。

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

このリンクには、シート/ワークブック内のピボット テーブルを更新する方法に関する複数のオプションがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top