2012-12-08 49 views
0

我覺得這應該是一個足夠簡單的任務,但我沒有足夠的經驗,用Excel VBA知道如何處理它。基本上我想看看連續的兩個單元格,如果他們兩個都有特定的日期,就做點什麼。這兩個單元格將始終位於兩個特定列中的一列中。如何將一列中的日期與另一列中同一行中的單元格進行比較?

例如,如果D2和I2中的日期都早於11月,那麼我想對該行執行某些操作並移至下一行。然後,如果D3和I3中的日期都比11月早,那麼我想對該行做些什麼,然後移動到下一行。等等,等等......

我的問題不是關於如何做所有的步驟。這真的是關於如何去做這個比較。我知道如何通過執行以下操作來選擇只是這兩列的單元格:

Union(Range(Cells(2, 4), Cells(Rows.Count, 4).End(xlUp)), _ 
    Range(Cells(2, 9), Cells(Rows.Count, 9).End(xlUp))).Select 

但隨後發生在我身上,我不知道我怎麼會去比較兩個列的各個小區。我只知道如何遍歷每個單元格的一個列。

任何幫助將不勝感激。

回答

1

如何循環遍歷1列,然後使用Offset方法進行比較。

檢查:

Option Explicit 

Sub CheckTwoCols() 

Dim wks As Worksheet, lastrow As Long, rng As Range, cel as Range 

Set wks = Sheets(1) 'change sheet reference to suit your needs 

With wks 

    lastrow = .Range("D" & .Rows.Count).End(xlup).Row 

    Set rng = .Range("D2:D" & lastrow) 

    For each cel in rng 

     'column I is 5 columns to the right of column D 
     If cel < "11/1/2012" and cel.offset(,5) < "11/1/2012" Then 

      'process code 

     End If 

    Next 

End With 

End Sub 
+1

一些意見改進:總是用'Range.Value'和更好的甚至'Value2'在你的代碼。 2012年11月1日不是VBA的日期,它是11除以1除以2012年的11/2012th ...在您的代碼中有一些有趣的假設(爲什麼'Sheets(1)'?)。變量的命名不是非常具有說明性('rng'和'cel'),特別是如果在「進程代碼」位中有更多代碼位 –

+0

謝謝,Scott,我知道有一個更簡單的方法來處理它,但是我忘了去偏移量。 @K_B,你是對的斯科特的代碼並不完美,但我尋找的不是一個完美的執行,而是一個想法,所以這對我很好。希望看到這個的其他人能看到你的評論。 – Mike

+0

@K_B - 感謝您的評論。正如邁克所說,我只是把它寫成一個概念,所以這就是爲什麼它有點拼湊。但是,由於編寫不好的代碼是不好的做法,我做了一些編輯以改進可能查看答案的其他人。 –

相關問題