バリーは、テキスト文字列内の文字のN番目の出現を識別したいと思うことがよくあります。彼は、SEARCHおよびFINDワークシート関数を使用して最初の出現箇所を見つけることができることを知っていますが、たとえば、テキスト文字列内の文字「B」の3番目の出現箇所を見つける方法がわかりません。

実際には、次の方法でSEARCH関数を使用して目的のオカレンスを見つけることができます。

=SEARCHB("b",G20,(SEARCHB("b",G20,(SEARCHB("b",G20,1)+1))+1))

SEARCHB関数がネストされた方法でどのように使用されているかに注目してください。数式は検索対象(文字「b」)を指定し、ネストレベルの数は、セル内で検索するオカレンスを示します。数式は、セル内の目的の文字の位置を返します。

もちろん、このような式の問題は、保守が難しく、たとえば7番目のオカレンスを見つけたい場合はすぐに使用できなくなる可能性があることです。

より柔軟な式は次のようになります:

=FIND(CHAR(1),SUBSTITUTE(A1,"B",CHAR(1),3))

この式は、A1の値を調べます。セル内で3番目に出現する「B」の代わりにCHAR(1)コードを使用します。次に、FIND関数は、結果の文字列内でCHAR(1)が発生する位置を探します。

目的のオカレンスが存在しない場合、数式は#VALUEエラーを返します。

必要に応じて、文字のN番目の位置を検索するユーザー定義関数を作成できます。以下は、検索する文字列、一致するテキスト、および必要な位置の3つの引数をとる非常に単純なマクロです。

Function FindN(sFindWhat As String, _   sInputString As String, N As Integer) As Integer     Dim J As Integer

FindN = 0     For J = 1 To N         FindN = InStr(FindN + 1, sInputString, sFindWhat)

If FindN = 0 Then Exit For     Next End Function

この関数は、検索する内容で大文字と小文字を区別し、sFindWhat値が発生する指定された文字列内の位置を返します。指定されたインスタンスでオカレンスがない場合、関数は0を返します。以下に、ワークシートで関数を使用する方法を示します。

=FindN("b",C15,3)

注:

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

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

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

このヒント(10567)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excel-Finding_the_Nth_Occurrence_of_a_Character [文字のN番目の出現を検索]