4주차 VBA강의 노트
1. 열심히 공부한 흔적이 담긴 사진을 남겨주세요!
(위쪽 카메라 버튼을 클릭해서 이미지를 삽입할 수 있습니다)
2. 이번 스터디에서 새롭게 알게되거나 유익했던 내용을 3가지로 요약해주세요!
범위 지정에 따른 수량 합산(Countif) 및 Collection에 따른 대표제품 정렬
제품고유값 지정하여 출력하여 정렬하기
form에 따른 제품 추가 및 실시간 정렬하기
3. 이번 스터디를 진행하면서 특별히 좋았던 점이나 부족했던 점이 있다면 자유롭게 남겨주세요.
- 여전히 VBA는 어렵네요 함수도 그렇고 개인의 노력이 좀더 필요할거 같습니다.
- 3주차와 4주차를 실시간으로 못해서 편집본으로 진행하였는데 따라가는데 너무 어렵네요 ㅜㅜ
- 전반적인 VBA내용이 알찼습니다. 향후 실무에도 하나씩 적용하면서 제대로 해보면 재미있을거 같아요 ㅎㅎ
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
For Each R In Rng
If R.Value = Criteria Then
i = i + 1
End If
Next
MyCountIf = i
'힌트2) R의 값이 Criteria와 같을 경우, i에서 1을 더합니다.
'If R.Value = Criteria Then..
'힌트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
If Rng(i) = Criteria Then
Result = Result + Sum_Range(i)
End If
Next
MySumIf = Result
'힌트3) Rng(i)을 사용하면 범위에서 i번째 위치한 값을 반환합니다.
'힌트4) Rng에서 i번째 위치한 값이 Criteria와 동일할 경우..
'If Rng(i) = Criteria Then..
'힌트5) 기존 Result 에 Sum_Range(i) 번째 값을 더합니다.
'Result = Result + Sum_range(i)
'힌트3) MySumIF 함수의 결과값으로 Result를 반환합니다.
'MySumIf = Result
End Function
Sub Test()
'Collection 테스트 명령문
'#새로운 Collection 만들기
Dim Coll As Collection
Set Coll = New Collection
'# Collection 에 값을 추가
'Collection.Add "값", "key"
Coll.Add "사과", "Fruit1"
Coll.Add "배", "Fruit2"
Coll.Add "포도", "Fruit3"
'# Collection 값 지우기
Coll.Remove ("Fruit3")
'# Collection 조회하기
Dim V As Variant
For Each V In Coll
MsgBox V
Next
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
Next
On Error GoTo 0
'③ 고유값으로 이루어진 문자열 만들기
For Each V In Coll
Result = Result & V & Delimiter
Next
Result = Left(Result, Len(Result) - 1)
'④ 결과값 확인하기
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, , , UniqueTextJoin(UniqueRng)
End Sub
Sub ShowForm()
frmAddProduct.Show
End Sub
번호 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (217)
![]() ![]() |
![]() ![]() |
2022.02.03 | 501 | 231920 | |
61529 |
New 원데이 챌린지
![]() |
![]() |
18:01 | - | 12 |
61485 |
New 원데이 챌린지 챕터3 스터디 노트
(1)
![]() ![]() |
![]() ![]() |
2023.09.21 | - | 32 |
61479 |
New 원데이 챌린지 챕터2 스터디 노트
![]() ![]() |
![]() ![]() |
2023.09.21 | - | 30 |
61472 |
New 원데이 챌린지 챕터1 스터디 노트
![]() ![]() |
![]() ![]() |
2023.09.21 | - | 35 |
61463 |
New 원데이 첼린지 3
![]() |
![]() |
2023.09.21 | - | 31 |
61451 |
New 원데이챌린지 완료!
![]() |
![]() |
2023.09.20 | - | 39 |
61439 |
New 원데이 첼렌지 3
![]() |
![]() |
2023.09.20 | - | 35 |
61382 |
New 원데이챌린지 3 대시보드
![]() |
![]() |
2023.09.19 | - | 48 |
61265 |
New 원데이 챌린지 챕터2
![]() |
![]() |
2023.09.17 | - | 62 |
61260 |
New 원데이 챌린지 완료!
![]() |
![]() |
2023.09.17 | - | 51 |
61258 |
New 원데이 챌린지 챕터3 완료
![]() |
![]() |
2023.09.17 | - | 55 |
61257 |
New 원데이 챌린지 챕터 2 완료
![]() |
![]() |
2023.09.17 | - | 48 |
61256 |
New 원데이챌린지 1회차 완료^^
![]() |
![]() |
2023.09.17 | - | 54 |
61254 |
New 기초 챕터
![]() ![]() |
![]() |
2023.09.17 | - | 49 |
61202 |
New 엑셀 원데이 챌린지 - 챕터3
![]() ![]() ![]() |
![]() ![]() |
2023.09.15 | 1 | 71 |
61172 |
원데이클래스 챕터3 공부기록
![]() |
![]() |
2023.09.15 | - | 57 |
61164 |
원데이 챌린지 챕터 2 공부기록
![]() |
![]() |
2023.09.15 | - | 58 |
61163 |
원데이클래스-챕터3
![]() |
![]() |
2023.09.15 | - | 58 |
61162 |
원데이 챌린지-1챕터
![]() |
![]() |
2023.09.15 | - | 63 |
61156 |
원데이 첼린지 챕터3
![]() ![]() |
![]() |
2023.09.15 | - | 60 |