본문 바로가기

IT/엑셀

VBA스터디 1강_오빠두엑셀

728x90
728x90

오빠두엑셀 라이브 특강 VBA 강의 7월 2일-7월 23일 매주 토요일 9시에 시작합니다.
스터디 신청한 사람만 라이브 강의 일주일 다시 듣기 가능합니다.

스터디 신청기간 ~7/8(금)까지입니다.


엑셀 파일은 제가 직접 창작으로 제공한게 아니다보니
그냥 여기다 올리기 애매해서
오빠두엑셀에서 작성한 엑셀 완성본이 있는 스터디 노트 링크 올립니다.


https://www.oppadu.com/study-note/?mod=document&uid=38750

[1주차] VBA란, 매크로 기록, 함수만들기

1. 열심히 공부한 흔적이 담긴 사진을 남겨주세요! (위쪽 카메라 버튼을 클릭해서 이미지를 삽입할 수 있습니다) 강의 듣고 다시 들으면서 공부한 화면 올려요     2. 이번 스터디에서 새롭게 알

www.oppadu.com



VBA 4주 완성 마무리 강의 내용도
다른 게시글에 있어요.

오빠두엑셀 홈페이지에 있는 선생님이 올리신

유익한 엑셀 내용들도 보실 수 있으세요.



라이브 강의 듣기 인증 사진


VBA(1993년)는 visual basic(1991년)에서 파생됨.

윈도우에서 사용가능한 쉬운 프로그래밍 언어가 필요하다!
(기초영어만 알면 누구나 코드를 읽고 해석 가능!)
+GUI 작업도 편하게 가능


VBA는 100명중 1명이 쓰는 16위



파이썬은 머신러닝, 그림/영상인식, 예측분석, 다중회귀분석 등등에 쓰이는 언어!

파이썬은 개발환경 설치하고
print?변수?조건? 함수-리스트-반복문..~(최소 8시간)->여기까지 기초과정
실제로 만들어볼까하면
배포하려면 패키징+빌드까지 살펴볼게 너무 많다



실무에서 요구하는 이러한 기능의 대부분 엑셀+@(Azure)로 대체 가능하다



VBA의 장단점

장점 단점
설치/패키징 필요 없다.
(엑셀 모든 작업을 녹화해서
어떻게 VBA 코드로 작성되는지 기록됨)
반드시 엑셀을 실행해야 사용할 수 있다.
엑셀만 있으면 모든 준비 끝!
(실무에 필요한 기본 구문만 익히면
나만의 함수/프로그램 바로 완성)
제공되는 라이브러리매우 제한적이다
  외부 Application 제어가 매우 힘들다
  VBA를 실행하면 실행취소가 불가능!!


코딩을 공부하려면 이 3가지가 정말 중요합니다
1.영어(영타속도)
2.생각보단 실천(검색)
3.배우는 목적(Needs!)


검색은 기본!
직접 해보지 않으면 코드몽키에서 벗어날 수 없다!
개발자 or IT팀의 도움없이 나만의 도구를 직접 만들 수 있다


매크로 크게 3가지

1. 시트/ 통합문서
->시트나 통합문서에서 실행하는 명령문일 때
->시트를 클릭하거나 실행하거나 더블 클릭할 때

2.유저폼(사용자 정의폼)
->유저폼 안에서 실행하는 명령문일 때
->버튼을 클릭하거나 하는 등 이벤트 명령문

3.모듈
->전반적으로 모든 상황에서 쓰이는 코드가 필요할 때


!) 개발도구 설정 안 되어 있을 때


!) VBA 창이 안보이면 [보기-프로젝트 탐색창 누르기]


1. 현재 통합문서 매크로 만들기

1-1. 현재통합문서에 메시지 뜨게 만들기 1


일반에서 workbook 선택하고 밑에 명령문을 입력

Private Sub Workbook_Open()  

MsgBox "어서오세요"  

End Sub

!) 대소문자를 중간 중간에 섞어야 오탈자가 생겼을 때 구분하기 좋기 때문에 중간이라도 쓰는 것이 좋음

!) 엑셀파일을 매크로 포함된 문서로 바꿔 저장해야함
파일-다른이름 저장-파일 확장자 Excel 매크로 사용 통합 문서(xlsm)

!) 콘텐츠 사용 버튼 안보이면 정보- 콘텐츠 사용으로 바꾸면 매크로 정상적으로 돌아감

2022년 6월 매크로 파일 다른 사람에게 공유시에는 파일 우클릭해서 속성-차단 해제를 눌러야함  



1-2. 현재통합문서에 메시지 뜨게 만들기 2

open에서 SheetActivate 선택하면 명령문 자동 생성

Private Sub Workbook_SheetActivate(ByVal Sh As Object)  

MsgBox Sh.name  
(Msgbox: 메세지 박스 / sh: 시트 / name: 시트이름 )

End Sub




2. 빈셀자동채우기 시트

2-1. 매크로 기록_빈셀 채우기

위) 매크로 녹화 아이콘   아래) 매크로 기록

엑셀창 왼쪽 하단에 매크로 녹화 아이콘이나
개발도구-매크로 기록 누름 (작업 완료시에는 중단 버튼 누름)

매크로 이름을 MyTestMacro 1
매크로 저장 위치를 현재 통합문서로 저장하면
-> 모듈 추가됨(삽입-모듈 눌러도 생성)

개인용 매크로 통합문서는 개인 PC에서 매번 쓰는 코드나 매크로를 실행할 때 편함

sub MyTestMacro1()  

'MyTestMacro1 매크로  

Range("B2").currentRegion.select  

Selection. SpecialCells(xlCellTypeBlanks).Select (ctrl+G(ckwrlalc tjsxor-dlehd)  

With Selection.interior  
.Pattern=xlSolid  
.PatternColorlndex=xlAutomatic  
.Color=65535  
.TintAndShade=0  
.PatternTintAndShade=0  
End With  

Selecrtion.FormulaR1C1="미제출"  
End Sub

[상세설명]
sub MyTestMacro1()

'MyTestMacro1 매크로

'범위 선택
Range("B2:G15").Select
->데이터 추가시 1004 런타임 오류 발생되므로 자동 확장된 범위 선택하도록 만들어줘야함
->Range("B2:G15").Select에서 Range("B2").currentRegion.select 으로 바꿔줌

확장된 범위 선택 매크로 만들때
Sub Test2()

Range("B2").currentRegion.select
(점뒤에 붙는 속성은 tab키 누르면 자동선택)

End Sub


'빈셀 선택
Selection. SpecialCells(xlCellTypeBlanks).Select
(범위와 빈셀 선택까지 과정(B2에 커서 두고 ctrl+A한 후 ctrl+G (이동)-옵션-빈셀-확인 누르면) 진행시 명령문 자동 생성)

'셀 채우기를 노란색으로 변경
(엑셀은 표에서 이전 서식의 패턴을 자동으로 인식하는 기능이 있어 100점이 노란색으로 채워졌습니다)
예: 노랑-없음-노랑-없음 등
With Selection.interior
.Pattern=xlSolid
.PatternColorlndex=xlAutomatic
.Color=65535
.TintAndShade=0
.PatternTintAndShade=0
End With

노란색 색 채우기 후 빈셀 중 하나에 F2키 두고 "미제출" 쓰고 Ctrl+Enter누르면 빈셀들 자동채워짐

'선택된 셀의 값을 "미제출"입력
Selecrtion.FormulaR1C1="미제출"
End Sub

!) 제대로 했는 지 테스트할 때 원래대로 만든 후 VBA 편집기에서 커서 두고 F5키 누르거나 실행 버튼 누름



2-2. 매크로 기록_실행버튼 도형

삽입-도형-사각형: 둥근 모서리 선택해 도형 만듦
( alt키 누른 상태에서 드래그하여 만들면 셀 크기에 맞춰서 만들어짐 )

도형 안에 텍스트 빈셀 확인이라 입력

홈탭 - 맞춤 - 가운데 맞춤
도형서식 - 도형채우기 - 진한검은색
도형서식 - 도형윤곽선 - 없음
도형효과 - 미리설정 - 기본설정2

도형 우클릭 후 매크로 지정-MyTestMacro1 선택




3. 비만도계산 시트

3-1. MySum함수 만들기

Function MySum(Num1,Num2)

MySum=Num1+Num2

End Function

3-2. BMI함수 만들기
엑셀에 입력시 =BMI(몸무게,키)

Function BMI(Weight, Height)

BMI=Weight/(Height/100)^2

End Function

!) # Name이라고 뜨면 함수를 잘못 입력한 것




4.주민번호성별추출 시트

4-1 주민번호로 성별추출_MID함수

Function ID_Gender(ID)

ID_Gender=Mid(ID,8,1)

End Function
MID함수 성별추출결과


4-2. 주민번호로 성별추출_ISODD함수, IF함수

Function ID_Gender(ID)

ID_Gender=worksheetfuntion.isodd(Mid(ID,8,1))

if ID_Gender=True Then
ID_Gender="남자"

Else
ID_Gender="여자"
End if
End Function

[상세설명]
'=ID_Gender(주민번호) -> 함수 이용시 입력방법
Function ID_Gender(ID)

ID_Gender=Mid(ID,8,1)
Mid(찾을값, 위치, 반환할 갯수)
->ID_Gender=worksheetfuntion.isodd(Mid(ID,8,1))로 바꿈

'worksheetfuntion.isodd(ID_Gender)
홀짝 아는 함수 isodd (값) ->true=홀수, false=짝수

!) isodd적용 후 F9키 새로고침 안되면 함수 다시 입력후 채워넣기를 해야함

if ID_Gender=True Then
ID_Gender="남자"

Else
ID_Gender="여자"
End if
End Function

MID함수, ISODD함수 완성 결과



미션!!!
첫번째 미션: 빈셀 찾기 및 노란색 채우기 후 미제출 입력 매크로
- 2. 빈셀자동채우기 시트내용

두번째 미션: findGender 함수 만들기

function FindGender(Name)

FindGender=Worksheetfunction.Vlookup(Name,range("B2:C20"),2,0)
= VLOOKUP ( 찾을값, 참조범위, 열번호, [일치옵션] )

End Function


!) 확장된 범위 설정은 오류가 많이 나서 뒤에 나오는 강의 중에 알려주신다고 했습니다.
VBA3강에서 다뤘던 내용을 통해 확장된 범위 설정이 가능하십니다.


적용한 매크로는 기존 위에 있던 명령문에서 빨간 부분만 고치면 되요.
마지막으로 해주신 강의 통해서 제대로 적용하는 걸 알아서 수정해 올립니다.
추가적으로 맨 뒤에 가야할 부분으로 이동하는 걸 만들어주고 나서 간단하게 표현하는 방식으로 해주시더라고요

function FindGender(Name)
Dim i As Long
i = Sheet1.Range("A1048576").End(xlUp).Row

FindGender=Worksheetfunction.Vlookup(Name,range("B2:C" & i),2,0)
= VLOOKUP ( 찾을값, 참조범위, 열번호, [일치옵션] )

End Function

이번 강의에서 나온 MID, ISODD, VLOOKUP함수가 궁금하시면 오빠두엑셀 홈페이지를 들어가셔서 찾아보시면 됩니다.


[강의를 마치며...]
매크로 명령문 쓰는 게 또 다른 시련일거라는 생각이 드네요.
개인적으로 쓰는 함수 방식을 알아서 만들 수 있을 정도로 하기에는 아직 부족하다는 생각이 많이 들었어요.
저번에 라이브 특강할 때 지금처럼 자세하게 써가면서 했어야 됐다는 생각이 많이 드네요::
지나니까 잊혀지는 부분이 있다보니 글 쓰는게 다시 복기하기 좋은 것 같다는 생각이 듭니다....
다음 강의에도 잘 따라갈 수 있길 바라며::

728x90

'IT > 엑셀' 카테고리의 다른 글

VBA 4주 완성 마무리_오빠두엑셀  (0) 2022.08.05
VBA 스터디 4강_오빠두엑셀  (0) 2022.07.28
VBA 스터디 3강_오빠두엑셀  (0) 2022.07.20
VBA스터디2강_오빠두엑셀  (0) 2022.07.10