我有一個範圍,包含不同列中的不同詞,範圍將是DT21:EH400。我想知道是否有一種方法,通過該範圍進行搜索,如果有一個字複製並粘貼到同一行也已開啓,但在B列在vba範圍內尋找文本
回答
下面的代碼可能工作
它搜索範圍內的字,並將搜索詞爲其中搜索詞發現
Dim strSearch as String
Dim rngData as Range
Dim rngCell as Range
strSearch = "Word to Search"
Set rngData = Range(Cells(21,124),Cells(400,138))
For each rngCell in rngData
If rngCell.value = strSearch Then
cells(rngcell.Row, 2).Value = strSearch
End if
Next rngCell
在循環之前設置rngData可能是個好主意嗎? – barryleajo 2014-11-20 23:24:34
如果您打算檢查每個單元格並連接到「單元格」(
Jeeped,我同意。尋找單個匹配是一種更有效的方法,而不是循環遍歷每個單元格。 – 2014-11-21 02:40:18
在該行的B列的值在查找功能內置應該比自己寫循環更快:
Sub findUsingFIND()
Dim searchString As String
searchString = Excel.Application.InputBox("Enter string please")
Dim targetArea As Range
Set targetArea = Excel.Application.InputBox("Select range to search", , , , , , , 8)
targetArea.Select
'Excel.ThisWorkbook.Sheets(1).Range("DT21:EH400").Select
Dim foundRange As Range
With targetArea
Set foundRange = _
.Find(What:=searchString, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
End With
If Not foundRange Is Nothing Then
ThisWorkbook.Sheets(1).Range("B" & foundRange.Row) = searchString
Else
MsgBox "Nothing found"
End If
End Sub
如果有字符串,然後上面可以適應於以下幾種情況:
Sub findSeveralUsingFIND()
Dim searchString As String
searchString = Excel.Application.InputBox("Enter string please")
Dim targetArea As Range
Set targetArea = Excel.Application.InputBox("Select range to search", , , , , , , 8)
targetArea.Select
'Excel.ThisWorkbook.Sheets(1).Range("DT21:EH400").Select
Dim foundRange As Range
With targetArea
Set foundRange = _
.Find(What:=searchString, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not foundRange Is Nothing Then
FirstAddress = foundRange.Address
Do
ThisWorkbook.Sheets(1).Range("B" & foundRange.Row).Value = searchString
Set foundRange = .FindNext(foundRange)
Loop While Not foundRange Is Nothing And foundRange.Address <> FirstAddress
Else
MsgBox "Nothing found"
End If
End With
End Sub
由於@ChrisNeilsen指出有一個,如果你需要執行搜索很多,這將是最好非常快的方法倍。這使用數組。我的理解相對較淺,爲什麼這種方法很快,但我相信它與數組將數據存儲在彼此相鄰的一組內存地址中的方式相關。下面是不同的方法良好的比較:
http://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/
這裏使用的變體類型的數組的宏:
Sub findUsingVARARRAY()
Dim vArr As Variant, vRes As Variant
Dim j As Long
Dim n As Long
Dim searchString As String
searchString = Excel.Application.InputBox("Enter string please")
Dim targetArea As Range
Set targetArea = _
Excel.Application.InputBox(prompt:="Select range to search", Type:=8)
Dim firstRow As Long
vArr = targetArea.Value2
ReDim vRes(LBound(vArr, 1) To UBound(vArr, 1), 1 To 1)
Dim r As Long, c As Long
For r = LBound(vArr, 1) To UBound(vArr, 1)
For c = LBound(vArr, 2) To UBound(vArr, 2)
' use vbTextCompare for case insenstitive comapre
' use vbBinaryCompare for case senstitive comapre
If StrComp(vArr(r, c), searchString, vbTextCompare) = 0 Then
vRes(r, 1) = searchString
Exit For
End If
Next c, r
targetArea.EntireRow.Columns(2) = vRes
End Sub
- 1. 在瞬間範圍內尋找閏年
- 2. 尋找是否在編程範圍內的某個範圍
- 3. ActiveCell.Address在範圍內VBA
- 4. Excel VBA:查找範圍內的對象
- 5. 動態範圍內的VBA範圍值
- 6. vba動態查找範圍
- 7. 文本對齊範圍內
- 8. VBA文本框的值到範圍
- 9. 從範圍獲取文本-VBA(Excel)
- 10. 在顏色範圍內尋找最接近的顏色匹配
- 11. 在一個範圍內尋找更大的數字
- 12. VBA查找 - 查找範圍錯誤
- 13. vba循環在非連續範圍內
- 14. 文本在一個範圍內對齊
- 15. 在動態範圍內從0找到最大數字VBA
- 16. VBA:在其中一個範圍內找到缺失的數字
- 17. 在範圍內查找文本並插入新行
- 18. 尋找最接近的塊範圍
- 19. 尋找補充日期範圍?
- 20. 尋找過多N表示法範圍
- 21. Android時間範圍尋找酒吧
- 22. VBA for excel問題:如何讓VBA搜索範圍內的多個文本?
- 23. 尋找一個範圍內的素數python
- 24. 查找範圍內的值
- 25. excel vba,找到一個範圍
- 26. Excel VBA。找到範圍異常
- 27. 使用Excel VBA查找範圍
- 28. 在另一個範圍內查找範圍條件
- 29. Excel VBA - 查找範圍內的最高值和後續值
- 30. ROUNDUP動態範圍內的VBA公式
是它是更多鈔票。你需要什麼? – 2014-11-20 22:51:06
是的我正在尋找vba中的代碼,這將做到這一點。 – user3562334 2014-11-20 22:52:32
查看本頁右側中間的*相關*問題,這些問題已經確定爲您的問題的解決方案。至少有一個鏈接似乎回答你的問題。如果您嘗試使用答案來回答您的問題,但遇到麻煩,請在此處編輯您的帖子以顯示您有TRIED的內容,我們很樂意提供幫助。 – Jeeped 2014-11-20 23:09:18