我有多个列表在Excel中分开的列中,但有些列不包含数据。我需要做的是将这些有数据的列组合成一个大列。在两者之间Excel - 如果数据存在将多个列合并为一个
A
B
C
D
E
F
G
H
I
由于没有空行:
Row 1 | A B
Row 2 | C D E
Row 3 | F
Row 4 | G H I
应结合成。如果可能的话,宁愿不使用宏。
谢谢!
我有多个列表在Excel中分开的列中,但有些列不包含数据。我需要做的是将这些有数据的列组合成一个大列。在两者之间Excel - 如果数据存在将多个列合并为一个
A
B
C
D
E
F
G
H
I
由于没有空行:
Row 1 | A B
Row 2 | C D E
Row 3 | F
Row 4 | G H I
应结合成。如果可能的话,宁愿不使用宏。
谢谢!
我可以想到一些方法来做到这一点。使用下面的公式。 (MyData,1 + INT((ROW(A1)-1)/ COLUMNS(MyData)),MOD(ROW(A1)-1 + COLUMNS(MyData),COLUMNS(MyData))+ 1)
这里假设'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
在宏中更新了“Paste:= xlPasteAll”为“Paste:= xlPasteValues”,因为单元格中有公式,而且我需要值但常规公式和宏都有效。谢谢! – vwalsh10
如果你不想使用VBA宏我认为最好的方式得到它是B列,列C,然后列d,......一个拷贝下对方,像这样:
A
C
F
G
B
D
H
E
I
然后使用菜单Data => Remove Duplicates删除多个空格。
如果您改变使用宏的想法,只需在Google上搜索“unpivot data Excel”,您就会发现很多解决方案。
非常容易在VBA中,如果没有可行的话很困难。我建议你继续使用VBA,我们很乐意帮助你把它带到最后。 –
你不想要宏的任何特定原因?一个公式将会非常棘手(呃,可能没有考虑到这里某些用户的聪明才智),但是VBA肯定会是一个更快的解决方案。另外,你到目前为止尝试过什么? – BruceWayne