列Aに多数の製品コードを含むワークシートがあるとします。

これらのコードの形式はA4、B12、AD4などです。会社の運営方法が変更されたため、すべての製品コードを変更して、文字と数字の間にダッシュを含めるように指示されます。

このタスクを実行する方法はいくつかあります。製品コードの構造に一貫性がある場合は、ダッシュを挿入するのは簡単です。

たとえば、常に1文字の後に数字が続く場合は、次のような式を使用できます。

=LEFT(A1,1) & "-" & RIGHT(A1,LEN(A1)-1)

データが構造化されない可能性があります。つまり、1文字または2文字の後に、最大3桁の数字を続けることができます。したがって、A4とQD284の両方が有効な製品コードになります。この場合、ソリューションの公式にはもう少し創造性が必要です。

これを処理する1つの方法は、配列数式を使用することです。次の式を考えてみましょう:

=REPLACE(A1,MATCH(FALSE,ISERROR(1*MID(A1,ROW(INDIRECT("1:100")),1)),0),0,"-")

値がA1〜A10の場合、この数式をB1に入力して、列にコピーできます。これは配列数式であるため、Ctrl + Shift + Enterを押して入力する必要があります。数式はセル内の最初の数値の位置を見つけ、その前にダッシュを挿入します。

例として、セルA1にBR27が含まれていると仮定します。数式の最も内側の部分であるINDIRECT( “1:100″)は、テキスト1:100を範囲に変換します。これは、行の挿入または削除が数式に影響を与えないようにするために使用されます。式の次の部分であるROW(INDIRECT( “1:100″))は、基本的に値1〜100の配列を作成します:1,2,3、…​、99,100。これは、セル内の各文字に作用するために使用されます。

次の部分、MID(A1、ROW(INDIRECT( “1:100″))、1)は、文字列内の個々の文字を参照します。これにより、配列は「B」、「R」、「2」、および「7」になります。配列に1を掛ける(式の次の部分)

その結果、個々の文字がそれぞれ数値に変換されます。文字が数字でない場合、この変換によりエラーが発生します。変換される文字列(BR27)の場合、結果は次のようになります:#VALUE、#VALUE、2、および7。

次のステップは、乗算の結果にISERROR関数を適用することです。これにより、エラーがTRUEに変換され、非エラーがFALSEに変換されて、TRUE、TRUE、FALSE、およびFALSEが生成されます。 MATCH関数は、TRUE値とFALSE値の配列を調べて、FALSEが完全に一致するかどうかを調べます。この例では、最初のFALSE値が配列の3番目の位置にあるため、MATCH関数は数値3を返します。この時点で、基本的にセル内の最初の番号の位置がわかります。

最後の関数はREPLACEです。これは、3番目の文字から始まるダッシュをソース文字列に実際に挿入するために使用されます。

お分かりのように、変換を実行する式は、解読するのが少し難しい場合があります。そのような傾向がある人にとっては、ユーザー定義関数を作成する方が簡単かもしれません。次のマクロは、適切な場所にダッシュが付いた文字列を返すマクロの例です。

Function DashIn(myText As String)

Dim i As Integer     Dim myCharCode As Integer     Dim myLength As Integer

Application.Volatile     myLength = Len(myText)

For i = 1 To myLength         myCharCode = Asc(Mid(myText, i, 1))

If myCharCode >= 48 And myCharCode <= 57 Then             Exit For         End If     Next i     If i = 1 Or i > myLength Then         DashIn = myText     Else         DashIn = Left(myText, i - 1) & "-" _           & Mid(myText, i, myLength - 1)

End If End Function

マクロは元の文字列の各文字を調べ、最初の数字が見つかると、そのポイントにダッシュを挿入します。この関数は次のように使用します:

=DashIn(A1)

注:

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

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

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