トムは、テキストデータでいっぱいの約20,000個のセルを含むワークシートを持っています。これらのセル内から、彼は特定のパターンのテキストを抽出する必要があります。パターンは###で、各#は数字です。このパターンは、各セルの設定された場所には表示されません。トムは、必要な情報を抽出する方法があるかどうか疑問に思います。

この問題に取り組むにはいくつかの方法があり、ニーズに合った正しい解決策は、作業しているデータの特性によって異なります。データ内でダッシュが表示されるのはパターン内のみであることがわかっている場合は、次のような式を使用してダッシュの存在をキーオフできます。

=MID(A1,FIND("-",A1)-2,8)

これによりダッシュが検出され、ダッシュの左側の2文字から始まる8文字が取得されます。テキストの他の場所にダッシュがある場合、または数字以外を含む「パターン」(12-34B32など)があり、それらを除外したい場合、これは明らかに機能しません。その場合、はるかに複雑な式が必要になります:

=IF(ISERROR(INT(MID(A1, FIND("-", A1, 1)-2, 2)) & INT(MID( A1, FIND("-", A1, 1)+1, 5))), "", MID(A1, FIND("-", A1)-2, 8))

これには、ダッシュの直前とダッシュの直後の文字に数字以外のものが含まれているかどうかを確認するエラーチェックコンポーネントが含まれます。もしそうなら、何も返されません。

これらの定型的なアプローチが実行しないことの1つは、同じセル内にパターンが複数出現する可能性がある状況を処理することです。その場合、マクロが最善のアプローチです。以下は、有効なパターンを抽出し、「結果」と呼ばれる新しいワークシートに配置します。

Sub ExtractPattern()

On Error Resume Next     Set SourceSheet = ActiveSheet     Set TargetSheet = ActiveWorkbook.Sheets("Results")

If Err = 0 Then         Worksheets("Results").Delete     End If     Worksheets.Add     ActiveSheet.Name = "Results"

Set TargetSheet = ActiveSheet     Cells(1, 1).Value = "Found Codes"

Cells(1, 1).Font.Bold = True     iTargetRow = 2

SourceSheet.Select     Selection.SpecialCells(xlCellTypeLastCell).Select     Range(Selection, Cells(1)).Select

For Each c In Selection.Cells         If c.Value Like "##-#####" Then             sRaw = c.Value             iPos = InStr(sRaw, "-")

Do While iPos > 0                 If iPos < 3 Then                     sRaw = "  " & sRaw                     iPos = iPos + 2                 End If                 sTemp = Mid(sRaw, iPos - 2, 8)

sRaw = Mid(sRaw, iPos + 6, Len(sRaw))

If sTemp Like "##-#####" Then                     TargetSheet.Cells(iTargetRow, 1) = sTemp                     iTargetRow = iTargetRow + 1                 Else                     sRaw = Mid(sTemp, 4, 5) & sRaw                 End If                 iPos = InStr(sRaw, "-")

Loop         End If     Next c End Sub

マクロは2か所でLike関数を使用することに注意してください。最初のインスタンスは、パターンがセル内のどこかにあるかどうかを判別し、2番目のインスタンスは、抽出された文字が目的のパターンと完全に一致するかどうかを判別するために使用されます。

注:

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

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

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