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로 엑셀매크로 만들어놓으면 여러모로 업무에 편하긴 합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
134134 [질문] 선물용 기계식 키보드 무선 마우스 추천 부탁드립니다. [16] The Warrior4132 19/06/05 4132
134133 [질문] 여러분이 원하는 축구경기는?? [24] 표절작곡가3408 19/06/05 3408
134132 [질문] 아이패드미니5, 서피스프로6 펜슬질문 [4] 젠지훈2202 19/06/05 2202
134131 [질문] pdf파일을 사진처럼 볼 수 있는 뷰어가 있을까요? [4] ...And justice3271 19/06/05 3271
134130 [질문] 갤럭시 S10 보호 필름 바꿀 수 있나요? [11] 최종병기캐리어5618 19/06/05 5618
134129 [질문] 축구 한일전 중계 해설 관련 [7] 가라한3292 19/06/05 3292
134128 [질문] 잠실야구 직관티켓 관련 질문입니다! [3] 레프1619 19/06/05 1619
134127 [질문] 양창형 거실 인테리어질문 카오루2411 19/06/05 2411
134125 [질문] 높이가 낮은 탁상용 공기 청정기 추천 좀 부탁드립니다. [5] 귀여운호랑이2491 19/06/05 2491
134124 [질문] 8월 스페인 여행 질문입니다! [2] Robbie2409 19/06/05 2409
134123 [질문] kms tool 이라는게 멀웨어로 검색되서 삭제했는데요.. [10] Rei_Mage4742 19/06/05 4742
134121 [질문] 윈도우 제품이 하나도 없으신 분들 불편하지 않나요? [15] YX3042 19/06/05 3042
134120 [질문] 한화 이글스 최강한화 응원을 보통 몇회에 하나요? [15] 즐겁게삽시다2825 19/06/05 2825
134119 [질문] 월드워z 게임 해보신 분 계신가요? [6] 불같은 강속구4796 19/06/05 4796
134118 [질문] 이컴퓨터 사양 업글 가능할까요? [9] DAUM3966 19/06/04 3966
134117 [질문] 백신추천+ESET internet security 인터넷속도저하 문제 [2] AKbizs4398 19/06/04 4398
134116 [질문] 지방근무 해야하는 회사때문에 고민입니다 [40] G5106737 19/06/04 6737
134115 [질문] 길고양이 질문 드립니다. [3] 두견3997 19/06/04 3997
134113 [질문] 운동과 술 [4] 망탕2673 19/06/04 2673
134112 [질문] 롤파크 좌석 어떤가요? [9] 4408 19/06/04 4408
134111 [질문] 한글 프로그램 질문 [2] Right2524 19/06/04 2524
134110 [삭제예정] 인턴 퇴사 및 월급 수령에 관해 질문 드립니다 [6] 쌍무지개4668 19/06/04 4668
134109 [질문] 나이를 먹을수록 고집이 쌔지는건 자연스러운 현상인가요? [22] 나이스데이5748 19/06/04 5748
목록 이전 다음
댓글

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