Excel VBA - 将垂直数组中的公式转换为水平数组

时间:2016-03-24 19:51:29

标签: excel vba excel-vba

我搜索了各种各样的短语来回答我的问题,但我很难找到有效的解决方案。它可能涉及几种不同解决方案的组合,或者我尚未想到的方法;所以任何帮助都会受到赞赏。

假设我在单元格A1,A2,A3和A4中有公式。让我们说我希望那些精确的公式移到右边的一列。

在VBA中,我可以说:

Range("B1:B4").Formula = Range("A1:A4").Formula

我要做的事情是这样的:

Range("B1:E1").Formula = Range("A1:A4").Formula

查看我的B:E范围是否与A1:A4的垂直范围相对应。

我尝试过各种各样的转置选项,但我找不到任何可行的选项,因为我希望传输精确的公式。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

Sub PivotRangeFormulas()
    Dim rngSrc As Range: Set rngSrc = ActiveSheet.Range("A1:A4")
    Dim rngTgt As Range: Set rngTgt = ActiveSheet.Range("B1:E1")
    Dim i As Long: For i = 1 To rngSrc.Rows.Count
        Application.Index(rngTgt, i).Formula = Application.Index(rngSrc, i).Formula
    Next i
End Sub

您还可以使用每个范围中第一个单元格的偏移功能

答案 1 :(得分:1)

Range("B1:E1").Formula = WorksheetFunction.Transpose(Range("A1:A4").Formula)

答案 2 :(得分:0)

是否可以锁定公式中的单元格引用?我确定你知道,但F4键(pc)将切换引用的单元格锁。美元符号锁定列字母或行号[A6,$ A $ 6,A $ 6,$ A6]。如果锁定单元格引用,则可以复制和转置公式。

Range("B1:E1").Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True

这是另一种选择:在单元格中输入公式时尝试录制宏。如果您的公式是:

=SUM(D3:D4) 

根据您输入公式的位置,VBA输出可能如下所示:

"=SUM(R[3]C:R[4]C)"

这是VBA中的绝对引用:

"=SUM(R3C4:R4C4)"

然后您可以执行以下操作:

Range("A8:A23").FormulaR1C1 = "=SUM(R3C4:R4C4)"

这将在" A8:A23"的所有单元格中输入公式= SUM($ D $ 3:$ D $ 4)。如果您使用VBA公式中的括号,您应该能够使其工作。下面的公式搜索包含文本公式" nff"所选单元格左侧的列:

    Selection.FormulaR1C1 = _
    "=SEARCH(""nff"",RC[-1])"