VBA,如果字符串包含某个字母

时间:2014-07-07 18:27:10

标签: excel vba excel-vba

我通常不与VBA合作,我无法理解这一点。我正在尝试确定某个字母是否包含在我的spreadhseet中的字符串中。

Private Sub CommandButton1_Click()
Dim myString As String
RowCount = WorksheetFunction.CountA(Range("A:A"))
MsgBox RowCount
For i = 2 To RowCount
    myString = Trim(Cells(i, 1).Value)
    If myString.Contains("A") Then
        oldStr = Cells(i, 15).Value
        newStr = Left(oldStr, oldStr.IndexOf("A"))
    End If
Next          
End Sub

这段代码应该经过一个值列表,如果它遇到字母A以删除它以及它之后的所有内容。我在IF语句,无效限定符中遇到问题。无论单元格中的字符串是否包含字母A,我如何能够输出IF语句?

非常感谢

4 个答案:

答案 0 :(得分:15)

尝试使用InStr函数,该函数返回找到字符的字符串中的索引。如果InStr返回0,则找不到该字符串。

If InStr(myString, "A") > 0 Then

InStr MSDN Website

对于分配给newStr的行的错误,也将oldStr.IndexOf转换为该InStr函数。

Left(oldStr, InStr(oldStr, "A"))

答案 1 :(得分:1)

不确定这是否是你所追求的,但是它会遍历你给它的范围,如果它找到“A”,它将从细胞中移除它。我不确定oldStr用于...

Private Sub foo()
Dim myString As String
RowCount = WorksheetFunction.CountA(Range("A:A"))

For i = 2 To RowCount
    myString = Trim(Cells(i, 1).Value)
    If InStr(myString, "A") > 0 Then
        Cells(i, 1).Value = Left(myString, InStr(myString, "A"))
    End If
Next
End Sub

答案 2 :(得分:0)

尝试:

If myString like "*A*" Then

答案 3 :(得分:0)

如果要循环遍历大量单元格,请使用二进制函数,它要快得多。 使用“<> 0”代替“> 0”也可以加快速度:

If InStrB(1, myString, "a", vbBinaryCompare) <> 0