Разделение строки и использование заглавных букв в зависимости от ситуации - PullRequest
0 голосов
/ 30 октября 2019

У меня есть несколько имен столбцов с начальным соглашением о кодировании, которые я хотел бы преобразовать, см. Пример:

   Original        Target     
 ------------- -------------- 
  partID        Part ID       
  completedBy   Completed By 

У меня есть функция в VBA, которая разделяет исходную строку заглавными буквами:

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

Я обертываю эту функцию в PROPER, например, PROPER (SplitCaps (A3)) выдает желаемый результат для третьей строки, но оставляет идентификатор D в некапитализированном.

   Original        Actual    
 ------------- -------------- 
  partID        Part Id       
  completedBy   Completed By 

МожетКто-нибудь думает о решении добавить случаи к этой функции?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

разбить слово и зациклить результаты и проверить, все ли заглавные буквы перед использованием Proper. затем присоедините их обратно:

Sub kjl()
Dim str As String
str = "partID"

Dim strArr() As String
strArr = Split(SplitCaps(str), " ")

Dim i As Long
For i = 0 To UBound(strArr)
    If UCase(strArr(i)) <> strArr(i) Then
        strArr(i) = Application.Proper(strArr(i))
    End If
Next i

str = Join(strArr, " ")

Debug.Print str
End Sub

Если вы хотите, чтобы формула выполняла то, что вы запрашиваете:-Введите вместо ввода при выходе из режима редактирования.

enter image description here


Или используйте указанный выше код в качестве функции:

Function propSplitCaps(str As String)

Dim strArr() As String
strArr = Split(SplitCaps(str), " ")

Dim i As Long
For i = 0 To UBound(strArr)
    If UCase(strArr(i)) <> strArr(i) Then
        strArr(i) = Application.Proper(strArr(i))
    End If
Next i

propSplitCaps = Join(strArr, " ")
End Function

и назовите это =propSplitCaps(A1)

1 голос
/ 31 октября 2019

Вместо того, чтобы использовать функцию Proper, просто начните вводить первую букву каждого слова после того, как вы разбили строку при переходе.

Option Explicit
Function Cap(s As String) As String
    Dim RE As RegExp, MC As MatchCollection, M As Match
    Const sPatSplit = "([a-z])([A-Z])"
    Const sPatFirstLtr As String = "\b(\w)"
    Const sSplit As String = "$1 $2"
Set RE = New RegExp
With RE
    .Global = True
    .Pattern = sPatSplit
    .IgnoreCase = False
    If .Test(s) = True Then
        s = .Replace(s, sSplit)

        .Pattern = sPatFirstLtr
        Set MC = .Execute(s)
        For Each M In MC
            s = WorksheetFunction.Replace(s, M.FirstIndex + 1, 1, UCase(M))
        Next M
    End If
End With

Cap = s
End Function

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...