[4주차]VBA스터디노트 + 미션

VBA 4주 완성
작성자
쿤송
작성일
2022-07-28 10:42
조회
33

1. 열심히 공부한 흔적이 담긴 사진을 남겨주세요!
(위쪽 카메라 버튼을 클릭해서 이미지를 삽입할 수 있습니다)

2. 이번 스터디에서 새롭게 알게되거나 유익했던 내용을 3가지로 요약해주세요!

- collection 기능에 대해 알게되었고 활용방법에 대해 배웠습니다.

- 유저폼을 활용하여 원하는 폼을 만들어 매크로와 연계시키는 방법에 대해 알게되었습니다.

- countif, sumif 함수를 VBA로 구현해보았습니다.

3. 이번 스터디를 진행하면서 특별히 좋았던 점이나 부족했던 점이 있다면 자유롭게 남겨주세요.

- 원하는 함수를 어떻게 VBA로 구현하는지 알게되었습니다.

- 구현시 무턱대고 만드는 것이 아니라 여러가지 상황을 고려하여 만들어야 시행착오를

줄일수 있구나 느꼈습니다.

- 이 좋은 강의를 4주동안 준비하시느라 고생많으셨습니다.

- 더불어 엑셀기능에 대해서도 모르는 것이 많은 것 같아서 추가로 공부가 필요하다는 걸 느꼇습니다.

 

4. 열심히 학습한 결과파일이나 스크린샷, 코드가 있다면 자유롭게 올려주세요.

Function MyCountIf(Rng As Range, Criteria As Variant) As Long
'---------------------------------
'■사전미션1
'나만의 CountIF 함수 만들기
'Rng 범위에서 Criteria와 같은 값의 개수를 반환합니다.
'---------------------------------
Dim R As Range
Dim i As Long

'힌트1) Rng의 셀을 하나씩 돌아가며..
For Each R In Rng

'힌트2) R의 값이 Criteria와 같을 경우, i에서 1을 더합니다.
If R.Value = Criteria Then
i = i + 1
End If
Next

'힌트3) MyCountIf 함수의 결과값으로 i를 반환합니다.
MyCountIf = i

End Function

Function MySumIf(Rng As Range, Criteria As Variant, Sum_Range As Range) As Long
'---------------------------------
'■사전미션2
'나만의 SumIF 함수 만들기
'Rng 범위의 값이 Criteria와 같을 경우, Sum_Range의 합계를 반환합니다.
'---------------------------------

Dim i As Long
Dim Result As Double

'힌트1) Rng.Count 속성을 사용하면 조건범위의 개수를 확인할 수 있습니다.
'힌트2) i = 1 부터 Rng.Count 까지 돌아가며..

For i = 1 To Rng.Count
'힌트3) Rng(i)을 사용하면 범위에서 i번째 위치한 값을 반환합니다.
'힌트4) Rng에서 i번째 위치한 값이 Criteria와 동일할 경우..

If Rng(i) = Criteria Then
Result = Result + Sum_Range(i)
End If
Next

MySumIf = Result

End Function

Sub Test()

'collection 테스트 명령문
'#새로운 collection 만들기

Dim Coll As Collection
Set Coll = New Collection

Dim Rng As Range

'# collection에 값, key 추가하기
'collection에 "값", "key"

Coll.Add "사과", "Fruit1" 'Fruit는 key(고유값) 역할
Coll.Add "배", "Fruit2"
Coll.Add "포도", "Fruit3"

'# collection에 값 지우기
Coll.Remove ("Fruit3")

'# collection에 값 조화하기
Dim v As Variant
For Each v In Coll
MsgBox v
Next

'MsgBox Coll(1)
'MsgBox Coll("Fruit2") '배가 출력됨

End Sub

'=============================================================================================
'Sub UniqueTextJoin()
'------------------------------------
'■ Rng 범위의 고유값으로 이루어진 문자열을 만듭니다.
'■ 예) 사과, 배, 배, 귤, 사과 -> 사과, 배, 귤
'------------------------------------
'① 변수 선언 및 할당하기
' Dim Rng As Range
' Dim Delimiter As String

' Dim R As Range 'Rng 를 For Each로 하나씩 참조할 셀
' Dim Coll As Collection
' Dim v As Variant 'Coll 을 For Each로 하나씩 참조할 값
' Dim Result As String '출력 문자열

' Set Rng = DynamicRange(Sheet1, "A", 2)
' Delimiter = ","

' Set Coll = New Collection

'② Coll 을 하나씩 돌아가며 고유값만 추가하기
' On Error Resume Next '고유값만 추기위해 오류를 이용
'오류발생하면 다음으로 넘어가라!
' For Each R In Rng
' Coll.Add R.Value, R.Value '뒤의 R.Value는 key값으로 고유값만 들어갈수있다.
' Next
' On Error GoTo 0 '오류창을 띄워라

'③ 고유값으로 이루어진 문자열 만들기
' For Each v In Coll
' Result = Result & v & Delimiter
' Next

' Result = Left(Result, Len(Result) - Len(Delimiter))

'④ 결과값 확인하기
' MsgBox Result

'End Sub

'=============================================================================================

Function UniqueTextJoin(Rng As Range, Optional Delimiter As String = ",")
'------------------------------------
'■ Rng 범위의 고유값으로 이루어진 문자열을 만듭니다.
'■ 예) 사과, 배, 배, 귤, 사과 -> 사과, 배, 귤
'------------------------------------
'① 변수 선언 및 할당하기
'Dim Rng As Range
'Dim Delimiter As String

Dim R As Range 'Rng 를 For Each로 하나씩 참조할 셀
Dim Coll As Collection
Dim v As Variant 'Coll 을 For Each로 하나씩 참조할 값
Dim Result As String '출력 문자열

'Set Rng = DynamicRange(Sheet1, "A", 2)
Delimiter = ","

Set Coll = New Collection

'② Coll 을 하나씩 돌아가며 고유값만 추가하기
On Error Resume Next '고유값만 추기위해 오류를 이용
'오류발생하면 다음으로 넘어가라!
For Each R In Rng
Coll.Add R.Value, R.Value '뒤의 R.Value는 key값으로 고유값만 들어갈수있다.
Next
On Error GoTo 0 '오류창을 띄워라

'③ 고유값으로 이루어진 문자열 만들기
For Each v In Coll
Result = Result & v & Delimiter
Next

Result = Left(Result, Len(Result) - Len(Delimiter))

'④ 결과값 확인하기
UniqueTextJoin = Result

End Function

Sub AddValidation()
'------------------------------------
'■ Rng 셀에 데이터유효성 목록상자를 추가합니다.
'Range.Validation.Add
'① xlDVType : 데이터유효성검사 형식입니다. xlValidateList
'② AlterStype : 오류메시지 형식입니다. (기본값은 중지(Stop)입니다. 선택인수)
'③ Operator : 연산방식입니다. (목록에서는 사용하지 않습니다. 선택인수)
'④ Formula1 : 데이터 유효성검사로 작성할 수식또는 목록입니다.
'⑤ Formula2 : 연산방식이 포함 또는 포함하지 않음일 경우, 두번째로 작성하는 수식입니다.
'상세설명 링크
'오류메시지 형식 : https://docs.microsoft.com/en-us/office/vba/api/excel.xldvalertstyle
'연산방식 : https://docs.microsoft.com/en-us/office/vba/api/excel.xlformatconditionoperator
'Validation Add 상세 설명 : https://docs.microsoft.com/en-us/office/vba/api/excel.validation.add
'------------------------------------

Dim Rng As Range
Dim UniqueRng As Range

Set Rng = Sheet1.Range("E2")
Set UniqueRng = DynamicRange(Sheet1, "A", 2)

Rng.Validation.Delete
'Rng.Validation.Add xlValidateList, , , "과일, 채소, 육류, 고기"
Rng.Validation.Add xlValidateList, , , UniqueTextJoin(UniqueRng)

End Sub

Sub ShowForm()

frmaddproduct.Show

End Sub

 

Sub FilterItems()
'GroupRng(구분)의 조건을 비교해서, 구분에 해당하는 제품과 가격을 표시

Dim GroupRng As Range ' 필터링 할 구분 범위 (동적으로 설정!)
Dim R As Range ' GroupRng를 For Each로 하나씩 참조할 셀
Dim FilterVal As String ' 비교할 조건
Dim i As Long ' r의 값이 조건과 같을 경우, 1씩 증가할 정수

Set GroupRng = DynamicRange(Sheet1, "A", 2)
FilterVal = Sheet1.Range("E2").Value

i = 2
For Each R In GroupRng
If R.Value = FilterVal Then
Sheet1.Range("G" & i).Value = R.Offset(0, 1).Value
Sheet1.Range("H" & i).Value = R.Offset(0, 2).Value
i = i + 1
End If
Next

End Sub

Sub ClearRange()

Dim i As Long

i = Sheet1.Range("G1048576").End(xlUp).Row

If i > 1 Then
Sheet1.Range("G2:H" & i).ClearContents
End If

End Sub

Function DynamicRange(WS As Worksheet, Column As String, InitRow As Long) As Range

Dim i As Long
Dim Address As String

i = WS.Range(Column & "1048576").End(xlUp).Row
If i < InitRow Then i = InitRow
Address = Column & InitRow & ":" & Column & i

Set DynamicRange = WS.Range(Address)

End Function

 

 

 

 

전체 0

전체 1,208
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[🏆 VBA 4주 완성 특별 스터디] 1기 - 우수 졸업생 및 후기, 축하합니다! (6)
오빠두엑셀 | 2022.07.31 | 추천 8 | 조회 1244
오빠두엑셀 2022.07.31 8 1244
40636 VBA 4주 완성
4주차 VBA강의 노트 엑셀파일첨부파일
이명환 | 2022.07.30 | 추천 0 | 조회 149
이명환 2022.07.30 - 149
40631 VBA 4주 완성
[4주차]VBA 4주 학습 첨부파일
이상민 | 2022.07.30 | 추천 0 | 조회 53
이상민 2022.07.30 - 53
40630 VBA 4주 완성
[3주차]VBA 4주 교육 첨부파일
이상민 | 2022.07.30 | 추천 0 | 조회 41
이상민 2022.07.30 - 41
40627 VBA 4주 완성
[2주차]VBA 4주 완성 학습 첨부파일
이상민 | 2022.07.30 | 추천 0 | 조회 39
이상민 2022.07.30 - 39
40622 VBA 4주 완성
[4주차] VBA 4주차 스터디 노트 엑셀파일첨부파일 (1)
사랑2 | 2022.07.30 | 추천 0 | 조회 43
사랑2 2022.07.30 - 43
40621 VBA 4주 완성
[4주차]엑셀 VBA 4주완성 엑셀파일첨부파일
최동국 | 2022.07.30 | 추천 0 | 조회 31
최동국 2022.07.30 - 31
40618 VBA 4주 완성
[4주차] 스터디 노트, 미션 첨부파일
달구름 | 2022.07.30 | 추천 0 | 조회 39
달구름 2022.07.30 - 39
40616 VBA 4주 완성
[4주차] VBA 4주 완성 특별스터디 4강 엑셀파일첨부파일
Gladiolus | 2022.07.30 | 추천 0 | 조회 42
Gladiolus 2022.07.30 - 42
40615 VBA 4주 완성
[3주차] VBA 4주 완성 특별스터디 3강 엑셀파일첨부파일
Gladiolus | 2022.07.30 | 추천 0 | 조회 30
Gladiolus 2022.07.30 - 30
40614 VBA 4주 완성
[2주차] VBA 4주 완성 특별스터디 2강 엑셀파일첨부파일
Gladiolus | 2022.07.30 | 추천 0 | 조회 36
Gladiolus 2022.07.30 - 36
40612 VBA 4주 완성
[1주차] VBA 4주 완성 특별스터디 1강 엑셀파일
Gladiolus | 2022.07.30 | 추천 0 | 조회 56
Gladiolus 2022.07.30 - 56
40609 VBA 4주 완성
[4주차] VBA 4주 완성 스터디노트 첨부파일
ㅊH 운ㅓ | 2022.07.30 | 추천 0 | 조회 34
ㅊH 운ㅓ 2022.07.30 - 34
40607 VBA 4주 완성
[4주차] 스터디 첨부파일
girls**** | 2022.07.30 | 추천 0 | 조회 33
girls**** 2022.07.30 - 33
40596 VBA 4주 완성
[3주차] 스터디 및 미션 첨부파일
DanP | 2022.07.29 | 추천 0 | 조회 32
DanP 2022.07.29 - 32
40595 VBA 4주 완성
[3주차] VBA 4주 완성 첨부파일
| 2022.07.29 | 추천 0 | 조회 32
2022.07.29 - 32
40592 VBA 4주 완성
[4주차] VBA 4주 완성 첨부파일
익명 | 2022.07.29 | 추천 0 | 조회 30
익명 2022.07.29 - 30
40591 VBA 4주 완성
[2주차] 스터디 및 미션 첨부파일
DanP | 2022.07.29 | 추천 0 | 조회 43
DanP 2022.07.29 - 43
40589 VBA 4주 완성
콜렉션및 배열등 엑셀파일첨부파일
브랑카 | 2022.07.29 | 추천 0 | 조회 32
브랑카 2022.07.29 - 32
40588 VBA 4주 완성
[3주차] VBA 4주 완성 노트 및 과제 엑셀파일첨부파일
토토니 | 2022.07.29 | 추천 0 | 조회 35
토토니 2022.07.29 - 35
40586 VBA 4주 완성
[4주차]VBA 4주 완성 엑셀파일첨부파일
ㅇㅇ나두 | 2022.07.29 | 추천 0 | 조회 36
ㅇㅇ나두 2022.07.29 - 36
글쓰기