テリーは常にPROPERワークシート機能を使用して、ワークシートのテキストの大文字と小文字を変更しています。彼は、大文字で始まらないように、特定の単語を無視するように関数に指示する方法があるかどうか疑問に思います。彼がPROPERを使用した後に戻って、「the」や「an」などの単語をすべて小文字に変更しなければならないことは珍しいことではありません。 PROPERがそのような単語の自動変更をスキップできれば、それは大きな助けになるでしょう。

これに取り組む1つの方法は、SUBSTITUTEワークシート関数をPROPER関数と組み合わせて使用​​することです。たとえば、「The」と「the」という単語のインスタンスを検索する場合は、次を使用できます。

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

検索対象と置換対象の前後にスペースが含まれていることに注意してください。これにより、完全な単語のみが変更されることが保証されます。また、セル値の最初または最後に変更が加えられていないことを確認します。

置換が必要な他の単語を検索したい場合は、次の式でSUBSTITUTEのインスタンスの数を増やすだけです。

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

変更から除外したい単語がたくさんある場合、これは明らかに少し厄介になる可能性があります。その場合、マクロの使用に頼る必要があります。ユーザー定義関数として記述された次のマクロを使用して、セル内のすべての単語を初期大文字に変換できます(PROPERと同様)が、特定の定義済み単語が小文字であることを確認してください。

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

マクロを使用するには、ワークシートで次を使用するだけです。

=Title(A1)

このマクロを実行しようとしたときにエラーが発生した場合は、Excel97を使用している可能性があります。分割機能はExcel2000まで追加されなかったため、Excel97ユーザーはエラーを受け取ります。その場合は、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

このサイトで、目的の変換を達成するための追加のアプローチを見つけることもできます:

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

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10559)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります:

link:/ excelribbon-Making_PROPER_Skip_Certain_Words [Making PROPER Skip特定の単語]