Frank는 매일 4,000-5,000 개의 이름을 대문자에서 적절한 대소 문자로 변환해야합니다. PROPER 기능은 은밀하지 않아야하는 약어 등에 대처하기 위해 여전히 수동 검토 및 편집이 필요한 합격 가능한 결과를 제공합니다. Frank의 생각은 아마도 일종의 예외 목록에 대한 조회를 포함하는 기능이 필요하다는 것이므로 Excel에 대소 문자 변환 기능이 있는지 궁금합니다.

이를 처리하는 가장 좋은 방법은 시작하는 데이터에 따라 다릅니다. 예를 들어 다음이 소스 데이터에있는 두 셀의 값이라고 가정 해 보겠습니다.

Big John's Mining, LLC USA

LLC의 경우를 변경하고 싶지 않다는 것이 예외 인 경우 각 셀의 일부를 살펴볼 방법이 필요합니다. 예외적으로 USA의 대소 문자를 변경하지 않으려면 각 셀의 내용을 전체적으로 평가하는 방법이 필요합니다.

첫 번째 데이터보다 두 번째 유형의 데이터를 처리하는 것이 더 쉽기 때문에 먼저 살펴 보겠습니다. 다음 수식은 통합 문서에있는 예외 목록을 사용합니다. 이 예외 목록은 Exceptions 이름을 사용하여 명명 된 범위로 설정해야합니다.

원래 데이터가 A 열에있는 경우이 수식을 B1 셀에 넣은 다음 필요한만큼 복사 할 수 있습니다.

=IFERROR(VLOOKUP(A1,Exceptions,1,0),PROPER(A1))

Exceptions 테이블의 항목과 완전히 일치하는 모든 셀은 예외와 똑같이 보이게되고 완전히 일치하지 않는 모든 셀은 PROPER가 적용됩니다.

첫 번째 데이터 유형 (각 셀 내부에서 예외를 찾아야하는 경우)의 경우 매크로에 의존하는 것이 가장 좋습니다. 다음은 시작점으로 사용할 수있는 예제입니다.

Function MyProper(ByVal r As Range) As String     Dim vExceptions As Variant     Dim vReplacements As Variant     Dim vWords As Variant     Dim iRaw As String     Dim J As Integer     Dim K As Integer     Dim sTemp As String

' Exceptions array     vExceptions = Array("USA", "PhD", "LLC", "and", _       "Kentucky", "D.C.")



' Replacements array     vReplacements = Array("USA", "PhD", "LLC", "and", _       "KY", "DC")



' Convert the text to Proper case and store in a string     iRaw = StrConv(r, 3)

' Split the words into an array     vWords = Split(iRaw, " ")

For J = LBound(vWords) To UBound(vWords)

For K = LBound(vExceptions) To UBound(vExceptions)

If UCase(vWords(J)) = UCase(vExceptions(K)) Then                 vWords(J) = vReplacements(K)

End If         Next K     Next J

' Rebuild the cell contents     sTemp = ""

For J = LBound(vWords) To UBound(vWords)

sTemp = sTemp & " " & vWords(J)

Next J

MyProper = Trim(sTemp)

End Function

이것은 사용자 정의 함수이므로 다음을 사용하여 소스 데이터에 대한 변환을 수행 할 수 있습니다.

=MyProper(A1)

매크로의 속도는 워크 시트에서 사용되는 횟수 (수정해야하는 단어 수)와 매크로에서 확인하는 예외 수의 두 가지에 따라 달라집니다. 4,000-5,000 개의 단어와 12 개 정도의 예외를 확인하는 경우 매크로는 허용 할 수있을만큼 빠르게 작동해야합니다. (손으로 확인하는 것보다 확실히 빠를 것입니다!)

이 함수는 vExceptions 및 vReplacements의 두 배열에 의존합니다. Split 함수를 사용하여 셀 내용을 vWords 배열로 분해합니다. (분할 함수가 실행 된 후, vWords 배열의 모든 요소는 공백 발생으로 정의 된 단어를 포함합니다.) 그런 다음 vWords 배열의 각 요소를 vExceptions 배열의 각 요소와 비교합니다. 일치하는 경우 (또는 각 대문자 버전이 일치하는 경우 더 적절하게) vReplacements 배열의 해당 요소가 원래 단어 대신 사용됩니다. 이 접근 방식은 켄터키를 KY로, D.C를 DC로 대체 할 때처럼 두문자어를 대체 할 수 있다는 추가 이점이 있습니다.

이 매크로는 좋은 시작점 일 뿐이라고 언급했습니다.

예외 및 교체 목록을 반영하기 위해 분명히 수정해야합니다. 또한 원본 데이터에 구두점이있는 경우 해당 구두점은 분할 기능에 의해 분해 된 “단어”의 일부로 간주된다는 점을 이해해야합니다. 예를 들어 원본 데이터에 “Davis, LLC, Stanton”과 같은 내용이있는 경우 쉼표는 뒤에 오는 단어의 일부로 간주됩니다. (분할은 공백에서 이루어집니다.) 따라서 vExceptions 배열의 “LLC”가 vWords에있는 “LLC”와 일치하지 않기 때문에 결과에 “Davis, Llc, Stanton”이 표시됩니다. 정렬.

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (7840)은 Office 365의 Microsoft Excel 2007, 2010, 2013, 2016, 2019 및 Excel에 적용됩니다.