首先复制源范围,然后使用 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 是一个 2D Variant-Array 维度为 1到 1、1 到 8。
当你调用 Transpose(Range("a1:h1").Value) 然后你得到转置 2D Variant Array 尺寸 1 到 8, 1 到 1。如果你调用 Transpose(Transpose(Range("a1:h1").Value)) 你会得到 1D Variant Array,维度为 1 到 8。强>
第一次转置将行更改为列,第二次转置将列更改回行,但只有一个维度。
如果源范围将有更多行(列),例如"a1:h3" 然后转置函数只是像这样改变尺寸:1 到 3、1 到 8 转置到 1 到 8、1 到 3,反之亦然。
希望我没有把你弄糊涂,我的英语不好,抱歉:-)。