テキスト内からのパターンの抽出(Microsoft Excel)
トムは、テキストデータでいっぱいの約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以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
linkテキスト内からパターンを抽出する。