2013-06-29 226 views
2

我的表是這樣的:Excel 2010 VBA - 獲取當前單元格的左側單元格?

| A | B | ... 
--------- 
| 1 | a | ... 
--------- 
| 2 | | 
--------- 
| 3 | | 
--------- 
| 4 | b | 
--------- 

而且我想這是我的輸出:

| A | B | ... 
--------- 
| a | | ... 
--------- 
| 2 | | 
--------- 
| 3 | | 
--------- 
| b | | 
--------- 

所以我循環列B,每當有一個在B一個值,那麼我應該更換相應一個在A

到目前爲止,我已經試過這樣:

Sub LoopRange() 

    Dim rCell As Range 
    Dim rRng As Range 

    Set rRng1 = Sheet1.Range(A1, A1000) 
    Set rRng2 = Sheet1.Range(B1, B1000) 

    For Each rCell In rRng2.Cells 
     If Not IsEmpty(rCell.Value) Then 
      'SET THE VALUE OF THIS rCELL TO THE CELL THAT'S LEFT OF IT 
    Next rCell 

End Sub 

我該怎麼做?

回答

2

你可以這樣做結合,而不利用Evaluate循環:

Sub QuickKill() 
Range("A1:A1000") = Application.Evaluate("=IF(B1:B1000<>"""",B1:B1000,A1:A1000)") 
End Sub 
+0

哎,你解釋這個代碼一個李ttle? :) – ComputerFellow

+0

它在1000個單元上運行正常的「IF」測試的VBA等效。它相當於將'= IF(B1 <>「」,B1,A1)'放入'A1'中,並且不用**就拷貝到'A1000' **,如果您嘗試使用標準式。 – brettdj

+0

@用戶感謝您的支持和接受。 – brettdj

4

解決了!但退房brettdj的答案。我想這樣會更好。

Sub LoopRange() 

    Dim rCell As Range 
    Dim rRng As Range 

    Set rRng = Sheet1.Range("B1:B1000") 

    For Each rCell In rRng.Cells 
     If Not IsEmpty(rCell.Value) Then 
      rCell.Offset(0, -1) = rCell.Value 
     End If 
    Next rCell 

End Sub 
0

使用此代碼

For each c in range("a2"a8") 
c.value= c & " " & c.offset(,1) 
next c 
columns(2).delete 

上面的代碼將兩列

c.value= c.offset(,1) 
相關問題