2013-10-22 42 views
-1

有誰知道的一種方式來獲得的Excel做的是在下面的例子更改平面數據以水平與第一列關係

A   |  B 
================================ 
Apple  |  Pie 
Apple  |  Sauce 
Apple  |  Juice 
Banana |  Smoothie 
Banana |  Split 

成這種結構顯示?

A  | B   |  C  | D  | 
================================================== 
Apple | Pie  | Sauce | Juice | 
Banana | Smoothie | Split |   | 

我一直在網上搜索,找不到支持的方式,到目前爲止,我想知道是否有第一支持的方式之前,我嘗試寫一些VBA代碼做到這一點。

通常的粘貼特殊轉置不會提供這種格式,因爲它不應該。

我很明顯想爲大數據集自動執行此操作。

+1

這不是換位,這就是爲什麼'轉置'不會給你你期望的結果。你可以用透視表和一些公式來做到這一點,但我可能只是使用VBA。 –

+0

@DavidZemens轉置只是意味着轉換到不同的上下文,所以我想不出一個更好的詞。我知道它不同於特殊粘貼>轉置選項。 – Pricey

+0

代碼是否是您最好的選擇可能不會太依賴於您的數據集的大小,但您需要多長時間才能執行此操作? – pnuts

回答

2

如果你想嘗試一個宏,試試這個:

Sub TwoDimension() 
    Dim s1 As Worksheet, s2 As Worksheet 
    Dim N As Long, i As Long, K As Long 
    Dim ii As Long 
    Set s1 = Sheets("Sheet1") 
    Set s2 = Sheets("Sheet2") 
    s1.Range("A1:B1").Copy s2.Range("A1:B1") 
    N = s1.Cells(Rows.Count, "A").End(xlUp).Row 
    K = 3 
    ii = 1 
    For i = 2 To N 
     If s1.Cells(i, 1) = s1.Cells(i - 1, 1) Then 
      s2.Cells(ii, K) = s1.Cells(i, 2) 
      K = K + 1 
     Else 
      ii = ii + 1 
      s2.Cells(ii, 1) = s1.Cells(i, 1) 
      s2.Cells(ii, 2) = s1.Cells(i, 2) 
      K = 3 
     End If 
    Next i 
End Sub 

的數據將在一個單獨的工作表重新格式化。

+0

+ 1按預期工作:) –

+0

+ 1感謝此工程很好 – Pricey

+1

感謝您的反饋! –

2

我會在這一個VBA上,但如果你想要一個非VBA解決方案,那麼看看這個。這是我很快提出來的,我相信可以有更好的公式來實現同樣的目的。

D2:D6值可以從柱A

E2一個樞軸地得到具有式

=IF(OFFSET(INDIRECT(CELL("address",INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,0),1))),0,1)=0,"",OFFSET(INDIRECT(CELL("address",INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,0),1))),0,1))

F2具有式

=IF(OFFSET(INDIRECT(CELL("address",INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,0),1))),1,1)=0,"",OFFSET(INDIRECT(CELL("address",INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,0),1))),1,1))

G2具有式

=IF(OFFSET(INDIRECT(CELL("address",INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,0),1))),2,1)=0,"",OFFSET(INDIRECT(CELL("address",INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,0),1))),2,1))

現在只需複製公式下來。

enter image description here

+1

+ 1也是一個很好的答案,當涉及到如何使用公式來完成它時,我無法讓它自動水平填充,我有一些超過500的一些,所以VBA在這種情況下似乎更合適,但是謝謝 – Pricey

+1

Upvote因爲面對配方時純粹的球到牆上的瘋狂和無所畏懼。 – AlwaysLearning