ビルは、会社のために情報を処理できるように、情報をワークシートにインポートしなければならないことがよくあります。ビルの状況では、彼が行う必要のある最初のステップの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以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。