例如cell" A1"链接到单元格" B1",所以在单元格的公式栏中" A1"我们有: = B1
如何检查单元格中的值是否" A1"包含字母B?
我尝试了以下内容:
Dim Criteria_3 As Boolean
Dim Value As Range
Set Value = Selection
Dim x As Variant
Set x = Cells
Dim text As String
For Each x In Value
If IsNumeric(x) Then
Criteria_3 = VBA.InStr(1, x.Formula, text) > 0
" Text"的价值是""它不起作用,我真的很难对正确的解决方案进行罚款。
答案 0 :(得分:2)
你的问题并不是真正的结论,所以这里有两个选择:
要检查值是否包含B:
blnCheck = 0 < InStr(1, rngCell.Value, "B")
要检查公式是否包含B:
blnCheck = 0 < InStr(1, rngCell.Formula, "B")
答案 1 :(得分:2)
关于你的空字符串问题:
只要“文字”的价值是“”,它就不起作用,我真的很难对正确的解决方案进行罚款。
那是因为你正在使用VBA.InStr(1, x.Formula, text)
,在这种情况下1
是一个长度为0的字符串的无效索引。你可以省略它,或者你可以像这样编码:
If Len(Trim(x.Formula)) = 0 Then
'## Do nothing
Else
Criteria_3 = VBA.InStr(1, x.Formula, text) > 0
End If
针对您确定某个值何时包含任何字母字符的特定问题:
你可以使用这样的函数来测试一个值是否包含任何字母,通过评估每个字符的Ascii代码,并在True时中断:
Function ContainsAnyLetter(val) As Boolean
Dim ret As Boolean
Dim str$, ch$
Dim i As Long
str = LCase(CStr(val))
For i = 1 To Len(str)
ch = Mid(str, i, 1)
If 97 <= Asc(ch) And Asc(ch) <= 122 Then
ret = True
Exit For
End If
Next
ContainsAnyLetter = ret
End Function
在您的代码中,您可以将其命名为:
Criteria_3 = ContainsAnyLetter(x.Value) '## or x.Formula, depending on your needs
答案 2 :(得分:1)
您可以使用LIKE
https://msdn.microsoft.com/en-us/library/swf8kaxw.aspx
像if rngCell.value like "*B*" then
答案 3 :(得分:0)
如果你的目标是检查单元格是否包含任何有效的范围引用,那么你可以这样做
Option Explicit
Sub main()
Dim cell As Range
For Each cell In Worksheets("Sheet001").Range("A1:A20") '<== jus a test range, set it as per your needs
MsgBox IsCellReference(cell.Formula)
Next cell
End Sub
Function IsCellReference(text As String) As Boolean
On Error Resume Next
IsCellReference = Not Range(Replace(text, "=", "")) Is Nothing
End Function