Excel에서 대문자 분할
셀에 있는 모든 단어를 대문자로 나누고자 합니다. 예:
원래 값:
MikeJones
RinaJonesJunior
MichealSamuelsLurth
예상 출력:
Mike Jones
Rina Jones Junior
Micheal Samuels Lurth
VBA를 사용하지 않고 수행할 수 있습니까?
Excell의 놀라운 공식을 인정한다면, 가장 효율적인 코드 솔루션은 다음과 같습니다.RegExp
기반입니다. 이렇게 하면 긴 루프를 피할 수 있습니다.
Function SplitCaps(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "([a-z])([A-Z])"
SplitCaps = .Replace(strIn, "$1 $2")
End With
End Function
다음은 워크시트 함수 솔루션입니다.예쁘지는 않지만, VBA를 사용하는 것을 완전히 반대한다면, 당신은 추악한 선택들만 가지고 있다고 생각합니다.텍스트의 경우A1
다음을 에 붙여넣습니다.B1
++ShiftEnter를 눌러 식을 배열 공식으로 입력합니다.
=IFERROR(INDEX(IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))<=90,IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))>=65,IF(MID(D1,ROW(INDIRECT("A1:A"&LEN(D1)-1)),1)<>" ",REPLACE(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1," "&MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1)),D1),D1),D1),MIN(IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))<=90,IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))>=65,IF(MID(D1,ROW(INDIRECT("A1:A"&LEN(D1)-1)),1)<>" ",ROW(INDIRECT("A1:A"&LEN(D1)-1)),2000000),2000000),2000000))),D1)
못생겼다고 했잖아요!
그리고 그 모든 노력에도 불구하고, 그것은 단지 이름과 두 번째 이름을 나눌 뿐입니다.분할을 더 하려면 오른쪽에 수식을 채우십시오.예를 들어, 이름 목록이 있는 경우A1:A10
그리고 당신은 어떤 이름이든 가장 많은 단어가 4개라고 생각합니다, 당신은 공식을 입력할 수 있습니다.B1
(어레이 공식으로!), 다음과 같이 입력합니다.B10
그리고 나서 오른쪽으로 채웁니다.E10
분할된 이름의 목록은 다음에 있습니다.E1:E10
.
토끼굴 아래로 뛰어내리는 경향이 있다면, 여기 공식이 무엇을 하는지에 대한 간단한 설명이 있습니다.
- 각 문자가 대문자의 ASCII 범위에 있고 공백이 앞에 있지 않은지 확인합니다.이름의 첫 번째 문자를 건너뜁니다.
- 문자열 길이(-1)와 동일한 크기의 배열은 다음과 같이 채워집니다.일치하는 항목이 발견되면 문자열이 일치하는 문자로 대체되어 저장됩니다.일치하는 항목이 없으면 원래 문자열이 저장됩니다.
- 이 배열에서 일치하는 첫 번째 요소가 반환됩니다.일치하는 항목이 없으면 원래 문자열이 반환됩니다.
당신은 VBA 매크로를 사용하고 싶지 않다고 말하지만 문제는 VBA가 필요하기 때문에 UDF가 당신에게 좋은 해결책이 될 것 같습니다.사용할 수 있는 UDF(User Defined Function)입니다.이 코드를 데이터가 있는 동일한 파일의 일반 모듈에 넣습니다.
Function splitbycaps(inputstr As String) As String
Dim i As Long
Dim temp As String
If inputstr = vbNullString Then
splitbycaps = temp
Exit Function
Else
temp = inputstr
For i = 1 To Len(temp)
If Mid(temp, i, 1) = UCase(Mid(temp, i, 1)) Then
If i <> 1 Then
temp = Left(temp, i - 1) + " " + Right(temp, Len(temp) - i + 1)
i = i + 1
End If
End If
Next i
splitbycaps = temp
End If
End Function
이제 셀에서 직접 기능을 사용할 수 있습니다.A1 -> "MikeJones"에 데이터가 있고 셀 A2에서 답을 원한다고 가정합니다.A2에서 다음과 같이 입력합니다.
=splitbycaps(A1)
그리고 당신은 당신의 출력물을 얻을 것입니다.HTH.
VBA와 함께 해야 합니다.
Sub insertspaces()
Range("A1").Select
Do
Row = ActiveCell.Row
Column = ActiveCell.Column
vlaue = ActiveCell.Value
If vlaue = "" Then Exit Do
Length = Len(vlaue)
If Length > 1 Then
For x = Length To 2 Step -1
par = Mid(vlaue, x, 1)
cod = Asc(par)
If (cod > 64 And cod < 91) Or (cod > 191 And cod < 222) Then
vlaue = Left(vlaue, x - 1) + " " + Mid(vlaue, x)
End If
Next
ActiveCell.Value = vlaue
End If
Row = Row + 1
Cells(Row, Column).Select
Loop
End Sub
이 기능은 사용자 정의 기능으로 작동합니다.
Function SplitOnCapital(str As String) As String
Dim letter As Byte, result As String
For letter = 2 To Len(str)
If Asc(VBA.Mid$(str, letter, 1)) < 90 Then //65 to 90 are char codes for A to Z
result = WorksheetFunction.Replace(str, letter, 0, " ")
letter = letter + 1
End If
Next letter
SplitOnCapital = result
End Function
Sub caps_small()
strIn = InputBox("Enter a string:")
For i = 1 To Len(strIn)
If Mid(strIn, i, 1) Like "[A-Z]" Then
cap = Mid(strIn, i, 1)
capstr = capstr & cap
ElseIf Mid(strIn, i, 1) Like "[a-z]" Then
sml = Mid(strIn, i, 1)
smlstr = smlstr & sml
End If
Next
MsgBox capstr
MsgBox smlstr
End Sub
언급URL : https://stackoverflow.com/questions/10190269/split-uppercase-words-in-excel
'programing' 카테고리의 다른 글
여러 열을 함께 붙여넣기 (0) | 2023.06.18 |
---|---|
스토어 게터를 기준으로 조건부로 b-테이블 열 표시/숨기기 (0) | 2023.06.18 |
구체화된 보기를 항상 최신 상태로 유지하려면 어떻게 해야 합니까? (0) | 2023.06.18 |
C - time_t를 YYY-MM-DD 형식의 문자열로 변환 HH:MM:SS (0) | 2023.06.18 |
C: 간격으로 플로트를 감는 방법 [-pi, pi) (0) | 2023.06.18 |