我有一个包含一列的电子表格,其值如下:
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
答案 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 + 输入。