2017-06-15 123 views
1

是否可以在列中搜索特定值?Excel - VBA - 在单元格内搜索特定值

我希望能够搜索列“B”中的所有单元格,并在其中查找“单词”“feas”(不区分大小写)。我还有其他的一切,只需要知道这是否可行或如何完成。

我当前的代码如下所示:

Sub PriorityAIMS() 

    ActiveSheet.Name = "Raw Data" 

    Dim ws As Worksheet 
    Set ws = Sheets("Raw Data") 

    Dim ws1 As Worksheet 
    Set ws1 = ThisWorkbook.Sheets.Add(After:= _ 
      ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 
    ws1.Name = "FEAS" 

    ws.Activate 
    Row = 2 

    Dim i As Integer 
    For i = 1 To 1500 
     If (Cells(i, 2).Value = (HAS FEAS IN IT) Then 'This is the part that i'm struggling with 

      Copied = ws.Range(Cells(i, 1), Cells(i, 17)).Value 'If possible, this would cut and paste so it deleted the original 
      ws1.Activate 
      ws1.Range(Cells(Row, 1), Cells(Row, 17)).Value = Copied 

     Row = Row + 1 

     ws.Activate 

     End If 

    Next i 
End Sub 

编辑:只是为了澄清,在B列的值将永远只是“FEAS”。这将是一个完整的句子,但如果它包含“french”,那么我希望IF函数能够工作。

+1

查找到INSTR() –

+1

查找到'Find'(不是看每个单元更快)。 Feas是西班牙文字吗? –

回答

1

FindFindNext很好地工作(并很快!)

'... 
    Dim copyRange As Range 
    Dim firstAddress As String 

    Set copyRange = ws.Range("B1:B1500").Find("feas", , , xlPart) 

    If Not copyRange Is Nothing Then 
     firstAddress = copyRange.Address 
     Do 
      ws2.Range(Cells(Row, 1), Cells(Row, 17)).Value = Intersect(copyRange.EntireRow, ws.Columns("A:Q")).Value 
      Row = Row + 1 
      Set copyRange = Range("B1:B1500").FindNext(copyRange) 

     Loop While copyRange.Address <> firstAddress 
    End If 
    '... 
+1

您可以从'Loop While'中删除'Not copyRange Is Nothing',因为您不会更改范围为'B1:B1500'的值,那么'copyRange'将始终是某种东西(前提是它首先找到了某种东西) - 所以只需检查它何时回到第一个地址。 –

+0

@ DarrenBartrup-Cook好点! - 感谢那。我已经更新了答案 – CallumDA

+0

我有点麻烦,将其纳入我的宏。如果我复制并粘贴并确保设置了所有变量,我仍然在'= Intersect(copyRange.Row,(.Row部分)'处得到类型不匹配错误。任何想法为什么这是? – Dullspark