목차
이 자습서에서는 여러 단어, 문자열 또는 개별 문자를 찾고 바꾸는 여러 가지 방법을 살펴보므로 필요에 가장 적합한 방법을 선택할 수 있습니다.
사람들은 일반적으로 Excel에서 어떻게 검색합니까? 대부분 Find & 단일 값에 대해 잘 작동하는 대체 기능입니다. 하지만 교체해야 할 항목이 수십 또는 수백 개라면 어떻게 해야 할까요? 분명히 아무도 모든 교체를 수동으로 하나씩 수행하고 데이터가 변경될 때 다시 수행하는 것을 원하지 않을 것입니다. 운 좋게도 Excel에서 대량 교체를 수행하는 몇 가지 더 효과적인 방법이 있으며 각 방법을 자세히 조사할 것입니다.
중첩된 SUBSTITUTE로 여러 값 찾기 및 바꾸기
Excel에서 여러 항목을 찾고 바꾸는 가장 쉬운 방법은 SUBSTITUTE 함수를 사용하는 것입니다.
수식의 논리는 매우 간단합니다. 몇 가지 개별 함수를 작성하여 이전 값을 새 값으로 바꿉니다. . 그런 다음 해당 함수를 서로 중첩하여 후속 SUBSTITUTE가 이전 SUBSTITUTE의 출력을 사용하여 다음 값을 찾도록 합니다.
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( text, old_text1, new_text1), old_text2, new_text2), old_text3, new_text3)A2:A10의 위치 목록에서 축약된 국가 이름(예: FR , UK 및 USA )을 완전한 MassReplace 기능은 코드를 삽입한 통합 문서에서만 작동합니다. 이 작업을 올바르게 수행하는 방법을 잘 모르는 경우 Excel에 VBA 코드를 삽입하는 방법에 설명된 단계를 따르십시오.
코드가 통합 문서에 추가되면 함수는 수식 intellisense에만 나타납니다. 인자가 아니라 함수의 이름! 하지만 구문을 기억하는 것은 큰 문제가 아니라고 생각합니다.
MassReplace(input_range, find_range, replace_range)Where:
- Input_range - 소스 범위 값을 바꾸려고 합니다.
- Find_range - 검색할 문자, 문자열 또는 단어입니다.
- Replace_range - 문자, 문자열, 또는 대체할 단어입니다.
Excel 365에서는 동적 배열 지원으로 인해 일반 수식으로 작동하며 맨 위 셀(B2)에만 입력하면 됩니다.
=MassReplace(A2:A10, D2:D4, E2:E4)
사전 동적 Excel에서는 이전 스타일의 CSE 배열 수식으로 작동합니다. 전체 소스 범위(B2:B10)를 선택하고 Ctrl + Shift + Enter 키를 동시에 눌러 완료합니다.
장점 : Excel 2019의 사용자 지정 LAMBDA 함수에 대한 적절한 대안 , Excel 2016 및 이전 버전
단점 : 통합 문서를 매크로 사용 .xlsm 파일로 저장해야 함
VBA 매크로로 Excel에서 대량 교체
자동을 사랑한다면 일반적인 작업을 매크로와 연결하면다음 VBA 코드를 사용하여 범위에서 여러 값을 찾고 바꿀 수 있습니다.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "소스 데이터: " , "대량 교체" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing 그런 다음 Set ReplaceRng = Application.InputBox( "대체 범위:" , "대량 교체" , 유형 :=8) Err.Clear If Not ReplaceRng Is Nothing Then Application.ScreenUpdating = False 각 Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value 다음 Application.ScreenUpdating = True End If End If End Sub매크로를 바로 사용하려면 코드가 포함된 샘플 통합 문서를 다운로드할 수 있습니다. 또는 자신의 통합 문서에 코드를 삽입할 수 있습니다.
매크로 사용 방법
매크로를 실행하기 전에 아래 이미지( C2:D4).
그런 다음 소스 데이터를 선택하고 Alt + F8을 누른 다음 BulkReplace 매크로를 선택하고 실행 .
<0을 클릭합니다>소스 분노 가 미리 선택되어 있으므로 참조를 확인하고 확인을 클릭하십시오:
그 후, 범위 바꾸기 를 선택하고 확인을 클릭합니다.
완료!
장점 : 한 번 설정하면 언제든지 재사용
단점 : 모든 데이터에 대해 매크로를 실행해야 함변경
하위 문자열 도구를 사용하여 Excel에서 여러 찾기 및 바꾸기
첫 번째 예에서 중첩된 SUBSTITUTE가 Excel에서 여러 값을 바꾸는 가장 쉬운 방법이라고 언급했습니다. 나는 내가 틀렸다는 것을 인정합니다. Ultimate Suite를 사용하면 작업이 훨씬 쉬워집니다!
워크시트에서 대량 교체를 수행하려면 Ablebits 데이터 탭으로 이동하여 하위 문자열 도구 > 를 클릭하십시오. 하위 문자열 바꾸기 .
하위 문자열 바꾸기 대화 상자가 나타나 소스 범위와 >하위 문자열 범위.
두 범위가 선택된 상태에서 바꾸기 버튼을 클릭하고 오른쪽에 삽입된 새 열에서 결과를 찾습니다. 원본 데이터의. 네, 정말 쉽습니다!
팁. 바꾸기 를 클릭하기 전에 대소문자 구분 상자를 고려해야 합니다. 대문자와 소문자를 다른 문자로 처리하려면 반드시 선택하십시오. 이 예에서는 대문자로 표시된 문자열만 바꾸고 다른 단어 내의 "fr", "uk" 또는 "ak"와 같은 하위 문자열은 그대로 두고 싶기 때문에 이 옵션을 선택합니다.
문자열에 대해 수행할 수 있는 다른 대량 작업이 궁금하다면 Ultimate Suite에 포함된 다른 하위 문자열 도구를 확인하세요. 또는 더 좋은 방법은 아래 평가판을 다운로드하여 사용해 보세요!
찾고 교체하는 방법입니다.Excel에서 한 번에 여러 단어와 문자. 읽어 주셔서 감사합니다. 다음 주 블로그에서 뵙기를 바랍니다!
사용 가능한 다운로드
Excel(.xlsm 파일)에서 여러 찾기 및 바꾸기
Ultimate Suite 14 -day 전체 기능 버전(.exe 파일)
이름.완료하려면 아래 스크린샷과 같이 D2:D4에 이전 값을 입력하고 E2:E4에 새 값을 입력합니다. 그런 다음 아래 수식을 B2에 입력하고 Enter 키를 누릅니다.
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
…
위의 접근 방식은 동적 배열을 지원하는 Excel 365 에서만 작동합니다.
Excel 2019, Excel 2016 및 이전 버전의 사전 동적 버전에서는 수식이 다음과 같아야 합니다. 맨 위 셀(B2)에 대해 작성된 다음 아래 셀에 복사됩니다.
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
이 경우 교체 값을 절대 셀 참조로 잠그므로 주의하십시오. 수식을 복사할 때 이동하지 않습니다.
참고. SUBSTITUTE 기능은 대소문자 구분 입니다. 즉, 이전 값( old_text )을 원래 데이터에 표시되는 대소문자와 동일하게 입력해야 합니다.
가능한 한 쉬운 방법이지만 이 방법에는 중요한 단점이 있습니다. 교체할 항목이 수십 개인 경우 중첩된 기능을 관리하기가 매우 어려워집니다.
장점 : 쉬움 -구현; 모든 Excel 버전에서 지원됨
단점 : 제한된 수의 찾기/바꾸기 값에 가장 적합함
여러 항목을 XLOOKUP
<0으로 검색 및 바꾸기>셀의 일부가 아닌 전체 내용 을 교체하려는 경우 XLOOKUP 기능이 유용합니다.A 열에 국가 목록이 있고 모든 약어를 해당 전체 이름으로 바꾸려고 한다고 가정해 보겠습니다. 이전 예에서와 같이 별도의 열(각각 D 및 E)에 "찾기" 및 "바꾸기" 항목을 입력한 다음 B2에 이 수식을 입력합니다.
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Excel 언어에서 인간 언어로 번역된 수식은 다음과 같습니다.
D2:D4(lookup_array)에서 A2 값(lookup_value)을 검색하고 E2:E4(return_array)에서 일치 항목을 반환합니다. 찾을 수 없는 경우 A2에서 원래 값을 가져옵니다.
채우기 핸들을 두 번 클릭하여 수식을 아래 셀에 복사하면 결과를 기다리지 않아도 됩니다.
XLOOKUP 함수는 엑셀 365에서만 사용할 수 있기 때문에 이전 버전에서는 위의 수식을 사용할 수 없습니다. 그러나 IFERROR 또는 IFNA와 VLOOKUP의 조합으로 이 동작을 쉽게 모방할 수 있습니다.
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
참고. SUBSTITUTE와 달리 XLOOKUP 및 VLOOKUP 함수는 대소문자를 구분하지 않습니다 . 즉, 대소문자를 무시하고 조회 값을 검색합니다. 예를 들어 공식은 FR 및 fr 를 모두 France 로 대체합니다.
장점 : 일반적인 기능의 특이한 사용; 모든 Excel 버전에서 작동
단점 : 셀 수준에서 작동, 셀 내용의 일부를 대체할 수 없음
재귀적 LAMBDA 함수를 사용한 다중 대체
마이크로소프트의 경우365 구독자를 위해 Excel은 기존 수식 언어를 사용하여 사용자 지정 함수를 만들 수 있는 특수 기능을 제공합니다. 네, 저는 LAMBDA에 대해 이야기하고 있습니다. 이 방법의 장점은 매우 길고 복잡한 수식을 매우 간결하고 간단한 수식으로 변환할 수 있다는 것입니다. 또한 이전에는 VBA에서만 가능했던 기능인 Excel에 없는 고유한 함수를 생성할 수 있습니다.
사용자 정의 LAMBDA 함수 생성 및 사용에 대한 자세한 내용은 다음 자습서를 확인하십시오. 방법 Excel에서 LAMBDA 함수를 작성합니다. 여기에서 몇 가지 실용적인 예에 대해 논의할 것입니다.
장점 : 그 결과 교체 쌍의 수에 관계없이 기능을 우아하고 놀랍도록 간단하게 사용할 수 있습니다
단점 : Excel 365에서만 사용할 수 있습니다. 통합 문서에 따라 다르며 다른 통합 문서에서 재사용할 수 없습니다.
예 1. 한 번에 여러 단어/문자열 검색 및 바꾸기
한 번에 여러 단어 또는 텍스트를 바꾸기 위해 사용자 지정 MultiReplace 라는 LAMBDA 함수는 다음 형식 중 하나를 취할 수 있습니다.
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
또는
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
둘 다 재귀적입니다. 자신을 호출하는 함수. 차이점은 종료 지점이 설정되는 방식에만 있습니다.
첫 번째 수식에서 IF 함수는 old 목록이 비어 있지 않은지(old"") 확인합니다. TRUE이면 MultiReplace 함수가 호출됩니다. FALSE인 경우 함수 text 를 현재 형식으로 반환하고 종료합니다.
두 번째 수식은 반대 논리를 사용합니다. old 가 비어 있으면(old="") <1을 반환합니다>텍스트 하고 종료합니다. 그렇지 않으면 MultiReplace 를 호출합니다.
가장 까다로운 부분이 완료되었습니다! 남은 작업은 아래 스크린샷과 같이 이름 관리자에서 MultiReplace 기능의 이름을 지정하는 것입니다. 자세한 지침은 LAMBDA 함수 이름 지정 방법을 참조하세요.
함수에 이름이 지정되면 다른 내장 함수처럼 사용할 수 있습니다.
두 수식 변형 중 어떤 것을 선택하든 최종 사용자 관점에서 구문은 다음과 같이 간단합니다.
MultiReplace(text, old, new)Where:
- Text - 원본 데이터
- Old - 찾을 값
- New - 바꿀 값
이전 예제에서 조금 더 나아가 국가 약어뿐만 아니라 주 약어도 교체해 보겠습니다. 이를 위해 D2에서 시작하는 D열에 약어( old 값)를 입력하고 E2에서 시작하는 E열에 전체 이름( new 값)을 입력합니다.
In B2, MultiReplace 함수를 입력하세요:
=MultiReplace(A2:A10, D2, E2)
Enter 키를 누르고 결과를 확인하세요 :)
이 공식의 작동 방식
공식을 이해하는 단서는 재귀를 이해하는 것입니다. 복잡하게 들릴 수 있지만 원리는 매우 간단합니다. 각각반복, 재귀 함수는 더 큰 문제의 작은 인스턴스 하나를 해결합니다. 우리의 경우 MultiReplace 함수는 이전 값과 새 값을 반복하고 각 루프에서 한 번의 교체를 수행합니다.
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
중첩된 SUBSTITUTE 함수와 마찬가지로 이전 SUBSTITUTE의 결과는 다음 SUBSTITUTE의 text 매개변수가 됩니다. 즉, MultiReplace 의 각 후속 호출에서 SUBSTITUTE 함수는 원래 텍스트 문자열이 아니라 이전 호출의 출력을 처리합니다.
<1의 모든 항목을 처리하려면>old 목록에서 맨 위 셀부터 시작하고 OFFSET 함수를 사용하여 각 상호 작용에서 한 행 아래로 이동합니다.
OFFSET(old, 1, 0)
에 대해서도 동일하게 수행됩니다. new list:
OFFSET(new, 1, 0)
중요한 것은 재귀 호출이 영원히 진행되지 않도록 출구 지점을 제공하는 것입니다. IF 함수의 도움으로 수행됩니다. old 셀이 비어 있으면 함수는 text 를 현재 형식으로 반환하고 종료합니다.
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
또는
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
예 2. Excel
에서 여러 문자 바꾸기 원칙적으로 이전 예에서 설명한 MultiReplace 기능은 개별 문자도 처리합니다. 단, 이전 문자와 새 문자를 각각 별도의 셀에 입력해야 합니다. 위 스크린샷의 축약형 이름과 전체 이름과 같습니다.
이전 문자를 입력하려는 경우한 셀의 문자와 다른 셀의 새 문자를 입력하거나 수식에 직접 입력한 다음 다음 수식 중 하나를 사용하여 ReplaceChars 라는 다른 사용자 지정 함수를 만들 수 있습니다.
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
또는
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
이름 관리자에서 평소와 같이 새 Lambda 함수의 이름을 지정해야 합니다.
새로운 사용자 지정 함수를 사용할 준비가 되었습니다.
ReplaceChars(text, old_chars, new_chars)Where:
- Text - the original strings
- Old - 검색할 문자
- New - 교체할 문자
필드 테스트를 위해 가져온 데이터에서 자주 수행되는 작업을 수행해 보겠습니다. 둥근 따옴표와 둥근 아포스트로피를 곧은 따옴표와 곧은 아포스트로피로 바꿉니다.
먼저 둥근 따옴표와 둥근 아포스트로피를 D2에 입력하고 곧은 따옴표와 곧은 아포스트로피를 E2에 입력합니다. , 가독성을 높이기 위해 문자를 공백으로 구분합니다. (두 셀에서 동일한 구분 기호를 사용하므로 결과에 영향을 미치지 않습니다. Excel은 공백을 공백으로 대체합니다.)
그 다음 B2에 다음 수식을 입력합니다.
=ReplaceChars(A2:A4, D2, E2)
원하는 결과를 정확하게 얻을 수 있습니다.
수식에 문자를 직접 입력할 수도 있습니다. 우리의 경우에는 다음과 같이 곧은 따옴표를 "복제"해야 한다는 것을 기억하십시오.
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
이 수식이 작동하는 방식
The ReplaceChars 함수는 old_chars 및 new_chars 문자열을 순환하며 왼쪽의 첫 번째 문자부터 시작하여 한 번에 하나씩 교체합니다. 이 부분은 SUBSTITUTE 함수에 의해 수행됩니다.
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
각 반복에서 RIGHT 함수는 old_chars 및 의 왼쪽에서 한 문자를 제거합니다. new_chars 문자열, LEFT가 대체할 다음 문자 쌍을 가져올 수 있도록:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
각 재귀 호출 전에 IF 함수는 old_chars 문자열을 평가합니다. . 비어 있지 않으면 함수가 자신을 호출합니다. 마지막 문자가 교체되는 즉시 반복 프로세스가 완료되고 수식은 텍스트 를 현재 형식으로 반환하고 종료합니다.
참고. 핵심 수식에 사용된 SUBSTITUTE 함수는 대소문자를 구분 하기 때문에 람다( MultiReplace 및 ReplaceChars ) 모두 대문자와 소문자를 다른 문자로 취급합니다.
UDF로 대량 찾기 및 바꾸기
Excel에서 LAMBDA 기능을 사용할 수 없는 경우 VBA를 사용하여 기존 방식으로 다중 바꾸기를 위한 사용자 정의 함수를 작성할 수 있습니다.
UDF를 LAMBDA에서 정의한 MultiReplace 함수와 구별하기 위해 MassReplace 와 같이 이름을 다르게 지정합니다. 함수의 코드는 다음과 같습니다.
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As Variant '결과를 저장할 배열 Dim arSearchReplace(), sTmp As String ' 찾기/바꾸기 쌍을 저장할 위치, 임시 문자열 Dim iFindCurRow, cntFindRows As Long ' SearchReplace 배열의 현재 행 인덱스, count 행 수 Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 소스 범위에서 현재 행의 인덱스, 소스 범위에서 현재 열의 인덱스, 행 수, 열 수 cntInputRows = InputRng.Rows.Count cntInputCols = InputRng .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) ' 찾기/바꾸기 쌍의 배열 준비 For iFindCurRow = 1 To cntFindRows arSearchReplace( iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next ' 소스 범위에서 검색 및 바꾸기 For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 cntInputCols stm으로 p = InputRng.Cells(iInputCurRow, iInputCurCol).Value '각 셀의 모든 찾기/바꾸기 쌍 교체 For iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) 다음 arRes (iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionLAMBDA 정의 함수와 마찬가지로 UDF는 통합 문서 전체 입니다. 즉