2013-06-29 193 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) 
相关问题