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로 엑셀매크로 만들어놓으면 여러모로 업무에 편하긴 합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
134302 [질문] 자취생 밑반찬 만들기 유튜브나 블로그 추천부탁드립니다! [7] 훈남아닌흔남3517 19/06/10 3517
134301 [질문] [POE] 왕초보 질문입니다.. [4] 타키쿤4051 19/06/10 4051
134300 [질문] 램 3개 공유 되는지 질문드립니다. [3] papaGom2671 19/06/10 2671
134299 [질문] 트위치 추천채널이 왜 안뜰까요? [2] 세츠나5932 19/06/10 5932
134298 [질문] 노트북 윈도우10 배율 문제 때문에 질문드려요. monkeyD2838 19/06/10 2838
134297 [질문] 남자 귀걸이 어떻게 보이시나요? [48] vigorian 12501 19/06/10 12501
134296 [질문] 서울에 있는 기업 중 로비에 회사 히스토리나 기업정신 같은 걸 가진 곳이 어디 있을까요? [5] 포메라니안2743 19/06/10 2743
134295 [질문] 컴퓨터 램 업글을 하려고 합니다 [10] 꿀꿀꾸잉2459 19/06/10 2459
134294 [질문] 컴퓨터 지금 살까요? [8] Dark3361 19/06/10 3361
134293 [질문] 사고 영상같은거 보면 앞차로 인해 사고가 나도 보통 그냥 가던데 [6] Cand2735 19/06/10 2735
134292 [질문] 엑셀 고수분들께 질문드립니다. [3] 시시포스2079 19/06/10 2079
134291 [질문] 종로 근처에 복사집 있나요? [4] 교자만두3144 19/06/10 3144
134290 [질문] 동적 디스크 풀고 윈도우 옮기려고하는데 잘 되지 않네요 [1] Brandon Ingram2138 19/06/10 2138
134289 [질문] 층간소음 해결? 방지법 추천부탁드립니다(매트) [6] Secundo3059 19/06/10 3059
134288 [질문] Fm2018 질문입니다. [9] 찬양자2492 19/06/10 2492
134287 [질문] 매불쇼 어디서 들어야하나요? [5] 제논1989 19/06/10 1989
134286 [질문] 일본에서 음식점 맛집 검색할때 어떻게 찾으시나요? [16] Pauseball3496 19/06/10 3496
134285 [질문] 법인장기렌트카 어떻게 알아보면 괜찮나요? [4] HateU2230 19/06/10 2230
134284 [질문] 사진을 배경으로 해서 영상 삽입하는 방법 질문입니다 [2] 그래요1851 19/06/10 1851
134283 [질문] PC 전원을 켜지 않아도 소음이 납니다 [6] 마미손3611 19/06/10 3611
134282 [질문] 블랙박스 구매경로, qxd3000 lx2000 질문 [2] 궁금해요궁금해3186 19/06/10 3186
134281 [질문] 국민카드를 다른걸로 재발급 받으려는데 뭐가 좋을까요? [2] U-Nya3400 19/06/10 3400
134280 [질문] 현대기술로 체르노빌 사태 복구 가능한가요? [6] waver4504 19/06/09 4504
목록 이전 다음
댓글

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