使用VBA在单元格中查找字符串

Tom*_*y Z 6 string excel search vba excel-vba

我已经为此烦恼了一天,在高处和低处搜寻,并且可能试图变得太可爱了,因此完全被卡住了。

我正在尝试运行一个简单的如果

如果一个单元格包含“%”,我希望它做一件事,如果不是,则要做另一件事。由于某些原因,我不明白我无法解决它。我显然已经从其他地方吸取了一些想法,但仍然无法使它起作用。

复杂的因素-我不想在整个列(仅一个表)上运行此函数,因此将其嵌入到使用很多或相对ActiveCell的较大子集中。我永远不知道我会在A列中的哪个位置遇到“%变化”,因此范围始终必须是可变的。我希望VBA / VBE在包含“%”的单元格上执行其他操作。所以

这是原始数据的样子

Initial Value (6/30/06)

Value (12/31/06)

Net Additions (9/30/07)

Withdrawal (12/07)

Value (12/31/07)

Withdrawal (2008)

Value (12/31/08)

Addition (8/26/09)

Value (12/31/09)

Value (12/31/10)

Value (12/30/11)

Value (3/31/12)

% Change 1st Quarter

% Change Since Inception
Run Code Online (Sandbox Code Playgroud)

但是,当我运行以下代码时,它陷入了一个糟糕的循环,在该循环中,它应该退出子程序的“ If Then”(而不是子程序的“ Else”部分)。

Sub IfTest()
 'This should split the information in a table up into cells
 Dim Splitter() As String
 Dim LenValue As Integer     'Gives the number of characters in date string
 Dim LeftValue As Integer    'One less than the LenValue to drop the ")"
 Dim rng As Range, cell As Range
 Set rng = ActiveCell

Do While ActiveCell.Value <> Empty
    If InStr(rng, "%") = True Then
        ActiveCell.Offset(0, 0).Select
        Splitter = Split(ActiveCell.Value, "% Change")
        ActiveCell.Offset(0, 10).Select
        ActiveCell.Value = Splitter(1)
        ActiveCell.Offset(0, -1).Select
        ActiveCell.Value = "% Change"
        ActiveCell.Offset(1, -9).Select
    Else
        ActiveCell.Offset(0, 0).Select
        Splitter = Split(ActiveCell.Value, "(")
        ActiveCell.Offset(0, 9).Select
        ActiveCell.Value = Splitter(0)
        ActiveCell.Offset(0, 1).Select
        LenValue = Len(Splitter(1))
        LeftValue = LenValue - 1
        ActiveCell.Value = Left(Splitter(1), LeftValue)
        ActiveCell.Offset(1, -10).Select
    End If
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)

感谢所有帮助,谢谢!

Jon*_*ell 5

我简化了代码,以隔离测试“%”在单元格中的位置。一旦使它起作用,就可以添加其余代码。

尝试这个:

Option Explicit


Sub DoIHavePercentSymbol()
   Dim rng As Range

   Set rng = ActiveCell

   Do While rng.Value <> Empty
        If InStr(rng.Value, "%") = 0 Then
            MsgBox "I know nothing about percentages!"
            Set rng = rng.Offset(1)
            rng.Select
        Else
            MsgBox "I contain a % symbol!"
            Set rng = rng.Offset(1)
            rng.Select
        End If
   Loop

End Sub
Run Code Online (Sandbox Code Playgroud)

InStr将返回您的搜索文本出现在字符串中的次数。我更改了您的if测试以先检查是否没有匹配项。

消息框和在.Selects那里只是供您查看逐步执行代码时发生的情况。工作正常后,将其取出。