如何检查活动单元格中的值是否包含任何字母?
例如单元格“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
只要“文本”的价值是“”它不起作用,我真的很难罚款正确的解决scheme。
如果你的目标是检查单元是否包含任何有效的范围参考,那么你可以这样做
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
你的问题不是确定的,所以这里有两个select:
要检查该值是否包含B:
blnCheck = 0 < InStr(1, rngCell.Value, "B")
检查公式是否包含B:
blnCheck = 0 < InStr(1, rngCell.Formula, "B")
关于你的空string问题:
只要“文本”的价值是“”它不起作用,我真的很难罚款正确的解决scheme。
这是因为你正在使用VBA.InStr(1, x.Formula, text)
,在这种情况下, 1
是一个长度为0的string的无效索引。你可以忽略它,或者你可以像下面这样编码:
If Len(Trim(x.Formula)) = 0 Then '## Do nothing Else Criteria_3 = VBA.InStr(1, x.Formula, text) > 0 End If
对于确定值何时包含任何字母字符的具体问题:
您可以使用像这样的函数来testing一个值是否包含任何字母,通过评估每个字符的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