원래 엑셀 VBA를 많이 쓰고는 있었지만 인터넷에 나와있는 코드를 짜집기 하는 형태여서 실제 이 코드가 어떤건지 모르는 내용이 많다. 엑셀을 많이 다루고 있는 만큼 처음부터는 아니더라도 중요하다고 생각되는 부분만큼은 블로그에 정리해볼 예정.
추가로 파이썬의 xlwings라는 모듈을 사용하면 엑셀 VBA와 연동하여 유용하게 활용할 수 있다고 한다. 업무자동화에 관심이 많다면 공부해보면 좋을 것 같다.
1. Find 함수
Find 함수는 엑셀에서 데이터가 일치하거나, 또는 부분일치하는 값을 찾는 VBA 메서드(함수)이다. Find 함수의 기본 사용법은 아래와 같다.
※ 사용법
셀 범위(Range).Find(What:=찾을 값,Lookat:=xlWhole)
-. Lookat:= xlWhole 일 경우 찾을 값과 전체 일치하는 값을 찾음
Lookat:= xlPart는 부분적으로 일치해도 값을 찾은 것으로 인식
-. 참고로 Find는 값을 찾는다고 설명하였지만 Range 의 형식을 갖는다.(아래에서 설명)
2. 사용 예시
위 엑셀 양식에서 G2(찾을 Data인 Apple) 값에 따라 H:I에 위치하는 이름과 표시열에 일치하는 Data가 있다면 빨간색으로 수정하고 표시열에 Check 문자열을 출력하는 예시코드이다. 참고링크에도 기재하였지만 니꾸님의 블로그 코드를 조금 수정하여 작성.
(참고링크 : http://blog.naver.com/PostView.nhn?blogId=rosa0189&logNo=60132847693)
<예시 코드>
Option Explicit
Sub find_data()
Dim strAddr As String '처음 검색하여 찾은 셀의 주소 넣을 변수
Dim C As Range '검색하여 찾은 영역을 넣을 변수
Dim name As String
name = ActiveSheet.Range("G2")
ActiveSheet.Range("H:H").Font.Color = RGB(0, 0, 0)
With ActiveSheet.Range("H:H")
Set C = .Find(What:=name, Lookat:=xlWhole) '처음 일치하는 데이터 name을 찾아 C에 넣고
If Not C Is Nothing Then '만일 일치하는 데이터가 있으면
strAddr = C.Address '첫 일치하는 주소를 strAddr에 넣고
Do '다음을 실행
C.Font.Color = RGB(255, 0, 0) '셀 폰트 컬러를 빨간색으로
C.Offset(, 1) = "Check" 'Offset을 통해 다음 열위치에 Check 표시
Set C = .FindNext(C) '다음 일치하는 데이터를 찾아 변수에 넣고
Loop While Not C Is Nothing And C.Address <> strAddr '일치하는 데이터 없고 처음 일치한 주소 아닐때까지 반복
End If
End With
End Sub
-. Fine 함수를 통해 얻은 C 결과값은 Range 형식을 가진다. 따라서 변수 지정시 Set C로 해줘야 오류가 발생하지 않는다.
그냥 C 로 지정하는 경우 아래와 같이 '91' 런타임 오류가 발생한다.
-. C가 Range의 형식을 가지므로 Offset 함수를 사용하여 상대 위치로 이동할 수 있다. C.Offset(Row index, Column index) 형태를 가지며, 위와 같이 C.offset(,1)로 입력할 경우 C 값에서 오른쪽로 1열 이동한 위치를 참조한다. 왼쪽으로 이동하고 싶으면 -1을 입력하면 된다.
-. Loop While Not C Is Nothing And C.Address <> strAddr
: 마지막에 있는 구문은 Fine 함수를 통해 얻은 결과가 비어있지 않고, C의 주소가 첫 일치하는 주소랑 다른 동안은 계속 DO ~ Loop 구문을 실행하라는 의미이다.
-. 결과는 아래와 같다. Apple고 일치하는 이름에 빨간색으로 수정되고, 표시란에 "Check"가 입력된다.
참고링크 : http://blog.naver.com/PostView.nhn?blogId=rosa0189&logNo=60132847693
'코딩 > 엑셀,VBA' 카테고리의 다른 글
[엑셀/VBA] 사용자 정의 함수(Custom Function) 만들기 (0) | 2021.08.01 |
---|---|
[엑셀/VBA] 다른 엑셀 파일에서 원하는 시트 가져오기 (8) | 2021.07.11 |
[엑셀/VBA] 원하는 시트를 다른 엑셀 파일로 복사하기 (0) | 2021.07.09 |
[엑셀/VBA] 엑셀 시트 마지막 행값 구하기 (0) | 2021.06.08 |
[엑셀/VBA] Split , Ubound 함수 설명 및 예시 (1) | 2021.05.20 |