Excel 如何将多个列转换为单个列?

Excel 如何将多个列转换为单个列?,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

在数量上,我如何转换此格式:

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)/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