Vba 按文本值列出的Excel数据摘要-类似于透视表

Vba 按文本值列出的Excel数据摘要-类似于透视表,vba,excel,excel-formula,Vba,Excel,Excel Formula,不知是否有人能给我指出正确的方向。我有一个200000多行的电子表格示例如下。(零件号为字母数字) 我正在努力做到这一点 Area Code Table Chair Bookcase Shelf 1 1 2 3,7 2 4

不知是否有人能给我指出正确的方向。我有一个200000多行的电子表格示例如下。(零件号为字母数字)

我正在努力做到这一点

Area Code         Table            Chair            Bookcase            Shelf
1                 1                2                3,7
2                 4                                                     5
3                                  3,8
我认为Pivot表可能是理想的解决方案,但我已经尝试过了,不幸的是,我看不到有可能将实际文本值添加到sum区域。我猜唯一的出路是某种宏观经济


两个月过去了,如果有人有任何想法,我仍然需要帮助,我已经完成了任务,但我相信可能有更快的方法来实现这一点。解决方案是从下载Ablebits合并行程序

这允许我根据区号连接零件号,因此在我的主表中,我现在有了区号3。零件号=3、8,描述=椅子

然后,我插入了一个新列,并为所有内容提供了一个唯一的数字标识符

之后,我运行了一个数据透视表,将区号作为垂直值,将描述作为水平值,并在计算字段中将其设置为新的唯一标识符字段,并将其设置为最小值、最大值或乘积

然后,我复制数据透视表并将其粘贴到一个新的表中,并对每个唯一标识符进行查找,以获得作为文本值的实际零件号-这是一个耗时的部分,因为它需要70个VLookups

我仍然有兴趣听到任何更快的方法来做这件事

谢谢。

子测试仪()
Sub Tester()
    Dim rngIn, rngOut

    Set rngIn = Sheets("Data")
    Set rngOut = Sheets("Pivoted")

    rngOut.CurrentRegion.ClearContents

    PivotRange rngIn, 2, 3, 1, rngOut
End Sub


Function PivotRange(rngIn, rowCol, catCol, valCol, rngOut)
    Dim dictRows, dictCols, r, nR, nC, arr, kR, kC

    Set dictRows = CreateObject("scripting.dictionary")
    Set dictCols = CreateObject("scripting.dictionary")

    arr = rngIn.Value

    Application.ScreenUpdating = False
    rngOut.Value = arr(1, rowCol) 'row header

    For r = 2 To UBound(arr, 1) 'skip column headers
        kR = arr(r, rowCol)
        kC = arr(r, catCol)
        If Not dictRows.exists(kR) Then
            nR = nR + 1
            dictRows.Add kR, nR
            rngOut.Offset(nR, 0).Value = kR
        End If
        If Not dictCols.exists(kC) Then
            nC = nC + 1
            dictCols.Add kC, nC
            rngOut.Offset(0, nC).Value = kC
        End If
        With rngOut.Offset(dictRows(kR), dictCols(kC))
            .Value = .Value & IIf(.Value <> "", ",", "") & arr(r, valCol)
        End With
    Next r

End Function
昏厥 设置rngIn=图纸(“数据”) Set rngOut=图纸(“旋转”) rngOut.CurrentRegion.ClearContents 数据透视范围rngIn,2,3,1,rngOut 端接头 函数数据透视范围(rngIn、rowCol、catCol、valCol、rngOut) Dim dictRows、dictCols、r、nR、nC、arr、kR、kC Set dictRows=CreateObject(“scripting.dictionary”) Set dictCols=CreateObject(“scripting.dictionary”) arr=rngIn.Value Application.ScreenUpdating=False rngOut.Value=arr(1,rowCol)'行标题 对于r=2到UBound(arr,1)'跳过列标题 kR=arr(r,rowCol) kC=arr(r,catCol) 如果没有。存在(kR),则 nR=nR+1 记录行。添加kR,nR rngOut.偏移量(nR,0)。值=kR 如果结束 如果不存在目录(kC),则 nC=nC+1 dictCols.添加kC,nC rngOut.偏移量(0,nC).值=kC 如果结束 带rngOut.Offset(dictRows(kR)、dictCols(kC)) .Value=.Value&IIf(.Value“,”,“,”)&arr(r,valCol) 以 下一个r 端函数
我已经下载并安装了Ablebits Combine行,它允许我根据区号连接零件号,因此在我的主表中,我现在有了区号3。零件号=3,8描述=椅子,但我仍然需要以某种方式将其显示在类似枢轴的报告中。有没有更快的方法?如果有人有任何想法,还需要帮助?我在这方面也需要帮助。我能想到的唯一办法就是也要70个vlookups。。但这是一个糟糕的解决方案。尤其是当我的excel中有350000条记录时。
Sub Tester()
    Dim rngIn, rngOut

    Set rngIn = Sheets("Data")
    Set rngOut = Sheets("Pivoted")

    rngOut.CurrentRegion.ClearContents

    PivotRange rngIn, 2, 3, 1, rngOut
End Sub


Function PivotRange(rngIn, rowCol, catCol, valCol, rngOut)
    Dim dictRows, dictCols, r, nR, nC, arr, kR, kC

    Set dictRows = CreateObject("scripting.dictionary")
    Set dictCols = CreateObject("scripting.dictionary")

    arr = rngIn.Value

    Application.ScreenUpdating = False
    rngOut.Value = arr(1, rowCol) 'row header

    For r = 2 To UBound(arr, 1) 'skip column headers
        kR = arr(r, rowCol)
        kC = arr(r, catCol)
        If Not dictRows.exists(kR) Then
            nR = nR + 1
            dictRows.Add kR, nR
            rngOut.Offset(nR, 0).Value = kR
        End If
        If Not dictCols.exists(kC) Then
            nC = nC + 1
            dictCols.Add kC, nC
            rngOut.Offset(0, nC).Value = kC
        End If
        With rngOut.Offset(dictRows(kR), dictCols(kC))
            .Value = .Value & IIf(.Value <> "", ",", "") & arr(r, valCol)
        End With
    Next r

End Function