2015-07-21 98 views
0

我已經設置了一個表來獲取最後一行的內容。我想檢查從J到W最後一行的值。我想檢查所有值是否爲「是」,如果是,則將OK返回給變量。這是我到目前爲止,從下面應該清楚我想要做什麼:檢查最後一行範圍內的每個值[VBA]

lastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 
sName = ActiveSheet.Name 

For Each c In Worksheets(sName).Range(Cells(J, lastRow), Cells(W, lastRow)) 
    If c.Value = "YES" Then 
     vData = "OK" 
    Else 
     vData = "Error." 
    End If 
Next c 

謝謝。

+1

有一點要注意,我相信LASTROW = ActiveSheet.Range( 「A」 和Rows.Count).END(xlUp ).Row會給你列A中最後一行。 – MatthewD

+1

我同意MatthewD--在你的情況下,使用.UsedRange可能會更好,它給出了一張紙的全部區域到最右邊和最底部的對齊,其中a細胞是'使用'。請注意,這包括格式化更改,這可能不是您想要的(即:如果您的最後一個值在D10中,但是您在C11中格式化,則會給您D11)。 –

回答

4

Cells(x,y)需要兩個整數作爲參數,這是行,列不列,行!

嘗試

For Each c In Sheets(sName).Range(Cells(lastRow, 10), Cells(lastRow, 23)) 
+0

謝謝你。所有的工作,但由於某種原因沒有與工作表(sName),所以我刪除,它工作正常,因爲我在我想要的工作表內使用宏。 – Deany

+0

對不起......已更新我的答案......它應該是'Sheets(sName)'。如果你沒有'Sheets()'位,宏就會在'ActiveSheet'上運行,這可能不是你想要的。 –

2
Dim lRow As Long 
Dim lCol As Long 
Dim ws As Excel.Worksheet 

Set ws = Application.ActiveSheet 
lRow = ws.UsedRange.Rows.count 

lCol = 10 
Do While lCol <= 21 
    If ws.Cells(lRow, lCol).Value <> "YES" Then 
     vData = "Error." 
     Exit Sub 
    End If 
    lCol = lCol + 1 
Loop 
1

試試這個:

Public Sub checking() 

    Dim lastRow As Long 

    'Here, I take row count by using column "J" 
    'You can modify it if you need 
    lastRow = Sheets("sheetname").Range("J" & Rows.Count).End(xlUp).row 

    For Each cell In Sheets("sheetname").Range("J" & lastRow & ":W" & lastRow) 

     If cell.Value = "YES" Then 

      vData = "OK" 

     Else 

      vData = "Error." 

      Exit For 

     End If 

    Next cell 

    'Show result 
    MsgBox vData 

End Sub 
相關問題