PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2019/06/04 14:50:35
Name 산양
Subject [질문] vba 학습 조언을 구합니다.
사회과학계열 졸업한 비전공자입니다.

업무자동화에 관심이 많아 vba와 파이썬을 고민하다, 일단 당장 엑셀과 파워포인트에 집중하고자 vba를 먼저 배우려고 합니다.


현재 엑셀 실력은 다음과 같습니다.

- 엑셀에서 기본적으로 제공하는 함수와 기능을 모두 다룰 수 있음
- 매크로 녹화 기능을 이용해 만든 코드를 vbe에서 역공학하여 조건이나 참조 셀을 간단히 수정 할 수 있음.
- for문, do until/while문, select case문 기본적인 구조 알고"는" 있음.


vba를 다루면서 어려웠던 점은 다음과 같습니다.

- 변수의 선언(이건 이해했습니다.)
- 각 객체의 호출명과 호출방식, 메서드, 프로퍼티명


위와 같은 어려움 때문에 변수 선언 후 코딩다운 코딩을 해보려 해도 항상 객체 호출과정에서 오류가 발생하는 상황이라, 지금은 기존 매크로 녹화 후 편집기능을 이용해 vba를 적용하고 있습니다.


물론 이정도만 되어도 구글신의 가호를 받은 복붙으로도 어느정도 퍼포먼스가 나오겠지만 하기하는 두가지 이유로 vba를 좀 더 심도있게 배우고 싶습니다.

- 결과값 셀에 vba를 이용한 결과값이 아닌 함수를 이용한 값을 출력할 시 1) 해당 함수값을 그대로 재사용할 수 없어서 값으로 복사 과정이 추가로 요구됨, 2) 사용하지 않아도 될 셀까지 계산 및 참조가 들어가 작업속도가 저하됨
- 엑셀 뿐 아닌 파워포인트 오브젝트 정렬 및 크기 재설정 같은 단순 반복 작업에 사용할 모듈(이걸 라이브러리라고 하나요?) 생성


현재 아이엑셀러를 메인으로 학습중인데 이중for문을 이용한 이중유효성 검사 부터 갑자기 어려워져서 멘붕이 와 질문드립니다.

조언 주시면 감사하겠습니다. 질문 읽어주신 분들 모두 좋은하루 되시길 바랍니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
어리버리질럿
19/06/04 18:58
수정 아이콘
저도 vba에 관심이 있어 공부중인데요. 전 책을 한 권 구입하여 예제 코드를 봐가며 학습했습니다.
결국 예제에 나와있는 다양한 코드를 내 상황에 어떻게 적용하느냐의 문제라 생각해요.
전 지방에 살고 있는데 책 저자의 vba강의를 들으러 1박2일로 서울 간적이 있었는데요. 그 때 저자분께서 이런저런 팁과 좋은 말씀 많이해주셨는데 크게 두 가지가 기억에 남네요.

1. 여기에 오신 여러분 중 vba를 손에 넣을 수 있는 사람은 10%미만일 것이다. 그만큼 많은 노력을 필요로 하지만 그 열매는 달콤하다.

2. vba는 머리보다 손가락이 기억한다. 많이 작성해보고 사용해보아야 한다.

아무쪼록 화이팅입니다!!
19/06/05 08:41
수정 아이콘
답변 감사합니다. 시간이 해결해주겠지란 마음으로 계속 해봐야겠습니다.
19/06/04 22:52
수정 아이콘
직접 코팅하면 객체호출 오류나고 매크로 기록해서 실행하면 잘 된다는 단서에 초점을 맞춰서 답변드립니다.

프로시저에서 특정 셀에 접근할 때 그 상황에서 어떤 시트(sheet)가 Activated 되어 있는지가 중요합니다. 프로시저가 Activated 되어 있지 않은 시트의 셀의 값을 참조하거나 기록하는 경우에는 반드시 어떤시트인지를 코드에서 명시해주어야 합니다. 시트가 명시되지 않은 상태에서 그냥 Range나 Cells 를 사용하시면 VBA는 그 앞에 ActiveSheet. 가 생략된 것으로 간주하고 현재 활성화된 시트의 해당 셀에 접근하게 됩니다.
19/06/05 09:00
수정 아이콘
그 부분은 이해가 된 상태입니다. 그런데 제가 여전히 혼돈스러운 지점은, 간단히 예를 들어 A열부터 H열까지의 값이 입력된 상태에서, 데이터가 있는 행까지만 J열에 합을 내는 서브루틴을 구현하고자 한다면,


Sub sum()

Dim i As Integer
Dim lastrow As Integer
Dim stack As Range

'이렇게 변수를 정의한 뒤,

lastrow = Sheets("Sheet3").Cells(1, 1).End(xlDown).Row

Do
stack = Sheets("Sheet3").Cells(10, i).Select
stack = Application.WorksheetFunction.sum("A1:H1")
i = i + 1
Loop Until i = lastrow

End Sub


저는 이런 식으로 구현을 할 거 같은데, 문제는 중간중간에 들어가는 인수가 이게 range를 사용할 때 쓰는 프로퍼티인지.. cells를 사용할 때 쓰는 프로퍼틴지.. 아직도 낯설기만 합니다. 실제로 구현해보니 오버플로 뜨네요 크크크크...


아직 제가 뭘 모르는 지 정확히 모르는 상태라 제 상황을 맞게 묘사하고 있는지도 모르겠지만 어쨌든 이런 상황입니다..
어리버리질럿
19/06/05 14:39
수정 아이콘
(수정됨) 변수 선언시 stack을 range로 선언하셨는데 range는 개체변수라 set을 써야해요. integer와는 상황이 다르달까요?

stack = Sheets("Sheet3").Cells(10, i).Select

요 부분을

Set stack = Sheets("Sheet3").Cells(10, 1)

이런 식으로 바꿔야 합니다.

그리고 stack = Application.WorksheetFunction.sum("A1:H1") 요 부분도
앞부분은 stack은 range이니 다른 변수로 바꿔야 할거 같구요. sum이후의 합계 범위도 sum(Range("A1:A10")) 이런 식으로 바꿔야 합니다.
예를 들면

Sub sum()

Dim i As Integer
Dim lastrow As Integer
Dim stack As Range
Dim 결과 As Integer

'이렇게 변수를 정의한 뒤,

lastrow = Sheets("Sheet3").Cells(1, 1).End(xlDown).Row



Do
Set stack = Sheets("Sheet3").Cells(10, 1)
결과 = Application.WorksheetFunction.sum(Range("A1:A" & i + 1))
i = i + 1
Loop Until i = lastrow

MsgBox 결과

End Sub

이런 식으로 하면 A열의 합계가 메세지박스에 나타날거에요.
아델라이데
20/02/14 14:06
수정 아이콘
저같은 경우에는 결국은 책보다는 인터넷이 더 도움이 되더군요. vba로 엑셀매크로 만들어놓으면 여러모로 업무에 편하긴 합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
134155 [질문] 마장동 축산시장 고기집 추천해주세요 [1] Dwyane3649 19/06/06 3649
134154 [질문] [삼탈워] 처음 시작 난이도는 뭐로 해야할까요? [8] 리들6196 19/06/05 6196
134153 [질문] 우연히 중고등학교 동창 만나면 아는척 하실거같나요? [22] 레너블8460 19/06/05 8460
134152 [질문] 인터넷 공유기 질문입니다. [6] 삭제됨2501 19/06/05 2501
134151 [질문] 액자 구매 질문 드립니다 파핀폐인2061 19/06/05 2061
134150 [질문] 세입자분께서 창문틀을 깨놓고 갔는데 보상 청구 가능한가요? [10] 삭제됨3327 19/06/05 3327
134149 [질문] 경제학 질문입니다. 수확체감과 규모에 대한 수확불변이 동시에 발생가능? [3] 주전자4288 19/06/05 4288
134148 [질문] 어쎄씬 크리드 해본적 없는데 오딧세이 할만 할까요? [21] 언니네 이발관3692 19/06/05 3692
134147 [질문] 금융 앱 질문입니다. [4] 신이주신기쁨2288 19/06/05 2288
134146 [질문] 축가로 부르기 좋은 락발라드 추천해주세요! [16] 성세현11213 19/06/05 11213
134145 [질문] 스타1 헌터 팀플 같이 하실 분 계실까요? [6] 2982 19/06/05 2982
134144 [질문] 이륙허가 요청합니다 [14] Todbecool3283 19/06/05 3283
134143 [질문] 회사 인사카드에 이런 것도 작성하나요? [7] 캐모마일3523 19/06/05 3523
134142 [질문] 가산디지털단지역에는 PC방이 없나요? [3] 분당선6965 19/06/05 6965
134141 [질문] 삼성 노트북 펜 S 구매 고려중인데요 [8] F.Nietzsche2826 19/06/05 2826
134140 [질문] NBA 파이널 3차전 단관 drunken.D1696 19/06/05 1696
134139 [질문] 원룸에 하자가 있어서 계약 해지를 할 때... [3] 비싼치킨4093 19/06/05 4093
134138 [질문] 런던에서 가볼만한 곳이나 사올만한 것? [6] 러브어clock2980 19/06/05 2980
134137 [질문] 크롬 최신 버전에서 저만 한글 입력문제가 생기나요 Rebirth2005 19/06/05 2005
134136 [질문] [삼탈워] 애비초즌이 고장났습니다. 고치는 방법 좀 알려 주세요. [5] Ws4740 19/06/05 4740
134135 [질문] 와이파이 수신기 추천요청 및 질문입니다 [1] 스핔스핔2212 19/06/05 2212
134134 [질문] 선물용 기계식 키보드 무선 마우스 추천 부탁드립니다. [16] The Warrior4157 19/06/05 4157
134133 [질문] 여러분이 원하는 축구경기는?? [24] 표절작곡가3437 19/06/05 3437
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로