2013-09-27 43 views
1

我只想檢查我的代碼是否有問題。我的代碼試圖在列A中查找這個值1234,一旦找到它,它會選擇除此之外的值,如果條件滿足。如果沒有1234,那麼它什麼都不會做。不幸的是,即使1234列在A列中,它也沒有做任何事。當我刪除Else語句時,它能夠按照正常運行。我可以知道它有什麼問題嗎?在列和選擇中找到一定的值

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 
     Else 
     'Do nothing if 1234 is N.A. 
     Exit Do 
     End If 
     otherrow = otherrow + 1 
    Loop 

End Sub 
+1

爲什麼循環?您可以使用'.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/) –

+0

@SiddharthRout我需要找到1234,然後在它旁邊做一個選擇,或者在它之後做一些選擇,我想這可能是這樣做的。我不太確定如何做autofilter或.find – user1204868

+0

'我不太確定如何做autofilter或.find'我曾經在我以前的評論中爲您提供過鏈接。你需要詳細瞭解它們並理解它們。如果你是初學者,那麼你不能在大約7分鐘內做到這一點:) –

回答

2

請看this answer。它解釋瞭如何選擇單元格及其偏移量。

將您從上述答案中學到的內容應用於每個循環中,其中評論爲match found do something。您可以刪除該評論,或只是在IfEnd 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變量中的所有單元格。在上面的示例中,範圍設置爲A1A100,因此循環內的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語句。如果找不到1234Exit 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上給我一個想法的權利)

+0

是否有可能我不使用搜索用1234找到細胞?當我嘗試找到除1234的值之外的單元格時,它看起來很複雜。從我的代碼中,我使用do循環嘗試同時執行兩個操作,這兩個操作同時 – user1204868

+0

@ user1204868抱歉,但我很難理解您。你能否更努力解釋你的意思?例如, – 2013-09-27 09:31:31

+0

,我需要在Col A中尋找1234.一旦找到它,我將不得不在1234旁邊做一個選擇,它可以是Col B來進行說明。換句話說,如果1234是在A12,那麼我想選擇B12等等。我希望我已經清除了懷疑 – user1204868

0

特別感謝使我的工作

Sub testr1() 
Dim vCell As Range 
Dim otherrow As Long 

otherrow = 1 

    Do While otherrow <= Rows.Count 

     Set vCell = Sheets("Sheet1").Cells(otherrow, 1) 

     If vCell = 1234 Then 
      If Range("B5") = "B" Then 
       Cells(otherrow, 2).Select 
      End If 
     Exit Do 
     End If 
     otherrow = otherrow + 1 

     Loop 

End Sub