nØthing specia¡

Sources

Posts

129 posts

워크시트 출력을 빠르게 하는 방법

nØthing specia¡|2018년 4월 27일

vba의 속도를 높이는 방법중 가장 잘 알려진 것은 1)화면출력을 일시 정지하는 방법, 2)재계산을 잠시 자동에서 수동으로 변경하는 방법, 3)이벤트을 임시로 막는 방법이 있다. 1)번은 vba로는 화면입출력이 느려 부담스럽다는 것을 의미한다. 화면입출 횟수를 되도록 줄이는 것이 좋다. 2)를 하는 이유는 워크시트의 내용을 변경하면 모든 셀의 수식/함수가 이를 반영하느라 다시 계산한다(변경된 부분이 수식/함수와 전혀 무관한 곳이라도 말이다) 또한 3)의 경우 이벤트프로시저를 활용하는 경우가 많치 않아 그닥 필요하진 않지만, 워크시트에 출력하는 경우라면 _Change()이벤트가 있으면 매번 호출하게 된다. 그래서 아래와 같은 코드를 출력에 앞서 흔히 사용하게 된다. With Application

의미가 없어져 버린 IIf()함수

nØthing specia¡|2018년 4월 25일

코드를 한창 만들고 난 후 리뷰를 하는 과정이 있는데, 그 과정에서 알고리즘을 개선하거나 오류를 잡거나 코드를 줄이는 최적화를 하곤 한다. 얼마 전 아래와 같은 코드가 있었다. glDemoRun = IIf([C1].Value = "DEMO", True, False) 이 코드에선 IIf() 함수(인라인 IF함수)를 이용하여 한 줄로 C1셀의 값이 DEMO인지 아닌지에 따라 논리값을 돌려준다. 그러나 따지고 보면 의미가 없다. 이미 [C1].Value = "DEMO" 연산의 결과 논리값이 나오기 때문이다. 그래서 코드는 다음과 같이 줄어 든다. glDemoRun = [C1].Value = "DEMO"

흔히 보는 특별하지 않은 엑셀 팁

흔히 보는 특별하지 않은 엑셀 팁

nØthing specia¡|2018년 4월 19일

흔하게 만나는 엑셀팁인데, 지난 번 모대학교 파생상품금융 강의에서 지루한 시간을 때우기 위해 준비한 것입니다. 지루한 강의실습중 단비같은 팁을 만나면 눈이 반짝 반짝거리더군요. (움직이는 GIF(일명 움짤)을 만들었는데, 이글루스 모바일 앱에선 첫 장만 보입니다) [DOWNLOAD]

우리가 몰랐던, 아니 자주 사용하지 않던 데이터구조체

우리가 몰랐던, 아니 자주 사용하지 않던 데이터구조체

nØthing specia¡|2018년 4월 16일

vba에서 자주 사용하는 데이터구조체는 배열, 딕셔너리, 컬렉션 등이다. 하지만 너무 단순한 것들이라 가끔 불편하지만, 익숙해서 그냥 쓰고 있다. 간만에 vba에서 큐, 스택 같은 구닥다리부터 최신식 구조체 몇 가지를 해시테이블만 빼고 대거 방출하고자 한다. Sub demoArrayList() Dim arrList As Object Dim item 'Create the ArrayList Set arrList = CreateObject("System.Collections.ArrayList") arrList.Add "Hello" arrList.Add "You" arrList.Add "There" arrList.Add

워크시트 출력에 대한 고민-배열의 출력

워크시트 출력에 대한 고민-배열의 출력

nØthing specia¡|2018년 4월 14일

vba를 이용하여 워크시트에 출력하는 일은 거의 필수적인 작업이다. 그런데 출력하는 작업은 vba의 속도를 떨어 뜨리는 주범중 하나이다. 그래서 추천하는 방법이 하나의 루프에서 100번을 반복하면서 100번을 출력하는 것보다는 배열에 저장하고, 루프를 나오면 한번에 출력하는 것이다. 그런데 10,000개의 데이터를 워크시트에 한번에 출력하는 게 문제이다. Range("B2") = mat()는 B2셀에 배열의 (1,1)의 값을 출력한다. Sub CopyMatrixToRange() Dim mat(10, 10) As Double Dim i As Long, j As Long Randomize For i = LBound(mat) To UBound(mat)