0

在数量上,我怎样才能转置这种格式:

一个 a1
b b1
c c1
d d1
ee1

如下所示的单列?

一个
a1
b
b1
C
c1
d
d1
4

2 回答 2

2

有很多方法可以实现您想要的。最简单的描述之一是,假设您的数据在 ColumnA:B 中,使用公式C1并复制下来;

=IF(ISODD(MOD(ROW(),2)),INDIRECT(CHAR(COLUMN()+61)&(ROW()+1)/2),  
                         间接(CHAR(COLUMN()+62)&(ROW()/2)))

但是我喜欢的一种技术几乎不需要公式(除了 Excel 在按钮后面提供的)。小计 A:B(A:B 需要标签,即使是空白)对于 ColA、计数、将小计添加到 ColA 和数据下方的摘要中的每个更改。{如果 ColA 有连续的重复值,这会添加行并且会下降 - Count 应该始终是1)。

过滤 A:C 并选择 B = 1。根据需要B3输入=C2并复制下来。取消过滤,复制 ColB 并将特殊值粘贴到顶部。删除小计并删除 {new} ColA 以保持整洁。{现在也可以删除 ColB。}

PS如果您的数据在您的帖子中似乎显示的交替行中,这会更容易 - 在我编辑它之前!

于 2013-06-06T23:05:03.603 回答
1

您也可以使用 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
于 2013-06-07T04:26:57.707 回答