엑셀에서 영어 단어 첫 글자를 대문자로 변경하는 함수는 PROPER 입니다. VBA 에서 동일한 함수로 첫 글자를 대문자로 변경하는 로직을 만들어 보겠습니다. 오늘 학습의 목적은 엑셀에서 사용하는 함수를 VBA 에서도 동일하게 사용할 수 있다는 것을 아는 것입니다. 엑셀 워크시트에서 사용하는 모든 함수는 VBA에서 사용이 가능하다는 것이죠. 이 방법만 안다면 지원하는 기능을 굳이 함수로 만들지 않아도 됩니다.
▼ 먼저 첫 글자를 대문자로 만드는 엑셀 함수에 대해 알아 보겠습니다. 함수명은 PROPER 입니다. 함수 인수는 하나로 대문자로 변경할 영어 단어를 입력하면 됩니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 ▶ 엑셀 VBA 개발할 때 로그 출력하는 방법 ▶ 엑셀 VBA 이항 논리 연산자 And, Or, Xor, Not 사용하기 ▶ 엑셀 VBA GoTo 문 이용해서 줄로 분기하기 |
▼ VBA 에서 엑셀 시트에 있는 아이디와 메일서버 주소의 첫 글자를 대문자로 바꾸고 나머지는 소문자로 변경해 보도록 하겠습니다. 먼저 변경할 데이터들의 영역을 가져와야겠죠. CurrentRegion 속성으로 B2 부터 시작해서 인접한 곳에 있는 데이터 영역 전체를 가져옵니다. 그리고 For Each 반복문을 사용해서 데이터를 하나씩 꺼냅니다.
Dim rng As Range Dim cell As Range Set rng = ActiveSheet.Range("B2").CurrentRegion For Each cell In rng Next cell |
▼ 다음은 Range.HasFormula 속성을 사용해서 수식이 포함되어 있는지 판단합니다. 문자열에 대소문자 변경을 위해서는 수식이 없는 데이터만 있어야 합니다. HasFormula 는 영역에 수식이 있는지 없는지 판단해서 True/False 로 반환합니다. Not cell.HasFormula 을 하게 되면 수식이 없는 조건문이 되는 것이죠.
If Not cell.HasFormula Then End If |
▼ 엑셀에서 사용하는 함수를 VBA 에서 사용하기 위한 별도의 개체가 있습니다. 그것은WorksheetFunction 입니다. WorksheetFunction 에 포함된 함수들이 워크시트에서 사용할 수 있는 함수들입니다. 모든 함수가 포함되어 있다고 보시면 됩니다.
cell.Value = WorksheetFunction.Proper(cell.Value) |
▼ 위에서 설명한 소스들을 합친 전체 소스는 다음과 같습니다. 함수를 실행하면 For Each 반복문을 돌면서 셀에 있는 영어 단어에 Proper 함수를 적용합니다. 결과는 그림과 같습니다.
'' 첫 글자만 대문자로 변경하는 방법 Sub ProperUpper() Dim rng As Range Dim cell As Range Set rng = ActiveSheet.Range("B2").CurrentRegion For Each cell In rng If Not cell.HasFormula Then cell.Value = WorksheetFunction.Proper(cell.Value) End If Next cell End Sub |
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 ▶ 엑셀 VBA 개발할 때 로그 출력하는 방법 ▶ 엑셀 VBA 이항 논리 연산자 And, Or, Xor, Not 사용하기 ▶ 엑셀 VBA GoTo 문 이용해서 줄로 분기하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기 (0) | 2023.03.02 |
---|---|
엑셀 VBA 단위 변환 사용자 정의 폼 만들기 (0) | 2023.03.01 |
엑셀 VBA 레지스트리 키값 읽어오기 (1) | 2023.02.24 |
엑셀 VBA 시트에서 데이터 셀 영역 구하기 (2) | 2023.02.22 |
엑셀 VBA 개발에 도움이 되는 편집기창 이용 방법들 (0) | 2023.01.31 |
엑셀 VBA 매개변수 전달 방식 ByRef, ByVal 의 차이점 (0) | 2023.01.13 |
엑셀 VBA 반복문 For Next, For Each Next 사용하기 (0) | 2023.01.11 |
엑셀 VBA 메모의 모양을 직사각형, 풍선, 다이어몬드 형태 만들기 (0) | 2023.01.10 |