請看this answer。它解釋瞭如何選擇單元格及其偏移量。
將您從上述答案中學到的內容應用於每個循環中,其中評論爲match found do something
。您可以刪除該評論,或只是在If
和End If
之間添加代碼,以表明存在匹配。
Sub testr1()
Dim myRange As Range
' change this to any range you like to check
Set myRange = Range("A1:A100")
Dim searchTerm As String
' specify your search term
searchTerm = "1234"
Dim cell As Range
' cell will be each cell in your range
For Each cell In myRange
' checks whether the cell matches the searchTerm
If StrComp(cell, searchTerm, vbTextCompare) = 0 Then
' match found do something
End If
Next
End Sub
該代碼遍歷myRange
變量中的所有單元格。在上面的示例中,範圍設置爲A1
至A100
,因此循環內的cell
變量將爲第一次迭代的A1
,第二次爲A2
,依此類推直到A100
。
的StrComp()
功能每個單元格的值進行比較,您的searchTerm
這是在例如1234
。
match found do something
是我希望你會應用我提供的鏈接到上面的答案邏輯。
你原來的,但修改後的代碼
Sub testr1()
Dim vCell As Range
Dim otherrow As Long
otherrow = 1
Do
Set vCell = Sheets("Sheet1").Cells(otherrow, 1)
If vCell = 1234 Then
If Range("B5") = "B" Then
Cells(otherrow, 2).Select
End If
End If
otherrow = otherrow + 1
Loop Until IsEmpty(vCell)
End Sub
擺脫else語句。如果找不到1234
,Exit Do
將退出循環。所以如果第一個單元不等於1234
你退出循環,它不會移動到第二行。
此外,您需要添加一個布爾語句來防止出現infinite loop。我添加了Loop Until isEmpty(vCell)
讓循環知道一旦有空單元終止循環。還有其他更好的方法,但是如果你不想修改你的原始代碼太多,那麼這應該足以避免無限循環。
你的代碼實際在做什麼?
我一直在問自己你想用你的代碼實現什麼,我似乎無法給出一個很好的理由。您修改後的代碼(上面的代碼)將遍歷A列中的所有單元格,直到找到一個空單元格爲止。它會尋找一個匹配你的1234
(這應該真的被用作一個字符串,而不是一個獨立的數字 - 考慮用雙引號包裝它)。一旦找到匹配項,它將檢查相應行上的列B
的值是否爲B
。如果它確實那麼它會選擇那個單元格。
凡邏輯失敗...
是什麼,因爲只有通過整列迭代點的最後1234和它對應B
會被選中?這對我來說毫無意義。試着更好地解釋你想要達到的目標。
解決方案
基於最新的評論我已編輯的代碼,以滿足標準
Sub testr1()
Dim vCell As Range
Dim otherrow As Long
otherrow = 1
Do
Set vCell = Sheets("Sheet1").Cells(otherrow, 1)
If StrComp(vCell, "1234", vbTextCompare) = 0 Then
If StrComp(vCell.Offset(0, 1), "B", vbTextCompare) = 0 Then
vCell.Offset(0, 1).Select
' if all criterias are met then the cell will be highlighted in red
vCell.Offset(0,1).Interior.Color = RGB(255, 0, 0)
End If
End If
otherrow = otherrow + 1
Loop Until IsEmpty(vCell)
End Sub
您需要使用Range對象(vCell
)的.Offset(0,1)
屬性來選擇相應的單元格(一個到@mehow上給我一個想法的權利)
爲什麼循環?您可以使用'.AutoFilter' [EXAMPLE](http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting- to-another-excel-s)或'.Find/.FindNext' [EXAMPLE](http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/) –
@SiddharthRout我需要找到1234,然後在它旁邊做一個選擇,或者在它之後做一些選擇,我想這可能是這樣做的。我不太確定如何做autofilter或.find – user1204868
'我不太確定如何做autofilter或.find'我曾經在我以前的評論中爲您提供過鏈接。你需要詳細瞭解它們並理解它們。如果你是初學者,那麼你不能在大約7分鐘內做到這一點:) –