2016-07-29 65 views
1

我想在VBA中使用.find函數來查找列中值的實例,但是存在基於同一行上的條件進行的計算作爲找到價值的地方。這是有問題的,因爲儘管我所尋找的價值可能是相同的,但用於創造總分的標準卻不同。因此,我需要遍歷列中找到的所有值,並且想知道如何在vba中執行此操作。我知道findnext函數,但我永遠無法正常工作。查找列中的所有值並檢索數組中的地址

counted = Application.WorksheetFunction.CountIfs(cl.Range(finletter & "9:" & finletter & "317"), "Value", cl.Range("H9:H317"), wl.Range("A" & y.row).Value) 
     'Pol small low complex 
     If counted > 0 Then 
      MsgBox wl.Range("A" & y.row).Value 
     If cl.Range("C" & y.row).Value < 3 And cl.Range("D" & y.row).Value = 1 And cl.Range("E" & y.row).Value = "Interim" Then 

     wl.Range(y.Address) = 3.75 * counted 

回答

1

這裏是一個例子。說我們是在列A尋找文本 「LOVE」 和處理這些行中的數據:

Option Base 1 

Sub LookingForLove() 
    Dim s As String, rng As Range, WhichRows() As Long 
    Dim rFound As Range 

    ReDim WhichRows(1) 

    s = "LOVE" 
    Set rng = Range("A1:A25") 
    Set rFound = rng.Find(What:=s, After:=rng(1)) 
    WhichRows(1) = rFound.Row 

    Do 
     Set rFound = rng.FindNext(After:=rFound) 
     If rFound.Row = WhichRows(1) Then Exit Do 
     ReDim Preserve WhichRows(UBound(WhichRows) + 1) 
     WhichRows(UBound(WhichRows)) = rFound.Row 
    Loop 

    msg = UBound(WhichRows) & vbCrLf & vbCrLf 
    For i = 1 To UBound(WhichRows) 
     msg = msg & WhichRows(i) & vbCrLf 
    Next i 

    MsgBox msg 
End Sub 

enter image description here

注:

  • Exit Do防止循環永遠
  • 您的代碼將繼續循環WhichRows()的元素並處理這些行上的項目。
  • 你的代碼也可以創建一個範圍或單元格地址的動態數組。

另一種可供選擇的方法是使用VBA建立自動篩選和處理可見行。

相關問題