안녕하세요. 

윗행 내용을 아래행에 그대로 복사하는 방법에 대해 여쭙습니다. 간단한 질문이라 바로 이해가능하지만 

아래 그림으로 보시면, 무슨 질문인지 1초 안에 더 빨리 이해할 수 있습니다. 

질문은 위와 같이 매우 간단합니다. 

그러나 저는 이 문제로 무려 3개월 동안 고민중에 있습니다.

왜냐하면 0.000001초 라도 더 빠른 방법을 찾고 있습니다. 방법을 알려주시면 감사하겠습니다. 

위 예제는 첨부파일로 올렸구요. 파일안에  버튼이 3개가 있는데 윗행을 아랫행에 그대로 복사해주는 방법 3개입니다. 네. 이미 제가 사용하고 있는 방법입니다. 그런데 더 빠르게 하는 방법을 찾고자 여기에 질문드립니다. 

  • 첫째방법 :     원본_범위.Copy 대상_범위

말그대로 윗행을 copy 하여 붙여녛기를 실행합니다. 가장 느립니다. 이 방법은 아예 안쓰고 있습니다.

  • 둘째방법 :   대상_범위 = 원본_범위.Value

윗행의 Range 값을 그대로 아래행에 입력하여 결국 동일내용이 셀에 들어가게 하는 방법입니다. 이 방법은 Copy 를 사용하지 않았습니다. 좀 빠르긴 한데 이보다 더 빠른 방법을 찾고 있습니다. 

  • 셋째방법 :  Range("A3:K3") = Arr

배열에 넣고 한방에 뿌려주는 방법입니다. 더더 빠른 방법을 찾다가 배열도 생각했는데요. 제 생각에 가장 빠를 거 같다고 생각하는데, 정말 가장 빠른 방법인지도 의문이고, 이 보다 더 빠른 방법을 찾고 있습니다. 또는 제가 소스상에서 배열에 넣는 이 방식이 빠르지도 않은거 같고, 더욱 빠르게 배열에 넣는 방식이 있는 거 같기도 하구요. For 문 안돌리고 Range 내용을 배열에 자동으로 할당시키는 방법이라도요. 그러면 배열방법중 더 빨라질 수도 잇을거 같구요. 

 

이상과 같이 제 방식은 위 3개이구요. 여기 엑셀고수선생님께서 속도를 빠르게 할려면 [  셀.Value 접근을 최대한 줄이고,  메모리상에서 계산이 이루어지도록 해야한다 ] 고 하시더라구요. 저는 이 말씀이 무엇인지 처음에 이해를 못하다가, 최근에야 저 말씀이 얼마나 중요한 건지 경험하게 되었습니다. 그래서 메모리상에서 계산을 할려면 어떻게 해야할까? 에 대해서도 고민중입니다. 제발 어쨌든 최대한 빠르게 하는 방법을 요청드리오니 해결책을 제시하여 주시면 감사드리겠습니다. 

제 질문의 요약 : 

위 3가지 방법보다 더욱 빠르게,   0.00001초라도 더 빠르게 [ 윗행을 아랫행에 입력 ] 해주는 방법을 찾고 있습니다.  올려드린 예제에는 셀이 10개 뿐이라 아무 차이가 없이 다 빠르게 보이지만,   하나의 행이 100만개 셀이 있고 이걸 아래행에 붙여넣기 한다면,  1행 복사에 1시간이 걸릴 수도 있잖아요. 그러니 이는 매우 중요한 이슈라고 봅니다.

답변하시는 분께서 산만해질까봐 아래에 질문을 각각 나눔(재빨리 답변가능) :    

질문 1 :  빠르게하는 소스코딩, 빠르게 구현하는 아이디어, 방향 등은 무엇이 있을까요?  0.00001초 라도 빨라지면 너무 기쁠것 같습니다.

답변: 

질문 2 : 엑셀내부에 [ 윗행을 아랫행에 그대로 복사해주는 기능을 컴파일하여 ]   Library인가 Object 인가에 아예 끼어넣기를 할 수도 있나요? 이게 가능한가요?

답변 :

  • 이 질문을 하는 이유 : 어디에선가 이러면 더 빨라질 수도 있다는 글을 본거 같아서요. VBA 소스코딩은 인터프리터 방식이라 이걸 읽고 실행하는데까지 시간이 걸린다는 말을 여기 엑셀고수님들 글에서 본거 같아서요. 동일한 동작을 셀수식으로 구현한 것과, VBA소스로 구현한 방식중, 무엇이 더 빠르냐? 질문한 적이 있는데, 다들 [ 단연코 셀수식이 수십배 더 빠르다 ] 라고 대답해주시더라구요. 아~ 그때 알게 되었습니다. 이왕이면 셀수식이 있다면 그걸 쓰는게 맞지 복잡하게 VBA로 따로 소스코딩을 하는 것은 바보같은 짓이라는 것을 알게 되었습니다.  아~ 그래서 소스코딩만 생각할 것이 아니라 엑셀의 내부기능(?) 적인 대안을 찾는 것도 방법일 수 있겠다는 생각을 하게 되었습니다.

질문 3 : 기타 어떻게 해야 좀더 빠르게 0.00001초라도 빠르게 하는 방법에 대해서, 생각나는 거 아무거라도 적어주시면 감사하겠습니다. 

답변 : 

 

이상입니다. 감사합니다.