TRANSPOSE公式数组

时间:2017-01-26 12:19:46

标签: arrays excel vba

我想让公式数组函数更容易

我写了一些代码,但它没有像我预期的那样插入我的副本范围:

Sub copy_link()

Dim copyrange As Range
Dim pasterange As Range

Set copyrange = Application.InputBox(prompt:="Choose the copy area", Type:=8)
Set pasterange = Application.InputBox(prompt:="Choose the paste area", Type:=8)

pasterange.FormulaArray = "=TRANSPOSE(copyrange)"

End Sub

1 个答案:

答案 0 :(得分:1)

试试这个:

pasterange.FormulaArray = "=TRANSPOSE(" & copyrange.Address & ")"

您的方法只是在Excel中的公式中插入“copyrange”一词,这对Excel来说完全没有意义。它只在VBA中有意义,所以你必须让VBA解释它。这就是为什么它超出了引号。

您还需要检索范围的地址,而不是其值,因此.Address部分。

修改

Sub copy_link()

Dim copyrange As Range
Dim pasterange As Range
Dim RowNum As Long
Dim ColNum As Long

Set copyrange = Application.InputBox(prompt:="Choose the copy area", Type:=8)
Set pasterange = Application.InputBox(prompt:="Choose the paste area", Type:=8)

RowNum = copyrange.Rows.Count
ColNum = copyrange.Columns.Count

 pasterange.Cells(1).Resize(ColNum, RowNum).FormulaArray = "=TRANSPOSE(" & copyrange.Address & ")"


End Sub

Cells(1)确保我们从pasterange左上角的单元格开始“创建”输出范围。 .resize(ColNum, RowNum)将其调整为copyrange的转置变体。

也许更容易理解(但同样,更详细):

.Resize(RowSize:=ColNum,ColumnSize:=RowNum)