如何检测一个单词是否存在于一个单元格中,在一个string中?

我正在处理一些代码,我需要检测一个单元格是否包含特定的单词,如果有,则会在相邻的单元格中插入一个特定的string。 但是,我在做检测部分的问题! 这是我迄今为止。

Sub searchandpaste() Dim stopvar As Variant Dim i As Variant Dim j As Variant Dim k As Variant Dim TestVal1 As Variant Dim TestVal2 As Variant i = 0 j = 0 Do While stopvar = 0 i = i + 1 MsgBox ("Row " & i) MsgBox ("j equals " & j) 'If the first cell is empty, that means we've hit the end of the worksheet, and it stops the do-while loop TestVal1 = Cells(i, 1) If TestVal1 = 0 Then stopvar = 1 Else TestVal2 = Cells(i, 6) If IsEmpty(TestVal2) = True Then MsgBox ("Detected Empty Cell in Column 6") j = 1 ElseIf TestVal2 = "XXXX" Then 'This means we have a place we need to insert a value MsgBox ("Detected XXXX in Column 6") 'We know at this point that in Cells(6,i) we have a value we need to insert. Thus, we need to search Cells(7,i) for key text If IsNumeric(Cells(7, j).Find("CYLINDER")) Or IsNumeric(Cells(7, j).Find("CYLINDERS")) Or IsNumeric(Cells(7, j).Find("CYL")) = True Then MsgBox ("Detected the string CYLINDER") j = j + 1 MsgBox ("j equals " & j) Else MsgBox ("Did not detect the string CYLINDER") End If End If End If Loop End Sub 

我会在这里删去重要的部分。

 'We know at this point that in Cells(6,i) we have a value we need to insert. Thus, we need to search Cells(7,i) for key text If IsNumeric(Cells(7, j).Find("CYLINDER")) Or IsNumeric(Cells(7, j).Find("CYLINDERS")) Or IsNumeric(Cells(7, j).Find("CYL")) = True Then MsgBox ("Detected the string CYLINDER") j = j + 1 MsgBox ("j equals " & j) Else MsgBox ("Did not detect the string CYLINDER") End If 

我的意图是,这将search单元格(i,7)中的string的单词Cylinder的不同变化,如果它find一个,它会返回TRUE或FALSE(假将是一个NAN,这是由IsNumeric并转向FALSE),并让我知道它检测到它。 但是,这似乎并没有工作。

任何人都可以指出我的错误?

有没有更好的方法来searchstring? 喜欢,我可以只search“CYL”,并说它检测到任何这些变化?

你应该使用InStr函数来做这样的比较:

 If InStr(1, Cells(7, j), "CYLINDER") > 0 Or _ InStr(1, Cells(7, j), "CYLINDERS") > 0 Or _ InStr(1, Cells(7, j), "CYL") > 0 Then MsgBox ("Detected the string CYLINDER") j = j + 1 MsgBox ("j equals " & j) Else MsgBox ("Did not detect the string CYLINDER") End If 

有关此function的更多信息,请访问MSDN, url为:https://msdn.microsoft.com/en-us/library/office/gg264811%28v=office.15%29.aspx

为了避免不同的情况(如@Sgdva所build议的),您有几个select:

 If InStr(1, Cells(7, j), "CYLINDER", vbTextCompare) > 0 Or _ InStr(1, Cells(7, j), "CYLINDERS", vbTextCompare) > 0 Or _ InStr(1, Cells(7, j), "CYL", vbTextCompare) > 0 Then MsgBox ("Detected the string CYLINDER") j = j + 1 MsgBox ("j equals " & j) Else MsgBox ("Did not detect the string CYLINDER") End If 

要么

 If InStr(1, UCase(Cells(7, j)), "CYLINDER") > 0 Or _ InStr(1, UCase(Cells(7, j)), "CYLINDERS") > 0 Or _ InStr(1, UCase(Cells(7, j)), "CYL") > 0 Then MsgBox ("Detected the string CYLINDER") j = j + 1 MsgBox ("j equals " & j) Else MsgBox ("Did not detect the string CYLINDER") End If 

要么

在模块顶部使用Option Compare Text ,如下所示: https : //msdn.microsoft.com/en-us/library/office/gg278697.aspx

同时,您可能要考虑插入行:

 Option Explicit 

(为了良好的编码习惯)。

不知道你试图用jvariables来完成什么,因为它似乎没有任何关联。 除了我似乎已经确定了你的代码中的错误和拉尔夫提供的答案。 Cells(7, j)应该是Cells(i, 7) 。 完整的代码将是:

 Sub searchandpaste() Dim stopvar As Variant Dim i As Variant Dim j As Variant Dim k As Variant Dim TestVal1 As Variant Dim TestVal2 As Variant i = 0 j = 0 Do While stopvar = 0 i = i + 1 MsgBox ("Row " & i) MsgBox ("j equals " & j) 'If the first cell is empty, that means we've hit the end of the worksheet, and it stops the do-while loop TestVal1 = Cells(i, 1) If TestVal1 = 0 Then stopvar = 1 Else TestVal2 = Cells(i, 6) If IsEmpty(TestVal2) = True Then MsgBox ("Detected Empty Cell in Column 6") j = 1 ElseIf TestVal2 = "XXXX" Then 'This means we have a place we need to insert a value MsgBox ("Detected XXXX in Column 6") 'We know at this point that in Cells(6,i) we have a value we need to insert. Thus, we need to search Cells(7,i) for key text If InStr(LCase(Cells(i, 7)), "cyl") > 0 Then MsgBox ("Detected the string CYLINDER") j = j + 1 MsgBox ("j equals " & j) Else MsgBox ("Did not detect the string CYLINDER") End If End If End If Loop End Sub