VBA数组公式和目标,然后IF语句

时间:2018-07-09 10:15:14

标签: excel vba

此代码无法运行。首先查看一个范围,如果不存在0,则使用数组公式选择最小的负值。然后目标寻求通过更改同一行(左4列)上某个单元格的值来将所选单元格设置为0。如果0存在,则不执行任何操作。任何帮助表示赞赏

Sub Test()
    Dim Cel As Integer
        For Each Cel In ThisWorkbook.Sheets("Sheet1").Range("V17:V57")
            If Cel.Value <> 0 Then
            Cel.Find(Application.WorksheetFunction.FormulaArray(MAX(IF(V17:V57<=0,V17:V57),MIN(V17:V57))))
            Cel.Select
            Cel.GoalSeek Goal:=0, ChangingCell:=Cel.Offset(0, -4)
            End If
    Next Cel
End Sub

看起来像以前的评论/回复已被删除。这是该代码的最新版本,已根据先前的响应进行了修改。仍然无法运行。我在.Activate的末尾删除了Cel.Find。现在有一个编译语法错误。任何帮助

Sub Test()
Dim Cel As Range
    For Each Cel In ThisWorkbook.Sheets("Sheet1").Range("V17:V57").Cells
        If Cel.Value <> 0 Then

        Cel.Find(What:="MAX(IF(V17:V57<=0,V17:V57),MIN(V17:V57))", After:= _
        ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

        Cel.GoalSeek Goal:=0, ChangingCell:=Cel.Offset(0, -4)
        End If
    Next Cel
End Sub 

1 个答案:

答案 0 :(得分:0)

只需删除Find方法中的括号即可。

使用:

Cel.Find What:="MAX(IF(V17:V57<=0,V17:V57),MIN(V17:V57))", After:= _
ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False

代替:

Cel.Find(What:="MAX(IF(V17:V57<=0,V17:V57),MIN(V17:V57))", After:= _
ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)