在单元格中使用IF()语句运行Sub过程

时间:2018-06-22 10:29:33

标签: excel excel-vba excel-formula vba

我在Excel工作表中遇到问题,可能是由于缺乏理解。基本上,我在单元格I2中有一个IF()语句,对于if_true,我想运行一个公共Sub,即Sub MyFunc(),它仅将行中的数据复制到新工作表中。

换句话说,我在单元格I2中:

=IF(OR(AND($D2="ABOVE", $F2>$E2, $H2="YES"), AND($D2="BELOW", $F2<$E2, $H2="YES")),MyFunc(),"")

这似乎根本不运行sub,如果我在VBE中运行Sub,它可以正常工作。

Sub MyFunc()

'begin populating table
'Date
Sheets("Sheet3").Range("A:A").End(xlDown).Offset(1, 0).Value = Format(Now(), "dd/mm/yyyy")
'DayofWeek
Sheets("Sheet3").Range("B:B").End(xlDown).Offset(1, 0).Value = Format(Now(), "ddd")
'copy code and paste in cell
Sheets("Sheet1").Range("A2").Copy Destination:=Sheets("Sheet3").Range("E:E").End(xlDown).Offset(1, 0)
'copy level
Sheets("Sheet1").Range("E2").Copy Destination:=Sheets("Sheet3").Range("F:F").End(xlDown).Offset(1, 0)
'delete row information
Worksheets("Sheet1").Range("A2").ClearContents
Worksheets("Sheet1").Range("C2:E2").ClearContents
Worksheets("Sheet1").Range("G2:H2").ClearContents
'resort colums
SortByMarket
   End Sub

基于上述条件,关于如何调用此Sub,我有什么建议吗?

非常感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

是的,如果您使用Andy Pope在此链接上执行的函数调用子程序是可能的:
https://www.ozgrid.com/forum/forum/help-forums/excel-general/41643-can-a-subroutine-be-called-within-a-function

您可以编写一个函数:

Function MyFunc()
    Msgbox "Function started"
    Call Copy
    Application.Run "MySub"

End Function

然后您可以这样编写公式:

=IF(OR(AND($D2="ABOVE", $F2>$E2, $H2="YES"), AND($D2="BELOW", $F2<$E2, $H2="YES")),MyFunc(),"")

注意:如果这样不能正常工作,请先尝试键入一个单元格:

=MyFunc()

看看它是否返回任何东西

答案 1 :(得分:0)

因此,将if张贴在您的vba代码中的答案。

Sub Test()

If (Range("D2").Value = "ABOVE" And Range("F2").Value > Range("E2").Value And Range("H2").Value = "YES") Or (Range("D2").Value = "BELOW" And Range("F2").Value < Range("E2").Value And Range("H2").Value = "YES") Then

MsgBox "CLEAR"

' HERE YOUR CLEARING CODE

End If

End Sub

注意:我不会删除其他答案,因为我认为这是一种可能的选择,它也可以回答您提出的问题。