![反转表格(不是转置)](https://linux22.com/image/1559344/%E5%8F%8D%E8%BD%AC%E8%A1%A8%E6%A0%BC%EF%BC%88%E4%B8%8D%E6%98%AF%E8%BD%AC%E7%BD%AE%EF%BC%89.png)
答案1
我通常更喜欢用没有宏的方式来解决问题,但是现在我找不到没有宏的简单解决方案。
下面的宏反转选定的矩阵并将其写回原始位置或新的工作表。
运行宏:
- 按 Alt+F11 打开 Visual Basic 编辑器
- 将代码粘贴到模块中(插入 - 模块)
- 注意:添加代码后,如果您想保留宏,则需要将工作簿保存为启用宏的工作簿(如果将来不需要它,那么保留为 .xlsx 也可以)
- 保留您需要的选项(覆盖原始数据或创建新工作表)并删除其他
- 选择需要反转的整个表格
- 转到“查看” - “宏” - “查看宏” - 选择宏(InvertTable)并按运行
Option Explicit
Sub InvertTable()
Dim originalData As Variant
Dim nRows As Integer
Dim nColumns As Integer
Dim newData As Variant
Dim x As Integer
Dim y As Integer
originalData = Selection
nRows = UBound(originalData, 1)
nColumns = UBound(originalData, 2)
newData = originalData
For x = 1 To CInt(nColumns / 2)
For y = 1 To CInt(nRows / 2)
newData(y, x) = originalData(nRows - y + 1, nColumns - x + 1)
newData(nRows - y + 1, nColumns - x + 1) = originalData(y, x)
newData(y, nColumns - x + 1) = originalData(nRows - y + 1, x)
newData(nRows - y + 1, x) = originalData(y, nColumns - x + 1)
Next y
Next x
' --- option 1: overwrite data ---
Selection = newData
' --- end of option 1 ---
' --- option 1: insert new sheet ---
Dim newSheet As Worksheet
Set newSheet = Selection.Parent.Parent.Worksheets.Add
newSheet.Range(Cells(1, 1), Cells(nRows, nColumns)) = newData
' --- end of option 1 ---
End Sub
答案2
答案3
您可以使用 INDEX 执行此操作:
=INDEX($A$1:$C$3,((ROWS($A$1:$A$3))+1)-ROWS($G$1:$G1),((COLUMNS($A$1:$C$1))+1)-COLUMNS($G$1:G1))
假设你的表在范围内$A$1:$C$3
,
您需要了解我的公式并更改范围以满足您的需要。
更改$A$1:$C$3
以适合您表格的整个范围。 更改$A$1:$A$3
以适合您表格的顶行。 更改$A$1:$C$1
以适合您表格的第一列。
确保其中有 $ 符号。
编辑 OP
在单元格中M1
使用以下公式:
=INDEX($A$1:$L$9,((ROWS($A$1:$A$9))+1)-ROWS($N$1:$N1),((COLUMNS($A$1:$L$1))+1)-COLUMNS($N$1:N1))
将其拖到X1
,然后向下拖到X9
,即可直接反转原始表格。