将行转置到具有空格的列

时间:2014-01-15 20:33:03

标签: excel transpose excel-2013

我有一个包含一列的电子表格,其值如下:

A
B
C
*
D
E
*
F
G
H
I

*表示空单元格。无论如何,我可以把它读作以下内容,每个人都在不同的单元格中?

1 2 3
D E
F G H I

我得到了这个=IF(ISBLANK(A12),TRANSPOSE(A13:A23),"")有帮助但范围设置为10.如何设置它以便在A13之后查找下一个空单元格并回溯一个单元格?

谢谢,

JJ

1 个答案:

答案 0 :(得分:1)

没有可以执行此任务的内置函数。我创建了一个应该能够做到这一点的用户功能。为了使其正常工作,输入数据应该在一个单独的列中,空单元格定义转置输出矩阵的“换行符”。

在VBA模块中包含以下代码。

Option Explicit
Function TransposeSpecial(InpRng As Range)
    Dim Cell As Range
    Dim c1 As Integer, c2 As Integer, i As Integer, j As Integer, k As Integer
    Dim TArr()

    If TypeName(InpRng) <> "Range" Then Exit Function

    'Get dimentions
    For Each Cell In InpRng
        If Cell.Value <> vbNullString Then
            i = i + 1
        Else
            c1 = c1 + 1
            If i > c2 Then c2 = i
            i = 0
        End If
    Next Cell

    c1 = c1 + 1
    If i > c2 Then c2 = i
    i = 1
    j = 1

    'Defines the dimention of the output array
    ReDim TArr(1 To c1, 1 To c2)

    'Writes to array
    For Each Cell In InpRng
        If Cell.Value <> vbNullString Then
            TArr(i, j) = Cell.Value
            j = j + 1
        Else
            For k = j To c2
                TArr(i, k) = vbNullString
            Next k
            i = i + 1
            j = 1
        End If
    Next Cell
    If j <= c2 Then
        For k = j To c2
            TArr(i, k) = vbNullString
        Next k
    End If

    TransposeSpecial = TArr
End Function

现在,通过使用此函数,以单个数据列作为输入,在足够大的范围(包含整个输出矩阵)上,您应该获得所需的输出。在处理应返回矩阵的函数时,请记住使用 Ctrl + Shift + 输入

enter image description here