以下に示すように、結果をExcelに生成するSharperlightレポートを介してデータテーブルを作成しました:-
私がやりたいことは、データのすべてのカテゴリを小計するマクロを開発することです。常に列 G ~ J になる以外に、テーブルの長さのサイズは決まっていません。
このようにして、ユーザーが横のメニューを使用してテーブルを更新すると、マクロを実行して各カテゴリの合計 1 行をすばやく取得できるようになることを願っています。
誰でもこれを手伝ってもらえますか???
以下に示すように、結果をExcelに生成するSharperlightレポートを介してデータテーブルを作成しました:-
私がやりたいことは、データのすべてのカテゴリを小計するマクロを開発することです。常に列 G ~ J になる以外に、テーブルの長さのサイズは決まっていません。
このようにして、ユーザーが横のメニューを使用してテーブルを更新すると、マクロを実行して各カテゴリの合計 1 行をすばやく取得できるようになることを願っています。
誰でもこれを手伝ってもらえますか???
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 ダウンで表示されます。こんな感じ(サンプル版)