如何用VBA将公式实现到Excel单元格中

如何用VBA将公式实现到Excel单元格中,vba,excel,excel-formula,Vba,Excel,Excel Formula,我想在Excel单元格中实现以下公式 IF(OR(D12>0,C13=""),"",MAX(SUM($C$12:C13)-$D$9,0)) (应用公式后,我应得到以下结果(手动执行公式): 所以我编写了如下的简单宏,但无法实现公式,公式retuns值为“true” Sub-adjustoldbills() lastRow_sht4=Sheet4.Range(“A”和Rows.Count).End(xlUp).Row 表4.单元格(12,11)=“ 对于i=1至最后一行\u sht4-1

我想在Excel单元格中实现以下公式

IF(OR(D12>0,C13=""),"",MAX(SUM($C$12:C13)-$D$9,0))
(应用公式后,我应得到以下结果(手动执行公式):

所以我编写了如下的简单宏,但无法实现公式,公式retuns值为“true”

Sub-adjustoldbills()
lastRow_sht4=Sheet4.Range(“A”和Rows.Count).End(xlUp).Row
表4.单元格(12,11)=“
对于i=1至最后一行\u sht4-10
如果表4.单元格(11+i,1)”,则
'=最大值(总和($C$12:C15)$D$9,0)
表4.单元格(12,4)。公式=“=最大值(总和($C$12:C“&12&”)-$D$9,0)”
表4.单元格(11+i,4).公式=“=(如果(或(D“&11+i>0&”,C“&12+i&=”&Chr(34)&Chr(34)&“,”&Chr(34)&Chr(34)&Chr(34)&“,”和“最大值($C$12:C”&12&i&“)-$D$9,0)”
如果结束
接下来我
端接头
通过vba宏实现公式后,我得到错误的结果,如下图所示:


如何实现公式并按预期获取值。

尝试将长公式转换为VBA时,请尝试使用
字符串
变量来帮助您进行测试

 Dim FormulaStr              As String

 FormulaStr = "=IF(OR(D" & 11 + i & ">0,C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & _
      Chr(34) & Chr(34) & ",MAX(SUM($C$12:C" & 12 + i & ")-$D$9,0))"
 Debug.Print FormulaStr
然后,在即时窗口中,您将获得:

=IF(OR(D12>0,C13=""),"",MAX(SUM($C$12:C13)-$D$9,0))
这是要转换为VBA的公式

现在,您只需添加以下行:

 Sheet4.Cells(11 + i, 4).Formula = FormulaStr
如果要跳过字符串变量,只需替换

Sheet4.Cells(11 + i, 4).Formula = "=(if(or(D" & 11 + i > 0 & ",C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & Chr(34) & Chr(34) & "," & "MAX(SUM($C$12:C" & 12 & i & ")-$D$9,0)"
致:


我会走另一条路,没有循环,利用
Range
object的方法

Option Explicit

Sub adjustoldbills()

    With Sheet4
        .Range("D12").FormulaR1C1 = "=MAX(RC[-1]-R9C4,0)" 
        With .Range("A13", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants)
            With .Offset(, 2).SpecialCells(xlCellTypeConstants)
                .Offset(, 1).FormulaR1C1 = "=IF(R[-1]C>0,"""",MAX(SUM(R12C[-1]:RC[-1])-R9C4,0))"
                With .Areas(.Areas.Count)
                    .Offset(, 1).Cells(.Rows.Count).Offset(1).FormulaR1C1 = "=IF(R[-1]C>0,"""",MAX(SUM(R12C[-1]:RC[-1])-R9C4,0))"
                End With
            End With
        End With
    End With
End Sub

非常感谢你,我现在得到了正确的结果,再次感谢你。欢迎。然后,请点击答案旁边的复选标记,将答案从灰色变为已填写,将答案标记为已接受。谢谢。请勇敢的投票人解释他为什么不喜欢这个答案,并给出如何改进的建议?或者删除答案如果他错了,我们就投反对票。谢谢他。你测试过我下面的答案吗?就像@user3598756写的,“勇敢的反对者能解释一下原因吗?”?
Sheet4.Cells(11 + i, 4).Formula = "=IF(OR(D" & 11 + i & ">0,C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & Chr(34) & Chr(34) & ",MAX(SUM($C$12:C" & 12 + i & ")-$D$9,0))"
Option Explicit

Sub adjustoldbills()

    With Sheet4
        .Range("D12").FormulaR1C1 = "=MAX(RC[-1]-R9C4,0)" 
        With .Range("A13", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants)
            With .Offset(, 2).SpecialCells(xlCellTypeConstants)
                .Offset(, 1).FormulaR1C1 = "=IF(R[-1]C>0,"""",MAX(SUM(R12C[-1]:RC[-1])-R9C4,0))"
                With .Areas(.Areas.Count)
                    .Offset(, 1).Cells(.Rows.Count).Offset(1).FormulaR1C1 = "=IF(R[-1]C>0,"""",MAX(SUM(R12C[-1]:RC[-1])-R9C4,0))"
                End With
            End With
        End With
    End With
End Sub