Vba 筛选出没有';不符合两个条件
我想写一个VBA程序,筛选出不满足指定值的值。然而,我有点陷入了第4行的对象定义错误(如果…那么)。谁能帮我一下吗。非常感谢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)为
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并运行程序。我的陈述有问题吗?