본문 바로가기

엑셀로 풀어가는 세상

엑셀 VBA #28 / 워크시트 함수 [VBA] - Match이용

엑셀 VBA #28 / 워크시트 함수 [VBA] - Match이용


1. 목적 : VBA내에서 워크시트 함수 사용법 습득

2. 구조
Application.WorksheetFunction.함수명
WorksheetFunction.함수명
Application.함수명
**Best 구조 : Application.함수명

3. 활용

원본자료

위 표에서 C로 시작되는 제품코드는 원본자료 A2:A9영역 중 몇 번째 있는지를 메세지 박스로 구현하면
MsgBox Application.WorksheetFunction.Match("C*", Range("A2:A9"), 0)

4번째 행에 있다고 나온다.

 


그러면 D로 시작하는 제품코드는 어디있는지 보자...
MsgBox Application.WorksheetFunction.Match("D*", Range("A2:A9"), 0)

원본자료의 제품코드에는 D로 시작하는 코드가 없기 때문에 오류가 발생한다.

 


위와 같은 오류 발생시 프로시져를 종료시키는구문은 다음과 같다.
If IsError(Application.WorksheetFunction.Match("D*", Range("A2:A9"), 0)) Then
   Exit Sub
End If

하지만 여전히 오류 메세지가 나온다.....



이럴 때 아래 구문처럼 WorksheetFunction 지우면 오류 발생 메세지가 나오지 않는다.
그래서 2항에서 Best 구조는 Application.함수명라고 했던 것이다.
If IsError(Application.WorksheetFunction.Match("D*", Range("A2:A9"), 0)) Then
   Exit Sub
End If

4. 심화
Dim rs As Range
Dim r As Long
Set rs = Range("B2:B9")

If IsError(Application.Match(Application.Min(rs), rs, 0)) = False Then
    r = Application.Match(Application.Min(rs), rs, 0)
    Range("B10") = Cells(r + 1, "A")
End If


Application. Match(Application.Min(rs), rs, 0)) 이해.....
Min함수를 이용하여 B2:B9영역에서 최소값을 찾는다.

B2:B9영역에서 찾은 최소값에 매칭(Matching)하는 행위치를 찾는다. 

https://www.youtube.com/watch?v=RAqB6wkP5SA&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=28

반응형