2017-06-15 110 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