Range 개체

Replace 함수 및 Replace 메서드

노만e 2025. 3. 11. 06:11

엑셀 VBA에서 Replace는 문자열의 특정 부분을 다른 문자열로 바꾸는 기능을 제공합니다.

Replace는 두 가지 방식으로 사용할 수 있습니다.

  1. Replace 함수 (문자열 치환)
  2. Range.Replace 메서드 (엑셀 범위 내 데이터 치환)

1. Replace 함수 (문자열 내 특정 문자 또는 단어 바꾸기)

📌 기본 문법

Replace(원본문자열, 바꿀문자, 새문자 [, 시작위치] [, 바꿀횟수] [, 대소문자구분])
  • 원본문자열: 변경할 원본 문자열
  • 바꿀문자: 원본 문자열에서 찾을 문자열
  • 새문자: 바꿀 문자
  • 시작위치 (선택 사항): 문자열의 몇 번째 문자부터 찾을지 지정 (기본값: 1)
  • 바꿀횟수 (선택 사항): 몇 개의 일치하는 단어를 바꿀지 지정 (기본값: 모두 변경)
  • 대소문자구분 (선택 사항): vbBinaryCompare (대소문자 구분) 또는 vbTextCompare (대소문자 구분 안 함)

📌 기본 예제

Sub 문자열_Replace_예제()
Dim str As String
str = "나는 VBA를 공부한다. VBA는 강력하다."
str = Replace(str, "VBA", "엑셀 매크로")
MsgBox str ' "나는 엑셀 매크로를 공부한다. 엑셀 매크로는 강력하다."
End Sub

📌 "VBA" → "엑셀 매크로"로 변경됨


📌 일부 단어만 변경 (바꿀횟수 지정)

Sub 특정개수_Replace()
Dim str As String
str = "VBA는 쉽다. VBA는 강력하다. VBA를 배워보자."
str = Replace(str, "VBA", "엑셀", , 1) ' 첫 번째만 변경
MsgBox str ' "엑셀은 쉽다. VBA는 강력하다. VBA를 배워보자."
End Sub

📌 "VBA" → "엑셀"로 첫 번째만 변경 (나머지는 유지)


📌 대소문자 구분 없이 변경

Sub 대소문자_구분없이_Replace()
Dim str As String
str = "VBA는 쉽다. vba는 강력하다. VbA를 배워보자."
str = Replace(str, "VBA", "엑셀", , , vbTextCompare)
MsgBox str ' "엑셀는 쉽다. 엑셀는 강력하다. 엑셀를 배워보자."
End Sub

📌 "VBA", "vba", "VbA" → "엑셀"로 모두 변경됨

📌 vbTextCompare → 대소문자 구분 없이 변경


2. Range.Replace 메서드 (엑셀 시트에서 값 바꾸기)

📌 기본 문법

Range.Replace(찾을값, 바꿀값 [, LookAt] [, SearchOrder] [, MatchCase] [, SearchFormat])
  • 찾을값: 변경할 원본 값
  • 바꿀값: 바꿀 값
  • LookAt (선택 사항): xlWhole (전체 일치) 또는 xlPart (부분 일치, 기본값)
  • SearchOrder (선택 사항): xlByRows (행 기준 검색) 또는 xlByColumns (열 기준 검색)
  • MatchCase (선택 사항): True (대소문자 구분) 또는 False (구분 안 함, 기본값)
  • SearchFormat (선택 사항): 서식을 기준으로 찾을지 여부

📌 엑셀 범위에서 특정 값 변경

Sub 셀값_Replace()
Sheets("Sheet1").Range("A1:A10").Replace "Old", "New"
End Sub

📌 A1:A10 범위에서 "Old" → "New"로 변경


📌 대소문자 구분하여 변경

Sub 대소문자_구분_Replace()
Sheets("Sheet1").Range("A1:A10").Replace "VBA", "엑셀", , , True
End Sub

📌 "VBA"만 변경하고, "vba" 또는 "VbA"는 변경하지 않음

📌 MatchCase:=True → 대소문자 구분


📌 부분 일치 (xlPart) vs 전체 일치 (xlWhole)

Sub 부분일치_Replace()
Sheets("Sheet1").Range("A1:A10").Replace "VBA", "엑셀", xlPart
End Sub

📌 "VBA"가 포함된 단어 전체를 변경

📌 "VBA 강의" → "엑셀 강의"

Sub 전체일치_Replace()
Sheets("Sheet1").Range("A1:A10").Replace "VBA", "엑셀", xlWhole
End Sub

📌 "VBA"가 단독으로 있는 셀만 변경

📌 "VBA" → "엑셀", 하지만 "VBA 강의"는 변경되지 않음


📌 행 또는 열 단위로 검색 (SearchOrder)

Sub 행_단위_Replace()
Sheets("Sheet1").Range("A1:C10").Replace "VBA", "엑셀", , xlByRows
End Sub

📌 행 단위로 검색하여 "VBA"를 "엑셀"로 변경

Sub 열_단위_Replace()
Sheets("Sheet1").Range("A1:C10").Replace "VBA", "엑셀", , xlByColumns
End Sub

📌 열 단위로 검색하여 "VBA"를 "엑셀"로 변경


📌 셀 서식이 특정한 값만 변경 (SearchFormat)

Sub 특정서식_Replace()
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1:A10")
rng.Replace What:="VBA", Replacement:="엑셀", SearchFormat:=True
End Sub

📌 특정 서식을 가진 "VBA"만 "엑셀"로 변경


📝 정리

기능
VBA 코드
문자열 내 특정 단어 변경
Replace(str, "VBA", "엑셀")
일부 단어만 변경 (첫 번째만 변경)
Replace(str, "VBA", "엑셀", , 1)
대소문자 구분 없이 변경
Replace(str, "VBA", "엑셀", , , vbTextCompare)
엑셀 범위 내 특정 값 변경
Range("A1:A10").Replace "Old", "New"
대소문자 구분하여 변경
Range("A1:A10").Replace "VBA", "엑셀", , , True
부분 일치로 변경
Range("A1:A10").Replace "VBA", "엑셀", xlPart
전체 일치로 변경
Range("A1:A10").Replace "VBA", "엑셀", xlWhole
행 단위로 변경
Range("A1:C10").Replace "VBA", "엑셀", , xlByRows
열 단위로 변경
Range("A1:C10").Replace "VBA", "엑셀", , xlByColumns
특정 서식이 있는 값만 변경
Range("A1:A10").Replace "VBA", "엑셀", SearchFormat:=True

🔥 VBA의 Replace를 활용하면 문자열과 셀 데이터를 빠르게 수정할 수 있습니다!