Excel 如何将多个列转换为单个列?
在数量上,我如何转换此格式: a a1 b b1 c c1 d d1 e e1 a1 b b1 c c1 d d1 e1 如下图所示,插入到单个列中 a a1 b b1 c c1 d d1 A. a1 B b1 C c1 DExcel 如何将多个列转换为单个列?,excel,excel-formula,worksheet-function,excel-indirect,vba,Excel,Excel Formula,Worksheet Function,Excel Indirect,Vba,在数量上,我如何转换此格式: a a1 b b1 c c1 d d1 e e1 a1 b b1 c c1 d d1 e1 如下图所示,插入到单个列中 a a1 b b1 c c1 d d1 A. a1 B b1 C c1 D d1有很多方法可以实现你想要的。最简单的描述之一是,假设您的数据在A:B列中,使用C1中的公式并向下复制 =IF(ISODD(MOD(ROW(),2)),INDIRECT(CHAR(COLUMN()+61)&(ROW()+1
d1有很多方法可以实现你想要的。最简单的描述之一是,假设您的数据在A:B列中,使用
C1
中的公式并向下复制
=IF(ISODD(MOD(ROW(),2)),INDIRECT(CHAR(COLUMN()+61)&(ROW()+1)/2),
INDIRECT(CHAR(COLUMN()+62)&(ROW()/2)))
=如果(ISODD(MOD(ROW(),2))、间接(CHAR(COLUMN()+61)和(ROW()+1)/2),
间接(字符(列()+62)和(行()/2)))
但我喜欢的一种技术甚至不需要公式(除了Excel按钮后面提供的公式)。小计A:B(其中A:B需要标签,即使为空)对于ColA中的每个更改,计数,将小计添加到ColA和下面的数据摘要。{此选项用于添加行,如果ColA具有连续的重复值,则会下降-计数应始终为
1
)
筛选A:C并选择B=1
。在B3
中输入=C2
并根据需要向下复制。取消筛选,复制ColB并在顶部粘贴特殊值。删除小计并删除{new}ColA以保持整洁。{现在也可以删除ColB。}
PS如果你的数据是在你的文章中指出的交替行中,这会更容易-在我编辑它之前!有很多方法可以实现你想要的。最简单的描述之一是,假设你的数据在A:B列中,使用
C1
中的公式并向下复制
=IF(ISODD(MOD(ROW(),2)),INDIRECT(CHAR(COLUMN()+61)&(ROW()+1)/2),
INDIRECT(CHAR(COLUMN()+62)&(ROW()/2)))
=如果(ISODD(MOD(ROW(),2))、间接(CHAR(COLUMN()+61)和(ROW()+1)/2),
间接(字符(列()+62)和(行()/2)))
但我喜欢的一种技术甚至几乎不需要公式(Excel按钮后面提供的除外)。小计A:B(其中A:B需要标签,即使是空白)对于ColA的每次更改,计数,将小计添加到ColA和下面的数据摘要。{此选项用于添加行,如果ColA具有连续的重复值,则会下降-计数应始终为
1
)
筛选A:C并选择B=1
。在B3
中输入=C2
并根据需要向下复制。取消筛选,复制ColB并在顶部粘贴特殊值。删除小计并删除{new}ColA以保持整洁。{现在也可以删除ColB。}
PS如果您的数据是在您的帖子中显示的备用行中,这会更容易-在我编辑它之前!您也可以使用VBA来完成此操作,而无需Excel选择或激活任何内容。它现在只编码为在活动工作表上工作,但在任何未活动选择的工作表上工作都非常容易
Sub combineColumns()
Dim sFirstCol As String
Dim sSecondCol As String
sFirstCol = "A"
sSecondCol = "B"
Dim values() As String
Dim i As Integer
Dim t As Integer
Dim iFirstRow As Integer
Dim iSecondRow As Integer
iFirstRow = Range(sFirstCol & 1).End(xlDown).Row
iSecondRow = Range(sSecondCol & 1).End(xlDown).Row
ReDim values(iSecondRow - 1)
For i = 0 To iFirstRow - 1
values(i) = Range(sSecondCol & i + 1).Value
Next i
t = 0
For i = 0 To iFirstRow * 2 - 1 Step 2
Range(sFirstCol & i + 2).Insert
Range(sFirstCol & i + 2).Value = values(t)
t = t + 1
Next i
Range(sSecondCol & 1 & ":" & sSecondCol & iSecondRow * 2).ClearContents
End Sub
您也可以使用VBA执行此操作,而无需Excel选择或激活任何内容。它现在只编码为在活动工作表上工作,但很容易使其在未活动选择的任何工作表上工作
Sub combineColumns()
Dim sFirstCol As String
Dim sSecondCol As String
sFirstCol = "A"
sSecondCol = "B"
Dim values() As String
Dim i As Integer
Dim t As Integer
Dim iFirstRow As Integer
Dim iSecondRow As Integer
iFirstRow = Range(sFirstCol & 1).End(xlDown).Row
iSecondRow = Range(sSecondCol & 1).End(xlDown).Row
ReDim values(iSecondRow - 1)
For i = 0 To iFirstRow - 1
values(i) = Range(sSecondCol & i + 1).Value
Next i
t = 0
For i = 0 To iFirstRow * 2 - 1 Step 2
Range(sFirstCol & i + 2).Insert
Range(sFirstCol & i + 2).Value = values(t)
t = t + 1
Next i
Range(sSecondCol & 1 & ":" & sSecondCol & iSecondRow * 2).ClearContents
End Sub