2014-09-23 77 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