2013-06-29 2 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

당신은이 작업을 수행 할 수있는 두 개의 열을 결합합니다

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

이봐, 수 당신은이 코드를 설명합니다. li 거북이? :) – ComputerFellow

+0

1000 개의 셀에 대해 정상적인 'IF'테스트와 동일한 VBA를 실행합니다. 이것은 = IF (B1 <> "", B1, A1)'을'A1'에 넣고'A1000' **을 **없이 ** 표준을 가지고 이것을 시도한다면 일어날 순환 참조를 일으키지 않고 복사하는 것과 같습니다. 공식. – brettdj

+0

@user는 upvote에 감사하고 동의합니다. – 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 

위의 코드는 루프 Evaluate을 이용하지 않고

c.value= c.offset(,1)