我有多个列表在excel的不同列中,但有些列不包含数据。我需要做的是将具有数据的这些列组合成一个大列。
Row 1 | A B
Row 2 | C D E
Row 3 | F
Row 4 | G H I
应合并为:
A
B
C
D
E
F
G
H
I
中间没有空白行。如果可能,宁愿不使用宏。
谢谢!
答案 0 :(得分:1)
如果您不想使用宏,则至少需要使用过滤器来避免空行(我的解决方案中的零行)。
我假设您的数据位于A,B和C列
在D栏中,我们使用以下公式
=IF(MOD(ROW()+2,3)=0,INDEX(A:A,QUOTIENT(ROW()+2,3)),IF(MOD(ROW()+2,3)=1,INDEX(B:B,QUOTIENT(ROW()+2,3)),IF(MOD(ROW()+2,3)=2,INDEX(C:C,QUOTIENT(ROW()+2,3)),"")))
尽可能向下拖动公式。过滤此列以删除零。
答案 1 :(得分:0)
如果您不想使用VBA宏,我认为获得它的最佳方法是复制列B,列C,然后列D,...一个在彼此之下,如下所示:
A
C
F
G
B
D
H
E
I
然后使用菜单Data =>删除重复项以删除多个空格。
如果您改变使用宏的想法,只需在Google上搜索“unpivot data Excel”,您就会找到大量有关它的解决方案。
答案 2 :(得分:0)
我可以想到几种方法来做到这一点。使用下面的公式。
= INDEX(迈德特,1 + INT((ROW(A1)-1)/列(迈德特)),MOD(ROW(A1)-1 + COLUMNS(迈德特),COLUMNS(迈德特))+ 1)< / p>
这假定'MyData'是一个命名范围。
作为替代方案,您可以使用简单的VBA脚本来完成这项工作。
Sub ConvertRangeToColumn()
Dim Range1 As Range, Range2 As Range, Rng As Range
Dim rowIndex As Integer
xTitleId = "Title"
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Source Ranges:", xTitleId, Range1.Address, Type:=8)
Set Range2 = Application.InputBox("Convert to (single cell):", xTitleId, Type:=8)
rowIndex = 0
Application.ScreenUpdating = False
For Each Rng In Range1.Rows
Rng.Copy
Range2.Offset(rowIndex, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
rowIndex = rowIndex + Rng.Columns.Count
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub