2012-10-02 406 views
1

實際上我非常驚訝地發現我很難找到答案。我有2列包含一堆數字(在同一工作表上)。我只想讓代碼說出「如果列1中的值>列2中的值,對列中的每一行都這樣做」。我試過比較Excel VBA中的兩列(大於/小於或等於)

If sheet.range("B2:B35").Value > sheet.range("C2:C35").Value Then 
'do something 
End If 

但是顯然它不能這樣工作。

+1

我相信你需要依次檢查每對元素......但我不碰Excel,更不用說VBA :) – 2012-10-03 00:06:24

+0

是的,因爲沒有表示行中所有內容的單個值2 - 35 –

回答

6

你需要考慮一個循環來檢查每一行與其他的獨立。

的想法是這樣的:

For i = 2 to 35 
    If Sheet.Range("B" & i).Value > Sheet.Range("C" & i).Value 
     'Do Something for Row i 
    End If 
Next 

Value可以,因爲它是隱含被省略,這意味着Sheet.Range("B" & i).Value返回相同的結果作爲Sheet.Range("B" & i)

此外,有許多方法根據處理單元根據您的需求。

Range() 'Can be used to address multiple cells at the same time over a range 
      ' or used to address a single cell as is done here 

    Cells() 'Can be used to address a single Cell by calling Cells("B" & i) as is 
      ' done above, or can reference the row and column numerically like 
      ' Cells(2, i) 

與上述任何一種方法可以與Offset()結合,如果你正在尋找一個給定的工作表中左右移動,如可用於:

Cells(2, 1).Offset(0, i) 'Addresses the Cell offset from "B1" by 0 columns and 
          ' i rows. 

我個人傾向於在這些情況下使用Cells(2, i),但我只是使用Range,因爲我從示例代碼片段中直接借用了它。

+0

事實確實如此簡單。嘆。謝謝。 – Kurt

+0

如果這更清晰 – enderland

+0

+1,您也可以使用'Sheet.Cells(i,2).Value'和'Sheet.Cells(i,3)',但是最好在兩邊都明確指定'.Value' '''或雙方隱含。目前有明確的LHS和隱含在RHS – barrowc

相關問題