Excel 2010 公式,如何编写此公式?(VBA)

Excel 2010 公式,如何编写此公式?(VBA)

我需要更有经验的 Excel VBA 用户的帮助。

基本上我有 2 组 3 个单元格(总共 6 个单元格)如果填充了一组 3 个单元格,它需要接受它而不是返回消息框。

如果两组中有一组未填写(空白)或返回错误,则需要显示“错误消息框”

两组 3 个细胞分别是: (A39,A40,A41) 和 (E39,E40,E41)

这是目前我的公式:

If IsError(Range("E39, E40, E41")) Then MsgBox ("error msgbox"): Exit Sub
If Range("E39, E40, E41") = Blank Then MsgBox ("error msgbox"): Exit Sub

如何将 A39、A40、A41 添加到此公式中,以便如果
填写了组 1 (A39、A40、A41) 或组 2 (E39、E40、E41),它不会返回“错误消息框”?

我曾尝试自己摆弄它,但如果没有填写所有 6 个单元格,它就会返回“错误消息框”。

我曾尝试查看 AND、OR 语句,但无法获得我想要的功能。

这是一张可能有帮助的图片

在此处输入图片描述

任何帮助将不胜感激

答案1

你的代码有些问题。首先,Range("E39, E40, E41")没有引用这三个单元格。你需要在引号外用逗号将它们分开,就像这样Range("E39", "E40", "E41")

其次,为了正确评估这些单元格是否为空,您需要在语句中将它们分开IF,如下所示:

If Range("E39") = "" Or Range("E40") = "" Or Range("E41") = "" Then
    'code here
End If

IsError 也一样:

If IsError(Range("E39")) Or IsError(Range("E40")) ...

但是,要对逻辑进行分组,您需要以不同的方式思考,因为当任何单元格为空/包含错误时,这将引发错误。因此,您可以考虑添加两个新变量,您可以将其设置为TrueFalse取决于组是否正确填写。示例:

Dim isFilled1 as Boolean = False
Dim isFilled2 as Boolean = False

If Not Range("E39") = "" Or Not Range("E40") = "" Or Not Range("E41") = "" Then
    'All the cells in this range contain a value so set isFilled1 to True
    isFilled1 = True
End If

If IsError(Range("E39")) Or IsError(Range("E40")) Or IsError(Range("E40")) Then
    'The cells may contain values, but one or more evaluated as an error therefore set isFilled1 to False
    isFilled1 = False
End If

If Not Range("A39") = "" Or Not Range("A40") = "" Or Not Range("A41") = "" Then
    'All the cells in this range contain a value so set isFilled2 to True
    isFilled2 = True
End If

If IsError(Range("A39")) Or IsError(Range("A40")) Or IsError(Range("A40")) Then
    'The cells may contain values, but one or more evaluated as an error therefore set isFilled2 to False
    isFilled2 = False
End If

'Now check if isFilled1 or isFilled2 are True

If isFilled1 = True or isFilled2 = True Then
    'Hooray, one of the groups is properly filled
Else
    'Neither group is properly filled; show msgbox
    MsgBox("error msgbox")
End If

您可能需要调整此代码以适合您的情况,但这就是我的处理方式。

答案2

我必须对它进行一些调整,以便它能与我正在使用的 Excel 文件很好地兼容。

感谢exantas (用于代码)Dave Rook(编辑我的帖子),这是最终的代码:

Dim isFilled1 As Boolean
Dim isFilled2 As Boolean

If Not Range("E39") = "" And Not Range("E40") = "" And Not Range("E41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("E39")) Or IsEmpty(Range("E40")) Or IsEmpty(Range("E41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If

If Not Range("A39") = "" And Not Range("A40") = "" And Not Range("A41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("A39")) Or IsEmpty(Range("A40")) Or IsEmpty(Range("A41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If

If isFilled1 = True Or isFilled2 = True Then
'One of the groups is properly filled
Else
'Neither group is properly filled; show msgbox
MsgBox ("error msgbox"): Exit Sub

我必须替换单元格中的公式E39,E40,E41,A39,A40,A41和:

=IF(ISERROR(旧公式);"";(旧公式)这样当返回错误时它会显示一个空白/空的单元格。

相关内容