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

我有多个列表在Excel中单独的列,但有些列不包含数据。 我需要做的是将这些有数据的列组合成一个大的列。

Row 1 | AB Row 2 | CDE Row 3 | F Row 4 | GHI 

应该结合成:

 A B C D E F G HI 

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

谢谢!

我可以想到一些方法来做到这一点。 使用下面的公式。

= INDEX(迈德特,1 + INT((ROW(A1)-1)/列(迈德特)),MOD(ROW(A1)-1 + COLUMNS(迈德特),COLUMNS(迈德特))+ 1)

这假定“我的数据”是一个命名的范围。

作为替代,您可以使用简单的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 

如果你不想使用macros,至less需要使用filter来避免空行(在我的解决scheme中为零行)。

我假设你的数据在列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)),""))) 

尽可能拖下配方。 过滤此列以删除零。

截图

如果你不想使用VBAmacros,我认为最好的办法是把B列,C列,D列……复制到一起,如下所示:

 A C F G B D H E I 

然后使用菜单Data => Remove Duplicates删除多个空格。

如果您改变使用macros的想法,只需在Google上search“unpivot data Excel”,您就可以find大量解决scheme。