코딩/vba
-
VBA/.Value와 .Formula의 차이코딩/vba 2023. 12. 21. 15:08
나는 아마추어 프로그래머라서 코딩을 자주 하는 편은 아니고 필요할 때 그때 그때 한다. 그러다보니 한 번 코딩하고 난 뒤 한참 뒤에 다시 사용하려고 하면 기본부터 헷갈린다. 어제까지 파이썬을 써서 만든 자료를 엑셀에서 수식으로 연동시키려 몇 달 동안 쓰지 않은 vba를 사용하려 하니 '뭘로 시작하더라???'라고 어이없게도 Sub부터 생각이 안난다. 아마 VBA를 직업적으로 쓰는 사람들은 별로 없으니 다른 사람들도 내 심정 이해가 되지 않을까 싶다. VBA로 셀에 수식이나 값을 입력할 때 .Value와 .Formula에 대한 구분법 Sub value_formula() Range("a1").Value = 100 Range("a2").Formula = 100 Range("b1").Value = "=a1+a2"..
-
[VBA/Set 키워드] 개체 참조 Set 키워드코딩/vba 2023. 6. 6. 17:28
아마 VBA 초보프로그래머에게 가장 헷갈리는 것 중 하나가 set일 것이다. 어떤 변수는 그냥 정의하고 어떤 것은 set을 붙여야 한다. 그 기준에 대해 설명한다. 변수가 객체의 참조를 세팅하면 set, 객체 자체가 아닌 객체의 값만 가져올 때는 set을 사용하지 않는다. set을 사용하면 객체의 내용을 조작할 수 있다. set을 사용하지 않으면 객체에 저장된 값만을 불러온다. 객체에는 아무런 영향을 주지 않는다. 다시 말하면 객체를 직접 조작하기 위해서는 set을 사용하고 값만 필요한 객체는 set이 필요없다. VBA에서 Set 키워드를 사용하여 개체를 정의할 때와 그렇지 않을 때의 차이점은 다음과 같다. 참조 유형: Set 키워드를 사용하여 개체를 정의할 때, 변수는 해당 개체에 대한 참조를 보유한다..
-
[VBA/Array] Not Not Array 로 배열원소 확인하기코딩/vba 2023. 4. 1. 14:43
배열 확인: 배열의 존재와 원소의 존재 배열의 존재 확인 배열이 존재하는 지는 IsArray()로 확인할 수 있다. VBA의 IsArray() 함수는 인자로 전달된 변수가 배열인지 여부를 판별하는 함수이다. 인자가 배열이면 True를 반환하고, 배열이 아니면 False를 반환한다. 예를 들어, 다음과 같이 IsArray() 함수를 사용하여 변수가 배열인지 여부를 판별할 수 있다. Sub sample_IsArray() Dim arr() As Variant Dim sng As Single Debug.Print IsArray(arr) ' True 출력. Debug.Print IsArray(sng) ' False 출력. End Sub 위 코드에서는 arr 변수가 배열이므로 IsArray(arr)이 True가 되..
-
[VBA] 영역을 csv로 저장하기코딩/vba 2023. 3. 31. 14:58
영역을 CSV로 저장하기 방법 1 영역을 복사 새로운 워크북 열기(workbooks.open(파일이름)) 영역 붙여넣기 새로 저장(csv) 위 절차로 하니 ',' 없이 저장되어 열 구분이 안됐다. 다시 수정하여, 방법 2 영역 복사 새로운 워크북 열기(workbooks.open(파일이름)) 영역 선택(복사 영역과 같은 크기) 영역 붙여넣기 새로 저장(csv) 아예 저장이 되지 않는다. csv 파일에 아무것도 없다. 디버그 모드로 하나씩 검증을 해봐도 4까지는 정상적으로 붙여넣는게 보인다. 하지만 열어보면 아무것도 없다. 귀신이 장난을 쳤나, 아니면 맥이라서 맥이는건가? 방법 3 영역 복사 새로운 워크북 추가(workbooks.add) 영역 붙여넣기 새로 저장(csv) 방법 3이 제대로 작동된다. 결론은 ..
-
[VBA/Tip] Array 사용 시 Lbound() 문제코딩/vba 2023. 3. 27. 08:04
배열 작업을 할 때 일반적으로 루프문에서 Lbound()..Ubound()로 순환을 정하는데, 대부분의 경우는 배열 시작을 0으로 해서 문제가 없지만 Range를 Variant Array로 변환시켜 작업할 때는 1로 순환을 시작해서 곤란하다. 당장 작업한 경우는 쉽게 어떤 배열인지 아니까 순환 시작점이 고민스럽지 않은데, 오래 된 코드를 수정할라치면 뭐가 뭔지 내가 만들어 놓고도 이해가 안된다. 그리고 자주 쓰는 코드들은 라이브러리 형태로 사용하니까 이런 경우 배열을 구분못해 생기는 오류가 종종 생긴다. 매일 코딩을 하는게 아니라 그때 그때 필요할 때 하니까 이런 일이 생긴다. 이건 왜 인덱스가 0이고 이건 또 왜 1이냐? 이런 문제가 부지기수다. 이런 문제로 배열이 산으로 가버리고 만다. 그래서 이런 ..
-
[VBA/Tip] Range().Value 와 For...Next loop의 효율성, 속도 비교 - ChatGPT의 거짓말코딩/vba 2023. 3. 27. 07:37
아래 내용은 ChatGPT로부터 받은 내용인데, 실제 테스트를 해보니 아래 내용을 인정할 수가 없었다. ChatGPT의 답변 일반적으로 VBA에서 For 루프를 사용하는 것이 범위 할당보다 더 빠르고 효율적입니다. 이유는 Range 객체를 작성하고 값을 할당하는 작업이 많은 더 많은 계산을 필요로 하기 때문입니다. 따라서, For 루프를 사용하여 각 셀에 값을 할당하는 것이 더 빠르고 효율적입니다. 그러나, 데이터의 크기와 복잡성에 따라 상황이 달라질 수 있으므로, 작업을 수행하기 전에 시간을 측정하고 둘 중 어떤 것이 더 효율적인지 확인하는 것이 좋습니다. set r = Range("A1:A100") r.Value = 100 For i=1 to 100 Cells(i,1)=100 Next i 테스트 결과..