2015-12-11 47 views
1

我有這樣的正是同樣的問題在這裏:如何在Excel中將長表格轉換爲寬表格? - 回答不工作

How to convert a long form table to wide form table in Excel?

但唯一的答案(https://stackoverflow.com/a/24424637/3581372)is不工作無論是VBA和數學式的部分(我至少需要一個有效的解決方案)。 。


使用VBA:

Range("G1:K99").Clear 
For Each xx In Range("A:A") 
    If xx.Value = "" Then Exit Sub 
    Range("G1").Offset(xx.Value, 0) = xx.Value 
    For e = 1 To 99 
     If Range("G1").Offset(xx.Value, e) = "" Then 
      Range("G1").Offset(xx.Value, e) = xx.Offset(0, 1).Value 
      Exit For 
     End If 
    Next 
Next 

它是從列 「G」 創建

沒有VBA,方案如下表:

添加公式:

M2 - >=IFERROR(MATCH(L2;$A$1:$A$8;);"")
N2 - >=IFERROR(MATCH(L2;INDIRECT("$A" & (M2+1) & ":$A$8");)+M2;"")
O2 - >=IFERROR(MATCH(L2;INDIRECT("$A" & (N2+1) & ":$A$8");)+N2;"")
P2 - >=IFERROR(INDEX($B$1:$B$8;M2);"")

分自動完成也列於R

,並自動完成...


我用Excel 2010工作任何人都可以檢查的解決方案?

+0

包括您的問題描述的鏈接之後前面的問題,包括一個截圖和你嘗試過的代碼,我們會盡力幫你完成! ;) – R3uK

+0

我已經發布[另一個答案](http://stackoverflow.com/a/34225780/2548351)到你引用的問題。看看你是否能夠完成這項工作。 – caiohamamura

回答

0

你可以使用這個(測試):

來源
Sub test() 
    Dim Dic As Object: Set Dic = CreateObject("Scripting.Dictionary") 
    Dim cl As Range, i&, k, x%, z% 
    Dic.comparemode = vbTextCompare 
    i = [B:B].Find("*", , xlValues, , xlByRows, xlPrevious).Row 
    For Each cl In Range([B2], Cells(i, "B")) 
     If Not Dic.exists(cl.Value2) Then 
      Dic.Add cl.Value2, "1|" & cl.Offset(, -1).Value2 
     Else 
      x = Split(Dic(cl.Value2), "|")(0) 
      z = x + 1 
      Dic(cl.Value2) = Replace(Dic(cl.Value2), x, z) & _ 
            "|" & cl.Offset(, -1).Value2 
     End If 
    Next cl 
    Workbooks.Add 
    [A1] = "Room": [B1] = "Count": i = 2 
    For Each k In Dic 
     Cells(i, "A") = k 
     Range(Cells(i, 2), Cells(i, Split(Dic(k), "|")(0) + 2)) = Split(Dic(k), "|") 
     i = i + 1 
    Next k 
End Sub 

輸出

enter image description here

enter image description here

相關問題