1

以下に示すように、結果をExcelに生成するSharperlightレポートを介してデータテーブルを作成しました:-

ここに画像の説明を入力

私がやりたいことは、データのすべてのカテゴリを小計するマクロを開発することです。常に列 G ~ J になる以外に、テーブルの長さのサイズは決まっていません。

このようにして、ユーザーが横のメニューを使用してテーブルを更新すると、マクロを実行して各カテゴリの合計 1 行をすばやく取得できるようになることを願っています。

誰でもこれを手伝ってもらえますか???

4

1 に答える 1

1

sheet1タブを右クリック>コードを表示
sheet1ビューコード
このコードを貼り付けます

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 4 Then
        If Target.Row = 4 Or Target.Row = 5 Or Target.Row = 6 Then Totals
    End If
End Sub

module次に、に右クリックSheet1を追加Project ExplorerしてVBE windowからInsert > Module
、このコードを貼り付けます

Sub Totals()

    Range("C10:D" & Range("C10:C" & Rows.Count).End(xlDown).Row).ClearContents
    Dim startAtRow As Long
    startAtRow = 10 ' Set starting row
    Dim lr As Long, i As Long, j As Long
    lr = Range("J" & Rows.Count).End(xlUp).Row
    ReDim arr(lr - 4) As String
    For i = 5 To lr
        arr(i - 5) = Range("J" & i).Value
    Next i
    Dim arr2() As String
    arr2 = arr
    RemoveDuplicate arr
    For i = LBound(arr) To UBound(arr) - 1
        Range("C" & (i + startAtRow)).Value = arr(i)
        For j = LBound(arr2) To UBound(arr2) - 1
            If arr(i) = arr2(j) Then
                Range("D" & (i + startAtRow)).Value = Range("D" & i + startAtRow).Value + Range("I" & (j + 5)).Value
            End If
        Next j
    Next i

End Sub

Private Sub RemoveDuplicate(ByRef StringArray() As String)
    Dim lowBound$, UpBound&, A&, B&, cur&, tempArray() As String
    If (Not StringArray) = True Then Exit Sub
    lowBound = LBound(StringArray): UpBound = UBound(StringArray)
    ReDim tempArray(lowBound To UpBound)
    cur = lowBound: tempArray(cur) = StringArray(lowBound)
    For A = lowBound + 1 To UpBound
        For B = lowBound To cur
            If LenB(tempArray(B)) = LenB(StringArray(A)) Then
                If InStrB(1, StringArray(A), tempArray(B), vbBinaryCompare) = 1 Then Exit For
            End If
        Next B
        If B > cur Then cur = B: tempArray(cur) = StringArray(A)
    Next A
    ReDim Preserve tempArray(lowBound To cur): StringArray = tempArray
End Sub

ユーザーが D4、D5、D6 の値を変更するたびに、結果が更新されます。カテゴリは C10 ダウンから表示され、合計は D10 ダウンで表示されます。こんな感じ(サンプル版)
結果

于 2013-06-13T12:45:18.720 に答える