首先复制源范围,然后使用 Transpose:=True 在目标范围上进行特殊粘贴,简短示例:
Option Explicit
Sub test()
Dim sourceRange As Range
Dim targetRange As Range
Set sourceRange = ActiveSheet.Range(Cells(1, 1), Cells(5, 1))
Set targetRange = ActiveSheet.Cells(6, 1)
sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
Transpose 函数采用 Variant 类型的参数并返回 Variant。
Sub transposeTest()
Dim transposedVariant As Variant
Dim sourceRowRange As Range
Dim sourceRowRangeVariant As Variant
Set sourceRowRange = Range("A1:H1") ' one row, eight columns
sourceRowRangeVariant = sourceRowRange.Value
transposedVariant = Application.Transpose(sourceRowRangeVariant)
Dim rangeFilledWithTransposedData As Range
Set rangeFilledWithTransposedData = Range("I1:I8") ' eight rows, one column
rangeFilledWithTransposedData.Value = transposedVariant
End Sub
我将尝试解释'调用转置两次'的目的。如果您在 Excel 中有行数据,例如“a1:h1”,那么Range("a1:h1").Value是一个二维变量数组,维度为 1 到 1、1 到 8。当您调用Transpose(Range("a1:h1").Value)时,您会得到转置的二维变体数组,尺寸为 1 到 8、1 到 1。如果你调用Transpose(Transpose(Range("a1:h1").Value))你会得到维度为 1 到 8的一维变体数组。
第一个转置将行更改为列,第二个转置将列更改回行,但只有一个维度。
如果源范围会有更多的行(列),例如“a1:h3”,那么转置函数只会像这样改变尺寸:1 到 3、1 到 8 转置到 1 到 8、1 到 3,反之亦然。
希望我没有让你感到困惑,我的英语很糟糕,对不起:-)。