有没有人知道如何让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代码之前是否有一种支持的方式。
通常的粘贴特殊> transpose不提供这种格式,因为它不应该。
我显然希望为大型数据集自动执行此操作。
答案 0 :(得分:2)
我会选择VBA,但是如果你想要一个非VBA解决方案,那就看看吧。这是我很快就提出来的,我相信可以有更好的公式来实现同样的目标。
D2:D6
值可以从Col A上的Pivot获得
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))
现在只需复制公式即可。
答案 1 :(得分: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
数据将在单独的工作表上重新格式化。