我搜索了各种各样的短语来回答我的问题,但我很难找到有效的解决方案。它可能涉及几种不同解决方案的组合,或者我尚未想到的方法;所以任何帮助都会受到赞赏。
假设我在单元格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的垂直范围相对应。
我尝试过各种各样的转置选项,但我找不到任何可行的选项,因为我希望传输精确的公式。
有什么想法吗?
答案 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])"