Excel - 如果存在数据,则将多个列合并为一个

时间:2016-12-28 21:49:40

标签: excel vba filter

我有多个列表在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

中间没有空白行。如果可能,宁愿不使用宏。

谢谢!

3 个答案:

答案 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)),"")))

尽可能向下拖动公式。过滤此列以删除零。

Screenshot

答案 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