8ビットASCII文字を取り除く(Microsoft Excel)
ビルは、会社のために情報を処理できるように、情報をワークシートにインポートしなければならないことがよくあります。ビルの状況では、彼が行う必要のある最初のステップの1つは、インポートされたデータに含まれている可能性のあるすべての8ビットASCII文字を削除することです。これらの文字を何かに置き換える必要はありません。 7ビットのASCII文字だけが残るように削除する必要があります。ビルは、おそらく何らかのタイプのマクロを使用して、これを行う簡単な方法があるかどうか疑問に思います。
開始するデータの特性に応じて、この問題に取り組む方法はいくつかあります。ワークシートに8ビット文字しかない場合、文字に使用できる文字コードは0〜255のみです。データを7ビット文字のみに制限する場合は、必要なものだけを意味します。 0〜127の文字コード範囲内。したがって、マクロを使用して、128〜255の範囲内の任意の文字を簡単に検索し、それらを削除することができます。このマクロはこのアプローチを取ります:
Sub Remove8Bit1() Cells.Select For i = 128 To 255 X = Chr(i) Selection.Replace What:=X, Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next End Sub
このアプローチでは、ワークシート内で8ビット範囲の値のみが検索されます。数式によって実際に作成される8ビットの範囲にあるものには触れません。 (ほとんどの場合、問題にはならないはずです。問題がある場合、適切な修正は、問題のある結果を作成する数式を変更することです。)
データにUnicode文字が含まれている場合は、別のアプローチを使用することをお勧めします。技術的には、Unicode文字は8ビット文字ではありません。これらは16ビット文字であり、0〜65,535の範囲の文字コード値を持つことができます。値が127を超えるものはすべて無視するため、前述の検索ベースのアプローチを使用すると扱いにくくなります。最終的には、128回ではなく65,000回を超える検索が実行されます。
より良いアプローチは、選択したすべてのセルのすべての文字を単純に調べ、127を超える文字コードがある場合は無視することです。
これは、次のマクロで採用されているアプローチです。
Sub Remove8Bit2() Dim rngCell As Range Dim intChar As Integer Dim strCheckString As String Dim strCheckChar As String Dim intCheckChar As Integer Dim strClean As String For Each rngCell In Selection strCheckString = rngCell.Value strClean = "" For intChar = 1 To Len(strCheckString) strCheckChar = Mid(strCheckString, intChar, 1) intCheckChar = Ascw(strCheckChar) If intCheckChar < 128 Then strClean = strClean & strCheckChar End If Next intChar rngCell.Value = strClean Next rngCell End Sub
マクロは、Unicode値を調べるために、従来のAsc関数の代わりにAscw関数を使用することに注意してください。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(3142)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
link8ビットASCII文字の削除。