文字列から頭文字を引き出す(Microsoft Excel)
Rajeevには、一連の単語の最初の文字を抽出する式が必要です。たとえば、セルに「Rajeev Kumar Pandey」というテキストが含まれている場合、彼は別のセルに「RKP」という文字を抽出したいと考えています。
連続する単語の数は、セルごとに異なります。
このタスクに取り組むには、いくつかの方法があります。そもそも、中間列を追加してワークシートの構造を変更したくないと想定されています。この仮定により、テキストから列への機能を使用して元の文字列を個々の単語に分割することもできなくなります。
問題の鍵は、数式が元の文字列のどこにスペースがあるかを判別できることを確認することです。次のような式でうまくいくと思うかもしれません:
=LEFT(A1,1)&MID(A1,FIND(" ",A1,1)+1,1)&MID(A1, FIND(" ",A1,FIND(" ",A1,1)+1)+1,1)
この式は部分的に機能します。元の文字列に3つの単語を区切る2つのスペースがある場合は、問題なく機能します。単語が少ない場合、数式はエラーを返します。それ以上の単語がある場合は、最初の3つの単語の最初の文字のみが返されます(3番目の単語の後はすべて無視されます)。
つまり、数式はスペースをチェックするだけでなく、スペースがない場合やスペースが少なすぎる場合にエラーを処理する必要があります。エラーチェックは、式がはるかに長くなることを意味します:
=IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), IF(ISERR(LEFT(A1,1)),"",LEFT(A1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)&MID(A1,SEARCH(" ",A1, SEARCH(" ",A1)+1)+1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1))
この数式は、文字列内の0〜4語を適切に処理します。また、文字列がスペースで開始または終了せず、単語間に複数のスペースが含まれていないことも前提としています。多数の単語やその他の潜在的な問題(単語間のスペースの数など)を処理する場合は、ユーザー定義関数を使用するのが最適です。
ユーザー定義関数が文字列の単語から先頭の文字を引き出す方法はいくつもあります。実際、私は同じことを達成するかなりの数のバリエーションを受け取りました。ただし、次の例は、おそらく私が遭遇した最も簡潔なコードです。
Function Initials1(Raw As String) As String Dim Temp As Variant Dim J As Integer Application.Volatile Temp = Split(Trim(Raw)) For J = 0 To UBound(Temp) Initials1 = Initials1 & Left(Temp(J), 1) Next J End Function
このコードは、Excel 2000以降のすべてのバージョンのVBAで機能します。Split関数は、文字列内のスペースが発生する場所に基づいて文字列を「分解」します。文字列内の個々の単語は配列(この場合はTemp)に配置され、そこで個々の単語にアクセスできます。ワークシートで関数を使用するには、次のようなものを使用します。
=Initials1(A1)
分割機能をサポートしていないバージョンのExcelを使用している場合は、次のコードも問題なく機能します。
Function Initials2(Raw As String) Dim p As Integer Application.Volatile Initials2 = "" p = 0 Do Initials2 = Trim(Initials2) & Mid(Raw, p + 1, 1) p = InStr(p + 1, Raw, " ") Loop Until p = 0 End Function
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(8661)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
link文字列から最初の文字をプルする。