Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 筛选出没有';不符合两个条件_Vba_Excel - Fatal编程技术网

Vba 筛选出没有';不符合两个条件

Vba 筛选出没有';不符合两个条件,vba,excel,Vba,Excel,我想写一个VBA程序,筛选出不满足指定值的值。然而,我有点陷入了第4行的对象定义错误(如果…那么)。谁能帮我一下吗。非常感谢 Sub Macro1() If Cells(A, 1) <> "none" Or Cells(A, 1) <> 0 Then Cells(A, 2) = "checked" Else Cells(A, 2) = "Not checked" End If End Sub Sub宏1() 如果单元格(A,1)“无”或单元格(A,1)为

我想写一个VBA程序,筛选出不满足指定值的值。然而,我有点陷入了第4行的对象定义错误(如果…那么)。谁能帮我一下吗。非常感谢

Sub Macro1()
If Cells(A, 1) <> "none" Or Cells(A, 1) <> 0 Then
    Cells(A, 2) = "checked"
Else
    Cells(A, 2) = "Not checked"
End If
End Sub
Sub宏1()
如果单元格(A,1)“无”或单元格(A,1)为0,则
单元格(A,2)=“已选中”
其他的
单元格(A,2)=“未选中”
如果结束
端接头

单元格由行、列或地址引用。所以使用

单元格(1,1)


单元格(“A1”)
您的行和列颠倒了。尝试:

Sub Macro1()
If Cells(1, "A") <> "none" Or Cells(1, "A") <> 0 Then
    Cells(2, "A") = "checked"
Else
    Cells(2, "A") = "Not checked"
End If
End Sub
Sub宏1()
如果单元格(1,“A”)“无”或单元格(1,“A”)为0,则
单元格(2,“A”)=“选中”
其他的
单元格(2,“A”)=“未选中”
如果结束
端接头
使用以下方法:

Sub Macro1()

        If Cells(1, 1) <> "none" Or Cells(1, 1) <> 0 Then
            Cells(1, 2) = "checked"
        Else
            Cells(1, 2) = "Not checked"
        End If

End Sub
Sub宏1()
如果单元格(1,1)“无”或单元格(1,1)为0,则
单元格(1,2)=“已选中”
其他的
单元格(1,2)=“未选中”
如果结束
端接头
或者你可以:

Sub Macro2()

        If Range("A1") <> "none" Or Range("A1") <> 0 Then
            Range("B1") = "checked"
        Else
            Range("B1") = "Not checked"
        End If

End Sub
Sub-Macro2()
如果范围(“A1”)“无”或范围(“A1”)为0,则
范围(“B1”)=“已检查”
其他的
范围(“B1”)=“未检查”
如果结束
端接头

您需要小心:

0)尊重语言的语法/语义:这对人类来说是显而易见的,但是
a
对VBA意味着什么

1) 确保正在访问哪些单元格值:即这些单元格属于哪个工作表

2) ynot比较苹果和桔子:如果某个东西是字符串,将其与整数值进行比较会导致类型不匹配错误。在比较您要比较的类型之前,您需要确定

3) 遵循布尔逻辑的规则,而不是通用语言逻辑的规则:如果说某个东西不应该是“无”或0.0,则不能在逻辑上转换为
If
条件

因此,这是一个更稳健的宏观经济方案:

Public Sub Macro1()
        Dim in_value  As Variant
        Dim out_value As String

        ' Adjust the name of the worksheet to your needs'
        With Worksheets("Sheet1")
                ' Read data '
                in_value = .Range("A1").Value

                ' Check what type '
                Select Case TypeName(in_value)
                Case "Empty"
                        Let out_value = "Not checked"

                Case "String"
                        If LCase(in_value) <> "none" Then
                                Let out_value = "checked"
                        Else
                                Let out_value = "Not checked"
                        End If

                Case "Integer", "Long", "Single", "Double"
                        If in_value <> 0 Then
                                Let out_value = "checked"
                        Else
                                Let out_value = "Not checked"
                        End If

                Case Else
                        Let out_value = "checked"
                End Select

                ' Write data '
                Let .Range("A2").Value = out_value
        End With
End Sub
公共子宏1()
作为变量的Dim in_值
将_值变暗为字符串
'根据您的需要调整工作表的名称'
带工作表(“表1”)
“读取数据”
in_值=.范围(“A1”).值
'检查什么类型'
选择案例类型名称(在值中)
案例“空”
放出值=“未检查”
大小写“字符串”
如果LCase(单位值)“无”,则
放出\u value=“已检查”
其他的
放出值=“未检查”
如果结束
案例“整数”、“长”、“单”、“双”
如果in_值为0,则
放出\u value=“已检查”
其他的
放出值=“未检查”
如果结束
其他情况
放出\u value=“已检查”
结束选择
“写入数据”
Let.范围(“A2”).值=输出值
以
端接头

但即使我纠正了这个错误,即使我在单元格(1,“A”)中输入1并运行程序,单元格(2,“A”)也始终显示选中状态。我的陈述有问题吗?你想发生什么?现在,您的声明说,任何不是“无”或0的内容都将被“检查”,因此1将被“检查”。对不起,我把它放错了。当我在单元格(1,“A”)中输入0或无时,它仍然显示“checked”。而不是“put”和。“正如jbarker2160所述,逻辑是错误的。由于
单元格(1,“A”)
不能同时为none或0,因此该语句始终为true。将
更改为
应满足逻辑要求。但即使我更正了此项,单元格(2,“A”)始终显示选中,即使我在单元格(1,“A”)中输入1并运行程序。我的陈述有问题吗?