2013-08-16 5 views
0

Excel에서 매크로를 쓰고 있습니다. 나는 코드 만이 수행하여 스프레드 시트에서 데이터 블록을 복용 한 :범위가 아닌 Excel DO

Range("E1:O25").Select 
Selection.Copy 

나는이 특정 스프레드 시트에 내가 원하는 값으로 분류되어 있다는 사실을 알고 있기 때문에 나는이 작업을 수행 할 수 있습니다 처음 25 줄. 향후 스프레드 시트의 경우이를 알 수 없습니다.

Range("O1").Select 
Do Until Selection.Value <> 0 
    'get last cell that has a 0 value 
    Selection.... 
Loop 
Range("O1: SELECTIONFROMLOOP").Select 
Selection.Copy 

하지만 그것은 내가에서해야 할 무엇인지 잘 모르겠습니다 '선택 ...' 나는 어쩌면 생각은 카운트 업 증분 변수를 가지고 있지만 난 정말 VBA 모범 사례를 알지 못한다. 누구에게 조언이 있습니까?

답변

0

내가 그것을 이런 식으로 할 것이다 :

Sub duh() 
    Dim start As Range: Set start = Range("o1") 
    Dim r As Range 
    Dim doCopy As Boolean: doCopy = False 

    For Each r In Range(start, start.End(xlDown)) 
     If r.Value <> 0 Then 
      If r.Row <> start.Row Then 
       Range(start, r.Offset(-1)).Copy 
       doCopy = True 
      End If 
      Exit For 
     End If 
    Next 

    If doCopy Then ActiveSheet.Paste Range("a1") 
End Sub 

첫째, 우리는에서 시작하는 세포로 start을 정의합니다. r은 평가할 셀을 나타냅니다. doCopy은 붙여 넣기가 완료되면 true로 설정됩니다 (복사 할 것이 없으면 false). 우리가 먼저 확인하기 위해 0이 아닌 값을 찾을 때

For Each r... 루프 (...이 정확히 당신이 원하는하지 않을 수 있습니다) 컬럼의 바닥을 통해 start에서 모든 셀을 통해

를 반복합니다 우리가 아직 첫 번째 줄에 있는지보십시오. 그렇다면 루프를 빠져 나갈 것입니다. 첫 번째 행이 아니라면 Range(start, r.Offset(-1)).Copystart에서 시작하여 r 위의 셀에서 끝나는 범위를 클립 보드에 복사합니다. doCopy을 True로 설정하고 루프를 종료하십시오. 마지막으로 doCopy이 True 인 경우에만 붙여 넣기를 수행하십시오.

1

정말 범위를 선택하고 싶지 않습니다. 대부분의 경우에는 필요하지 않습니다. "글로벌"변수의 큰 덩어리이기 때문에 나는 또한 클립 보드를 망치지 않을 것입니다.

"E1 : EX"에서 "O1 : OX"로 데이터를 이동하기 만하면 다음을 수행합니다.

i = startRow 
do while ThisWorksheet.Cells(i,col1).Text <> "" 
    thisWorksheet.Cells(i, targetCol).Value = ThisWorksheet.Cells(i,col1).Text 
    i = i + 1 
loop 
관련 문제