1

我通过Sharperlight报告创建了一个数据表,将其结果生成到excel中,如下所示:-

在此处输入图像描述

我想要做的是开发一个宏,它将对数据的所有类别进行小计。除了总是 G - J 列之外,没有确定的表长度大小。

这样,我希望当用户使用侧面的菜单刷新表格时,他们将能够运行宏来快速获得每个类别的总行数。

有人能帮忙吗???

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然后拍下这段代码Sheet1Project ExplorerVBE windowInsert > 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 回答