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

时间:2016-04-25 16:15:36

标签: excel vba excel-vba macros

例如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"的价值是""它不起作用,我真的很难对正确的解决方案进行罚款。

4 个答案:

答案 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

enter image description here

在您的代码中,您可以将其命名为:

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