Come molte persone, Kirk copia le informazioni in fogli di lavoro Excel che hanno origine in altri luoghi. Le informazioni che Kirk copia in genere sono tutte in MAIUSCOLO e desidera convertirle in ciò che Excel definisce “maiuscolo” (solo la prima lettera di ogni parola è in maiuscolo). Il problema è che la funzione PROPER del foglio di lavoro, che esegue la conversione, non presta attenzione alle parole in maiuscolo. Pertanto, parole come a, an, in e, the e with sono tutte con il limite iniziale. Kirk non vuole che quelle parole (e forse altre) siano maiuscole.

Esistono diversi modi per affrontare questo problema. Uno è usare una formula piuttosto lunga per eseguire la conversione:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( SUBSTITUTE(SUBSTITUTE(PROPER($B$13);" A ";" a "); " An ";" an ");" In ";" in ");" And ";" and "); " The ";" the ");" With ";" with ")

Ricorda, questa è tutta un’unica formula. Esegue la conversione tra maiuscole e minuscole, ma poi sostituisce le parole minuscole desiderate (a, an, in e, the, with). Sebbene ciò sia relativamente semplice, l’utilità della formula diventa limitata man mano che si aumenta il numero di parole per le quali è necessario eseguire le sostituzioni.

Forse un approccio migliore è utilizzare una macro di funzione definita dall’utente per eseguire la conversione del caso per te. La funzione seguente controlla alcune parole comuni che non dovrebbero avere maiuscole iniziali, assicurandosi che siano minuscole.

Function MyProper(str As String)

Dim vExclude     Dim i As Integer     vExclude = Array("a", "an", "in", "and", _       "the", "with", "is", "at")



Application.Volatile     str = StrConv(str, vbProperCase)

For i = LBound(vExclude) To UBound(vExclude)

str = Application.WorksheetFunction. _           Substitute(str, " " & _           StrConv(vExclude(i), vbProperCase) _           & " ", " " & vExclude(i) & " ")

Next     MyProper = str End Function

Le parole possono essere aggiunte all’array e il codice rileva automaticamente le aggiunte e controlla le parole aggiunte. Si noti inoltre che il codice aggiunge uno spazio prima e dopo ogni parola nell’array durante il controllo. In questo modo non hai il codice che apporta modifiche alle parole parziali (come “e” essere all’interno di “stand”) o alle parole all’inizio di una frase. Puoi usare la funzione all’interno di un foglio di lavoro in questo modo:

=MyProper(B7)

Questo utilizzo restituisce il testo modificato senza regolare il testo originale in B7.

Se preferisci, puoi usare una funzione che prende il suo elenco di parole da un intervallo denominato nella cartella di lavoro. La seguente funzione utilizza un intervallo di celle denominato MyList, con una singola parola per cella. Si presume che questo elenco si trovi in ​​un foglio di lavoro denominato WordList.

Function ProperSpecial(cX As Range)

' rng = target Cell

Dim c As Range     Dim sTemp As String

sTemp = Application.WorksheetFunction.Proper(cX.Value)

For Each c In Worksheets("WordList").Range("MyList")

sTemp = Application.WorksheetFunction.Substitute( _           sTemp, Application.WorksheetFunction.Proper( _           " " & c.Value & " "), (" " & c.Value & " "))

Next c

ProperSpecial = sTemp End Function

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3467) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: