나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 놀란토끼 (atmyhome)

추천:  2
파일:     조회:  1782
제목:   [RE]6420질문 다시 하기(강용림님 다시 함 봐 주세요)
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

1. 엑셀 버전(95,97,2000,2002):
2. 윈도우즈의 버전(win95,win98,winME,winNT,win2000,winXP):
3. CPU (486,PentiumI/II/III/IV...):
4. RAM (32,64,128,256,512MB,1G...): 

* 아래줄에 질문을 작성하세요 >>

전혀 문제를 해결하고 있지 못해서 다시 정확히 여쭤 볼께요.
range의 주소를 string형태로 받아서 선택된 모든 행을 delete하기 위한 프로시져인데
range속성에서 계속 에러가 발생합니다.

6420번 질문에 대한 답을 강용림님께서 시트가 달라서 그렇다고 하시는데, 그 말씀도 잘 이해가 안됩니다.
다음은 코드입니다.


Application.ScreenUpdating = False

Set shtDbAll = ThisWorkbook.Sheets("db all") >>>본래 데이터베이스를 담고 있는 쉬트
With shtDbAll
    .Activate
    .Unprotect
    .Range("A:A,C:C,P:P,R:R,W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC").Select  >>>필요한 칼럼만을 선택해서
End With

Selection.Copy    >>> 카피해서
shtDbAll.Range("a1").Select
Sheets("front").Activate >>>원래 워크북의 front 페이지 activate

Set wkNew = Workbooks.Add   >>> 새로운 워크북
Set shtNew = wkNew.Sheets(1)

With shtNew
    .Paste   >>> 붙여 넣기
    Set rngNumReg = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)) >>첫번째 칼럼에 등록 번호 데이터를 가지고 있는데, 모든 등록번호 선택
    Set rngGrad = rngNumReg.Offset(0, 10) >>이것은 수료식 날짜를 나타내는 칼럼임
    
    For Each mygrad In rngGrad  
        If mygrad <> "" Then   >>수료식을 한 사람들(날짜기입되어 있음)을 선별하기 위한 것임
            ReDim Preserve strAddress(intStr) As String  >>> 동적배열에 담아서
            strAddress(intStr) = mygrad.EntireRow.Address(False)
            intStr = intStr + 1
        End If
    Next mygrad
    
    
    For intStr = 0 To UBound(strAddress) - 1
        strAddr = strAddr & strAddress(intStr) & ","
    '    MsgBox strAddr
    Next intStr
    strAddr = strAddr & strAddress(UBound(strAddress))
   .Range(strAddr).Select >>straddr "31:31,33:33...... 199:199" 와 같은 결과를 가지는데 range 속성에서 에러가 발생합니다.
    selection.delete

==============[아노님님 글에 대한 답변입니다]==============

안녕하세요? 아노님

엑셀에서 편집-이동-옵션-상수를 체크-확인 한후 행전체삭제하는 것을 매크로기록기로 기록해보세요.

이 훌륭한 기능을 제껴두고 동적배열, Union 메써드를 이용한다는 건 불필요한 정력낭비라고 생각됩니다.(공부차원이라면 권장하지만..)

아래 구문은 아노님의 위 구문을 수정한것입니다.


Sub 단순화()
Dim shtNew As Worksheet
  Application.ScreenUpdating = False

  Workbooks.Add
  Set shtNew = ActiveWorkbook.Sheets(1)
  '새워크북을 미리 만들어 둡니다.
  
  With shtNew

    ThisWorkbook.Sheets("db all").Range("A:A,C:C,P:P,R:R,W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC") _
      .Copy shtNew.Range("A1")
    '복사해서 붙여넣기는 이런식으로 한줄로 작성하세요

    .Range(.Cells(2, 1), .Cells(65536, 1).End(xlUp)).Offset(0, 10). _
      SpecialCells(xlCellTypeConstants).EntireRow.Delete
    '수작업으로 편집-이동-옵션-상수를 선택한후 삭제하는 행위를 vba로 구현한 구문입니다.
    
  End With
End Sub
 
[불량 게시물 신고]  
황기성ㅋㅋㅋ 정력낭비겠군요^^*

그런데, 저로선

 ThisWorkbook.Sheets("db all").Range("A:A,C:C,P:P,R:R,W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC") _
      .Copy shtNew.Range("A1")
    '복사해서 붙여넣기는 이런식으로 한줄로 작성하세요
라는 부분부터 이상해 보입니다.

떨어진 범위를 복사하는 것은 보통의 경우 지원되지 않는 기능인데...어찌 이런 코드를 작성하셨는지?

그럼...행운이 있으시길...!
09-14 (17:59)
삭제 ■신고
놀란토끼??

안녕하세요? 황기성님

전 에러를 전혀 발견할수 없습니다. 어디서 에러나는지 구체적으로 말씀해주시렵니까?
09-14 (18:59)
삭제 ■신고
황기성뭔가 오해를...

?? 에러가 난다고 말씀드린 적이 없는데요^^;;

정력낭비라고 하셔서, 애초부터 데이터가 있는 영역만 복사해 붙이시면 되는 것이 아닌지 고민해 보시란 뜻에서 드린 말씀이었는데요...

삭제할 것이 아니라, 애초부터 데이터가 있는 영역만 복사해 붙여보심 좋겠단 뜻에서...

그럼...행운이 있으시길...!
09-15 (21:09)
삭제 ■신고
        
  

작성일 : 2003-09-14(17:01)
최종수정일 : 2003-09-14(17:01)
 


 ◎ 관련글

  제 목   작성자   날짜
6420질문 다시 하기(강용림님 다시 함 봐 주세요) 아노님 2003-09-13
[RE]6420질문 다시 하기(강용림님 다시 함 봐 주세요) 놀란토끼 2003-09-14
[RE]6420질문 다시 하기(강용림님 다시 함 봐 주세요) 황기성 2003-09-14