我有下表中的信息。
1. A B C
2. D E
3. F G H I J K L M
4. N O P
5. Q
6. R S T U V W X Y Z
。
我所追求的是以下内容:
A
B
C
..
X
Y
Z
我们将不胜感激的想法/建议。
谢谢
答案 0 :(得分:2)
在表区域外选择一些单元格,然后输入:
<击> = IF(OFFSET($ A $ 1,ROUNDUP(ROWS($ 1:1)/ 9,0)-1,MOD(ROWS($ 1:1)-1,9-))= “”, “”,OFFSET($ A $ 1,ROUNDUP(ROWS($ 1:1)/ 9,0)-1,MOD(ROWS($ 1:1)-1,9-)))击>
<击> 击><击> 撞击>
然后向下复制:
如您所见,每行末尾的空白都会被保留。如果你想删除那些空白,那很容易。
修改#1:强>
原始公式有错误。正确的公式应该是:
=IF(OFFSET($A$1,ROUNDUP(ROWS($1:1)/9,0)-1,MOD(ROWS($1:1)-1,9))=0,"",OFFSET($A$1,ROUNDUP(ROWS($1:1)/9,0)-1,MOD(ROWS($1:1)-1,9)))
答案 1 :(得分:1)
一般来说,我试图避免使用VBA(根据Gary的学生的回答),但在这种情况下,VBA更容易理解,所以我可能会例外:
Public Function Vectorize(data As Range) As Variant
Dim Result() As Variant
ReDim Result(1 To WorksheetFunction.CountA(data))
Dim r, c, n As Long
n = 0
For r = 1 To data.Rows.Count
For c = 1 To data.Columns.Count
If Not (IsEmpty(data(r, c))) Then
n = n + 1
Result(n) = data(r, c)
End If
Next c
Next r
Vectorize = Application.Transpose(Result)
End Function
此功能也会忽略空白单元格。
结果以列数组的形式返回;要使用,请选择要输出的单元格,键入公式=Vectorize(A1:I6)
(假设您的数据位于A1:I6
)并按 Ctrl + Shift + 输入将其评估为数组公式。
答案 2 :(得分:0)
通过重复应用偏移/小计,可以更灵活地做到这一点。从(比方说)K2开始
=IFERROR(IF(ROWS($1:1)<=COUNTA(A$1:I$1),INDEX(A$1:I$1,ROWS($1:1)),
INDEX(A$1:I$10,MATCH(TRUE,SUBTOTAL(3,OFFSET(A$1,0,0,ROW(A$1:I$10),10))>=ROWS($1:1),0),
ROWS($1:1)-SUBTOTAL(3,OFFSET(A$1,0,0,MATCH(TRUE,SUBTOTAL(3,OFFSET(A$1,0,0,ROW(A$1:I$10),10))>=ROWS($1:1),0)-1,ROWS(A$1:I$10))))),"")
必须以 Ctrl Shift Enter
作为数组公式输入