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