如何检查活动单元格中的值是否包含任何字母?

例如单元格“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 

你可以使用LIKE

https://msdn.microsoft.com/en-us/library/swf8kaxw.aspx

就像if rngCell.value like "*B*" then