Terry utilizza sempre la funzione del foglio di lavoro APPROPRIATO per cambiare il caso del testo nei suoi fogli di lavoro. Si chiede se esiste un modo per istruire la funzione a ignorare determinate parole, in modo che non inizino con una lettera maiuscola. Non è insolito per lui dover tornare indietro dopo aver usato PROPER e cambiare parole come “la” o “una” in tutte minuscole. Se PROPER potesse saltare la modifica automatica di tali parole, sarebbe di grande aiuto.

Un modo per risolvere questo problema è utilizzare la funzione del foglio di lavoro SOSTITUISCI insieme alla funzione PROPER. Ad esempio, se volessi trovare istanze della parola “The” con “the”, potresti usare quanto segue:

=SUBSTITUTE(PROPER(A1)," The "," the ")

Nota l’inclusione dello spazio prima e dopo quello che stai cercando e quello che stai sostituendo. Ciò assicura che vengano modificate solo le parole complete. Si assicura inoltre che non vengano apportate modifiche all’inizio del valore della cella o alla fine.

Se vuoi cercare altre parole che devono essere sostituite, puoi semplicemente aumentare il numero di istanze di SOSTITUISCI nella formula:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(PROPER(A1)," The ", " the ")," An "," an ")," And "," and ")

Ovviamente questo può diventare un po ‘imbarazzante se hai molte parole che vuoi escludere dalla modifica. In tal caso dovrai ricorrere all’uso di una macro. La seguente macro, scritta come una funzione definita dall’utente, può essere utilizzata per convertire tutte le parole in una cella in maiuscole iniziali (proprio come PROPER), ma assicurati che alcune parole definite siano minuscole.

Function Title(ByVal ref As Range) As String     Dim vaArray As Variant     Dim c As String     Dim i As Integer     Dim J As Integer     Dim vaLCase As Variant     Dim str As String

' Array contains terms that should be lower case     vaLCase = Array("a", "an", "and", "in", "is", _       "of", "or", "the", "to", "with")



c = StrConv(ref, 3)

'split the words into an array     vaArray = Split(c, " ")

For i = 2 To UBound(vaArray)

For J = LBound(vaLCase) To UBound(vaLCase)

' compare each word in the cell against the             ' list of words to remain lowercase. If the             ' Upper versions match then replace the             ' cell word with the lowercase version.

If UCase(vaArray(i)) = UCase(vaLCase(J)) Then                 vaArray(i) = vaLCase(J)

End If         Next J     Next i

' rebuild the sentence     str = ""

For i = 1 To UBound(vaArray)

str = str & " " & vaArray(i)

Next i

Title = Trim(str)

End Function

Per utilizzare la macro, tutto ciò che devi fare è utilizzare quanto segue nel tuo foglio di lavoro:

=Title(A1)

Se viene visualizzato un errore quando si tenta di eseguire questa macro, è probabile che si stia utilizzando Excel 97. La funzione Dividi non è stata aggiunta fino a Excel 2000, quindi gli utenti di Excel 97 riceveranno un errore. Se lo fai, aggiungi la seguente macro che emula ciò che fa la funzione Split.

Function Split(Raw As String, Delim As String) As Variant     Dim vAry() As String     Dim sTemp As String     Dim J As Integer     Dim Indx As Integer

Indx = 0     sTemp = Raw     J = InStr(sTemp, Delim)

While J > 0         Indx = Indx + 1         ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(Left(sTemp, J))

sTemp = Trim(Mid(sTemp, J, Len(sTemp)))

J = InStr(sTemp, Delim)

Wend     Indx = Indx + 1     ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(sTemp)

Split = vAry()

End Function

Puoi anche trovare un approccio aggiuntivo per realizzare la conversione desiderata in questo sito:

http://dmcritchie.mvps.org/excel/proper.htm

_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 (10559) si applica a Microsoft Excel 97, 2000, 2002 e 2003.

Puoi trovare una versione di questo suggerimento per l’interfaccia a barra multifunzione di Excel (Excel 2007 e versioni successive) qui: