2014-09-23 47 views
1

不知道是否有人能指出我在正确的方向。下面有一个200,000行的电子表格示例。 (部件号是字母和数字)Excel数据汇总到文本价值 - 以透视表类似

Part Number  Areacode   Description 
1     1     Table 
2     1     Chair 
3     1     Bookcase 
7     1     Bookcase 
4     2     Table 
5     2     Shelf 
6     3     Chair 
8     3     Chair 

我想实现这个

Area Code   Table   Chair   Bookcase   Shelf 
1     1    2    3,7 
2     4              5 
3         3,8 

我认为数据透视表可能是理想的解决方案,但我已经尝试了这一点,可惜我看不到它是可以将实际文本值添加到总和区域中。我猜测唯一的出路是某种宏?

2个月上还需要对这个家伙的帮助,如果任何人有

+0

我已经下载并安装Ablebits结合已经让我来连接基于区号的部件编号,所以在我的主表中的行我现在有一个区号3.型号= 3,8 =说明,但主席我仍然需要以某种方式让这些出现在像报告一样的枢轴中。 – Emma 2014-09-24 08:44:14

+0

任何更快的方法来做到这一点? – Emma 2014-12-09 10:18:38

回答

1

我已经完成了任务的任何想法,但我相信有可能会更快的方式来实现这一目标。解决的办法是下载Ablebits联合行计划从https://www.ablebits.com/

这让我根据区号来连接的部件号所以在我的主表我现在有一个区号3.型号= 3,8和说明=主席

然后我插入一个新的列,给一切的唯一数字标识。

此后我跑的枢轴表,得到区号为垂直值,描述为水平值和在其设置为新的唯一标识符字段的计算字段和值MIN。最大或产品。

然后,我将数据透视表复制并粘贴到一张新表中,并对每个唯一标识符进行查找,以获取实际零件号码作为文本值 - 这花费了大量时间,因为它需要70个VLookups。

我仍然有兴趣在听到这样做的任何更快的方法。

谢谢。

+0

还需要对这个家伙的帮助,如果任何人有任何想法 – Emma 2014-12-09 10:39:44

+0

任何想法?我仍然需要帮助。我能想到的唯一的办法就是70个vlookups太..但是这是一个可怕的解决方案。特别是当我在我的excel中有35万条记录时。 – hamish 2015-09-03 02:46:26

0
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