문장을 셀로 분할 (Microsoft Excel)
Pieter에는 A 열에 텍스트가 포함 된 많은 셀이 있습니다. 특히, 셀은 각각 여러 문장의 텍스트를 포함합니다. 그는 문장을 개별 셀로 나누고 싶습니다. 그는 Text to Columns 도구를 사용할 수 있다는 것을 알고 있지만 문장이 다른 구두점으로 끝날 수 있고 일부 구두점이 문장 중간에 사용될 수 있으므로 완전히 유용하지는 않습니다. (예 : Mr. 또는 Ms.와 같은 제목 뒤의 마침표) Pieter는 문장을 다른 셀로 분할하는 더 좋은 방법이 있는지 궁금합니다.
이 작업을 수동으로 수행하려면 몇 가지 방법이 있습니다.
첫째, 도우미 열을 사용하여 데이터 작업을 수행 할 수 있습니다. 예를 들어 다음 수식을 셀 B1에 넣을 수 있습니다.
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"Mr.", "Mr#"), "Mrs.", "Mrs#"), "Ms.", "Ms#")
그런 다음 수식을 필요한만큼 복사합니다. 최종적으로는 일반적인 제목 (Mr., Mrs. 및 Ms.)이 고유 한 문자 시퀀스 (Mr #, Mrs # 및 Ms #)로 대체됩니다. B 열의 결과를 값으로 B 열에 다시 복사 한 다음 (수식이 제거됨) B 열의 열에 텍스트를 사용합니다. 마지막으로 찾기 및 바꾸기를 사용하여 # 문자의 모든 인스턴스를 마침표로 변경합니다.
이것의 단점은 공식이 기간의 세 가지 일반적인 용도만을 설명한다는 것입니다. 실제로 꽤 많은 것을 처리해야 할 수도 있습니다. 예를 들어 문장에 Dr.와 같은 제목이나 Ph.D와 같은 자격 표시기가있을 수 있습니다. 또는 Esq. 이러한 기간 포함 약어 목록은 상당히 길어질 수 있습니다. 이러한 경우 다음과 같이 수동으로 변경할 수 있습니다.
-
찾기 및 바꾸기를 사용하여 텍스트의 모든 마침표를 찾고, 문장 끝이 아닌 마침표를 마커 문자 (위 기술에서 #)로 바꿉니다.
-
텍스트를 열로 도구를 사용하여 문장을 분리합니다.
-
찾기 및 바꾸기를 사용하여 마커 문자의 모든 인스턴스를 마침표로 다시 변경합니다.
다시 말하지만, 문장으로 끝나지 않는 마침표가 많으면이 과정을 거치는 데 상당한 시간이 걸릴 수 있습니다.
물론 이러한 접근 방식은 실제로 복잡한 주제를 다룹니다.
진짜 질문은 문장을 어떻게 정의할까요? 영어에서는 마침표, 느낌표 및 물음표로 문장을 종료하는 세 개의 구두점 만 있습니다. 그러나 이에 대한 변형과 예외가 있습니다. 예를 들어, 문장은 따옴표로 끝날 수 있지만 그 따옴표는 항상 그 앞에 세 개의 종료 구두점 중 하나를 갖습니다. 또한 이미 언급했듯이 약어를 표시하는 데 마침표를 사용할 수 있습니다.
찾기 및 바꾸기를 사용하여 이러한 모든 문장 부호 및 예외를 처리하기 시작하면 복잡한 일련의 단계를 빠르게 실행할 수 있습니다. 매크로를 사용하여 분할을 시도하는 것이 훨씬 좋습니다. 다음은 대부분의 문장과 약어를 적절하게 처리하는 것입니다.
Sub SplitSentences() Dim c As Range Dim sException(8) As String Dim sReplacement(8) As String Dim sTerm(6) As String Dim sTemp As String Dim J As Integer Dim sExp As Variant ' These are the valid ways for a sentence to end sTerm(1) = ". " sTerm(2) = "! " sTerm(3) = "? " sTerm(4) = "." & Chr(34) sTerm(5) = "!" & Chr(34) sTerm(6) = "?" & Chr(34) ' These are the exceptions to the rule ' of a period ending a sentence sException(1) = "Mr." sException(2) = "Mrs." sException(3) = "Ms." sException(4) = "Dr." sException(5) = "Esq." sException(6) = "Ph.D." sException(7) = "a.m." sException(8) = "p.m." ' Set up the replacements for the exceptions For J = 1 To 8 sReplacement(J) = Replace(sException(J), ".", "[{}]") Next J For Each c In Selection sTemp = c.Value ' Convert all the exceptions For J = 1 To 8 sTemp = Replace(sTemp, sException(J), sReplacement(J)) Next J ' Demarcate sentences with a tab For J = 1 To 6 sTemp = Replace(sTemp, sTerm(J), Trim(sTerm(J)) & Chr(9)) Next J ' Split sentences into an array sExp = Split(sTemp, Chr(9)) For J = 0 To UBound(sExp) ' Replace the code for valid periods sExp(J) = Replace(sExp(J), "[{}]", ".") ' Place sentences into adjacent cells on row c.Offset(0, J).Value = Trim(sExp(J)) Next J Next c End Sub
허용되는 문장 종료는 sTerm 배열에 표시되고 허용되는 약어는 sException 배열에 있습니다. 텍스트에 다른 약어가있을 수있는 경우 sException 배열을 확장하여이를 포함 할 수 있습니다.
매크로는 선택한 셀을 단계별로 실행하고 허용되는 모든 예외를 대체합니다. 그런 다음 허용되는 모든 문장 종료를 해당 종료 뒤에 탭 문자가 오는 것으로 바꿉니다.
그런 다음 탭 문자의 위치에 따라 문장을 분리합니다. 마지막으로, 약어에 있던 모든 유효 기간을 복원하고 같은 행의 인접한 셀에 문장을 배치합니다.
매크로는 선택한 셀에있는 모든 항목을 대체하지만 문장을 저장하려면 선택 항목의 오른쪽에 많은 셀이 필요합니다. 이 때문에 셀 범위를 선택하고 매크로를 실행하기 전에 원본 워크 시트를 저장해야 할 수 있습니다.
마지막으로 매크로가 완벽하지 않다는 점에 유의할 수 있습니다. 약어가 문장을 끝내는 것은 문법가의 관점에서 완벽하게 받아 들일 수 있습니다. 이 경우 적절한 구두점은 다음 두 짧은 문장에서와 같이 약어의 마지막 마침표가 문장의 종료 마침표 역할도 함을 나타냅니다.
Sheila earned her Ph.D. She was very happy.
이제 다음 단일 문장을 고려하십시오.
Sheila earned her Ph.D. from an Ivy League school.
두 가지 예 (두 문장 대 단일 문장)를 비교할 때, 프로그래밍 방식으로 박사 과정을 구별 할 방법이 없습니다. 다음 단어가 대문자로 시작하는지 또는 인용 부호 뒤에 대문자가 오는지 확인하지 않고 문장을 종료하거나 문장 중간에 발생하는 경우. 이것은 매우 빠르게 복잡해질 수 있습니다. 또한 이것은 박사뿐만 아니라 모든 약어에 적용됩니다. 위에서 언급 한 매크로는 이러한 모든 사건을 예상하고 처리하기보다는 약어가 문장을 끝내는지 여부를 식별하려고 시도하지 않습니다. 단순히 모든 약어가 문장 중간에있는 것처럼 취급합니다.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (12549)은 Office 365의 Microsoft Excel 2007, 2010, 2013, 2016, 2019 및 Excel에 적용됩니다.