Tonyは、数字やその他の文字で構成されるワークシートに大量のデータを持っています。たとえば、「1234567Blue」を含むセルがあるとします。 Tonyは、最初の数字以外の文字が出現する文字位置を把握できるようにしたいと考えています。 「1234567Blue」というテキストの例では、Tonyは、最初の数字以外の文字が8番目の位置にあることを理解する方法を望んでいます。

必要な値を取得するには、主に2つの方法があります。 1つ目は、配列数式を使用して位置を計算することです。次の配列数式(Ctrl + Shift + Enterを使用して入力)は、ほとんどの場合に機能します。

=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)

この配列数式が機能しない唯一の例は、セルA1が空であるか、厳密に数値が含まれている場合です。リストにこのタイプのデータが含まれている(またはデータがまったく含まれていない)場合は、少し長い配列数式の使用を検討する必要があります。

=IF(LEN(A1)=0,0,MIN(IF(1ISNUMBER(1MID(A1,ROW(INDIRECT("A1:A"& LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))* (ISNUMBER(A1)=FALSE)

これは、Ctrl + Shift + Enterを使用して入力された単一の配列数式であることを忘れないでください。 A1に数字以外の文字が含まれていない場合(空白のセルや「123」などの値など)を適切に処理します。

目的の位置を返す必要がある別の可能な配列式は次のとおりです。これは空のセルと厳密に数値を問題なく処理する必要がありますが、前に示した配列数式よりも短くなります:

=IFERROR(MATCH(1,ISERR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)1)1,),)

もちろん、最初の数字以外の文字の位置を見つけることを処理できるもう1つの方法は、ユーザー定義関数を作成することです。このようなマクロを実装するには、さまざまな方法があります。マクロを実装する最も簡単な方法の1つは、マクロに渡されるすべての文字をステップスルーすることです。数字のASCIIコード範囲(48〜57)の外にある文字が見つかった場合、最初の位置が見つかったことがわかります。次のマクロは、このタイプの手法を実行する方法を示しています。

Function FirstNonDigit(str As String)

Dim iChar As Integer     Dim iPos As Integer     Dim J As Integer

Application.Volatile     iPos = 0     For J = 1 To Len(str)

iChar = Asc(Mid(str, J, 1))

If iChar <= 47 Or iChar >= 58 Then             iPos = J             Exit For         End If     Next J     FirstNonDigit = iPos End Function

この関数を使用するには、ワークシートで次のような式を使用するだけです。

=FirstNonDigit(A1)

参照するセルが空の場合、または数字のみが含まれている場合、関数は0の値を返します。

注:

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

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

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