Lindaには、英字と数字を含む列があります。彼女は数字を保持し、アルファベットを削除する必要があります。たとえば、セルに10003E111が含まれていて、最終的に10003111になりたいとします。

この問題に取り組む方法はいくつかあります。ただし、解決策を進める前に、実際には壊れていないものを変更しようとしていないことを確認する必要があります。たとえば、数値に表示される「E」が数値の形式の一部ではないこと、つまりべき乗の指定ではないことを確認する必要があります。そうである場合は、基になる数値の性質が変更されるため、文字を削除する必要はありません。

文字が数値の形式の一部ではないと判断した場合は、最初に数式を使用して英字を削除してみてください。変更する値が列Aにある場合は、次の(非常に長い)数式を列Bに入力できます。

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

,0)+LEN(A1)+2-MATCH(TRUE,ISERROR(1*MID(A1,ROW (INDIRECT("1:"&LEN(A1))),1)),0))

Ctrl + Shift + Enterを押して、これを配列数式として入力してください。次に、列Cに次のように入力します。

=SUBSTITUTE(A1,B1,"")

その結果、列Cには、英字なしで列Aの値が含まれます。 [形式を選択して貼り付け]を使用して、情報を列Cから別の列にコピーし、数式の結果ではなく実際の値を取得することができます。

このアプローチは、単一のブックでの短期間の使用には最適ですが、この種のデータ処理をより頻繁に行う必要がある場合は、処理を行うためのユーザー定義関数を作成する必要があります。次に例を示します:

Function OnlyNums(sWord As String)

Dim sChar As String     Dim x As Integer     Dim sTemp As String

sTemp = ""

For x = 1 To Len(sWord)

sChar = Mid(sWord, x, 1)

If Asc(sChar) >= 48 And _           Asc(sChar) <= 57 Then             sTemp = sTemp & sChar         End If     Next     OnlyNums = Val(sTemp)

End Function

この関数は、ワークシートセル内から呼び出すことで使用します:

=OnlyNums(A1)

この関数は数値を返します。処理を行うためにさらに短いマクロを作成する場合は、次のことを考慮してください。

Function StripChar(aText As String)

Dim I As Integer

StripChar = ""

For I = 1 To Len(aText)

aChar = Mid(aText, I, 1)

Select Case aChar             Case "0" To "9"

StripChar = StripChar & aChar         End Select     Next End Function

この関数を使用するには、ワークシートで次のいずれかを使用します。

=STRIPCHAR(A1)

=VALUE(STRIPCHAR(A1))

1つ目は数字で構成されるテキスト文字列を返し、2つ目はその文字列の数値バージョンを返します。

注:

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

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

このヒント(3840)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。