我有很多行,我想把它们变成一张表。
在 Excel 中,有没有办法将一组条目(每个条目占用四行)转换为一个表格,其中四行中的每一行都放在四列中的一列中?
基本上是这样的:
a
b
c
d
a
b
c
d
到
a b c d
a b c d
答案1
我不知道如何对所有这些问题都采取同样的措施,但你可以像这样粘贴...
- 选择一组 abcd
- 复制单元格
- 编辑 -> 粘贴特别的
- [x] 底部的移调按钮
这对 a/b/c/d 组来说就够了。我知道这不是一个完整的答案,但如果这些数字不是太多,那么这可能会有用。
如果您愿意,这里有一个快速宏可以帮您进行转置。只需将所有内容放在“A”列中,它就会将其全部放在 B1、C1、D1 等中。行由空格分隔,一行中的两个空格表示“停止”。
已修复,现在最多可以处理 255 列。是的,你可以在 vba 中的 pastespecial 函数中使用 Transpose 设置,但这只会使代码更复杂,而无法得到相同的结果,所以我保持简单
Sub Macro1()
lastBlank = False
col = 2 'B
row = 1
For Each cell In Range("A:A")
v = Trim(CStr(cell))
If v = "" Then
If lastBlank = True Then Exit For
lastBlank = True
col = 2 'B
row = row + 1
Else
Cells(row, col) = v
col = col + 1
lastBlank = False
End If
Next
End Sub
- 工具->宏->Visual Basic 编辑器
- [菜单] 插入 -> 模块
- 粘贴宏(应该在“Module1”中)
- 运行(绿色箭头)。或者...关闭并单击工具->宏->宏->[运行]
答案2
如果仍有人在阅读这篇博客文章,这里还有另一种方法(只需使用 FirstRow 常量设置第一行数据在哪一行,然后将其放开)...
Sub TransposeRowsFourAtATime()
Dim X As Long, LastRow As Long, OffSetCounter As Long
Const FirstRow As Long = 2
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For X = FirstRow To LastRow Step 5
Cells(FirstRow, "A").Offset(OffSetCounter).Resize(1, 4) = _
WorksheetFunction.Transpose(Cells(X, "A").Resize(4))
OffSetCounter = OffSetCounter + 1
Next
Range(Cells(FirstRow + OffSetCounter, "A"), Cells(LastRow, "A")).Clear
End Sub
里克·罗斯坦 (MVP - Excel)
答案3
有一个 excel转置函数。在您想要转置开始的单元格中输入函数,然后使用编辑->填充函数将函数向侧面复制(如果需要,可以向下复制)。
应该有一种方法可以使用该函数来纠正行索引(以解释空白)ADDRESS
。
答案4
您可以输入这些公式(假设您的数据从 A1 开始)并根据需要向下填充
B1 =IF(ISBLANK(A5),A1,"")
C1 =IF(ISBLANK(A5),A2,"")
D1 =IF(ISBLANK(A5),A3,"")
E1 =IF(ISBLANK(A5),A4,"")
然后复制并粘贴特殊值。然后排序以删除空白行。