programing

Excel에서 대문자 분할

megabox 2023. 6. 18. 12:29
반응형

Excel에서 대문자 분할

셀에 있는 모든 단어를 대문자로 나누고자 합니다. 예:

원래 값:

MikeJones
RinaJonesJunior
MichealSamuelsLurth

예상 출력:

Mike Jones
Rina Jones Junior
Micheal Samuels Lurth

VBA를 사용하지 않고 수행할 수 있습니까?

Excell의 놀라운 공식을 인정한다면, 가장 효율적인 코드 솔루션은 다음과 같습니다.RegExp기반입니다. 이렇게 하면 긴 루프를 피할 수 있습니다.

enter image description here

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.

sample use of formula

토끼굴 아래로 뛰어내리는 경향이 있다면, 여기 공식이 무엇을 하는지에 대한 간단한 설명이 있습니다.

  1. 각 문자가 대문자의 ASCII 범위에 있고 공백이 앞에 있지 않은지 확인합니다.이름의 첫 번째 문자를 건너뜁니다.
  2. 문자열 길이(-1)와 동일한 크기의 배열은 다음과 같이 채워집니다.일치하는 항목이 발견되면 문자열이 일치하는 문자로 대체되어 저장됩니다.일치하는 항목이 없으면 원래 문자열이 저장됩니다.
  3. 이 배열에서 일치하는 첫 번째 요소가 반환됩니다.일치하는 항목이 없으면 원래 문자열이 반환됩니다.

당신은 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

반응형