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)
感谢所有帮助,谢谢!
我简化了代码,以隔离测试“%”在单元格中的位置。一旦使它起作用,就可以添加其余代码。
尝试这个:
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那里只是供您查看逐步执行代码时发生的情况。工作正常后,将其取出。