フランクは、毎日4,000〜5,000の名前を大文字から固有名詞に変換する必要があります。 PROPER関数を使用すると、頭字語などを隠してはならない場合に対処するために手動で確認および編集する必要がある、まずまずの結果が得られます。フランクは、ある種の例外リストに対するルックアップを含める関数がおそらく必要だと考えているので、Excelにケース変換のそのような機能があるかどうか疑問に思います。

これを処理する最良の方法は、開始するデータによって異なります。たとえば、ソースデータ内の2つのセルの値が次のようになっているとします。

Big John's Mining, LLC USA

LLCのケースを変更したくないという例外がある場合は、各セルの一部を調べるメソッドが必要です。 USAのケースを変更したくないという例外がある場合は、各セルの内容を全体として評価するメソッドが必要です。

最初のタイプのデータよりも2番目のタイプのデータの方が扱いやすいので、最初にそれを見てみましょう。次の式は、ブックのどこかにある例外リストに依存しています。この例外リストは、_Exceptions_という名前を使用して、名前付き範囲として設定する必要があります。

元のデータが列Aにある場合は、この数式をセルB1に配置し、必要に応じてコピーすることができます。

=IFERROR(VLOOKUP(A1,Exceptions,1,0),PROPER(A1))

Exceptionsテーブル内のすべてに完全に一致するセルは、例外とまったく同じように見え、完全に一致しないセルには、PROPERが適用されます。

最初のタイプのデータ(例外について各セルの内部を調べる必要がある場合)については、マクロに依存するのが最善です。以下は、出発点として使用できる例です。

Function MyProper(ByVal r As Range) As String     Dim vExceptions As Variant     Dim vReplacements As Variant     Dim vWords As Variant     Dim iRaw As String     Dim J As Integer     Dim K As Integer     Dim sTemp As String

' Exceptions array     vExceptions = Array("USA", "PhD", "LLC", "and", _       "Kentucky", "D.C.")



' Replacements array     vReplacements = Array("USA", "PhD", "LLC", "and", _       "KY", "DC")



' Convert the text to Proper case and store in a string     iRaw = StrConv(r, 3)

' Split the words into an array     vWords = Split(iRaw, " ")

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

For K = LBound(vExceptions) To UBound(vExceptions)

If UCase(vWords(J)) = UCase(vExceptions(K)) Then                 vWords(J) = vReplacements(K)

End If         Next K     Next J

' Rebuild the cell contents     sTemp = ""

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

sTemp = sTemp & " " & vWords(J)

Next J

MyProper = Trim(sTemp)

End Function

これはユーザー定義関数であるため、以下を使用してソースデータを変換できます。

=MyProper(A1)

マクロの速度は、ワークシートで使用される回数(変更する必要のある単語の数)と、マクロでチェックする例外の数の2つによって異なります。 4,000〜5,000語と、1ダースほどの例外がチェックされていても、マクロは許容できる速度で動作するはずです。 (手作業でチェックするよりも確かに速いでしょう!)

この関数は、vExceptionsとvReplacementsの2つの配列に依存しています。 Split関数を使用して、セルの内容をvWords配列に分解します。 (Split関数が実行された後、スペースの出現によって定義されるように、vWords配列のすべての要素に単語が含まれます。)次に、vWords配列の各要素がvExceptions配列の各要素と比較されます。それらが一致する場合(または、より正確には、それぞれの大文字バージョンが一致する場合)、vReplacements配列の対応する要素が元の単語の代わりに使用されます。このアプローチには、ケンタッキーをKYに、D.CをDCに置き換える場合と同様に、頭字語を置き換えることができるという追加の利点があります。

このマクロは良い出発点にすぎないと言ったことを思い出してください。

明らかに、例外と置換リストを反映するように変更する必要があります。さらに、元のデータに句読点がある場合、その句読点は分割関数によって展開される「単語」の一部と見なされることを理解する必要があります。たとえば、元のデータに「Davis、LLC、Stanton」のようなものがある場合、コンマはそれらが続く単語の一部と見なされます。 (分割はスペースで行われることに注意してください。)したがって、vExceptions配列の「LLC」がvWordsの「LLC」と一致しないため、結果に「Davis、Llc、Stanton」が表示されます。アレイ。

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

このヒント(7840)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。