Excel以外のソースからのファイルを操作する場合、Excelが正しく表示する方法を知らない文字がセルに表示されることがあります。たとえば、会社の会計ソフトウェアによって生成されたコンマ区切りのテキストファイルがあり、そのファイルをExcelにロードする場合があります。一部のセルでは、小さなボックスがあることに気付く場合があります。これらは非印刷文字を表します。 Excelは小さなボックスを表示するので、表示や印刷ができなくても、文字がそこにあることがわかります。

これらの文字を取り除くには、Excelの検索と置換機能を使用してみてください。次の手順を試してください:

。小さなボックスの1つを含むセル内で、ボックスを強調表示してCtrl + Cを押します。これにより、文字がクリップボードにコピーされます。

。 [編集]メニューから[置換]を選択するか、Ctrl + Hを押します。 Excelは、[検索と置換]ダイアログボックスの[置換]タブを表示します。 (図1を参照)

。 [検索する文字列]ボックスの挿入ポイントで、Ctrl + Vを押します。これにより、クリップボードの内容(問題のある文字)が[検索する文字列]ボックスに貼り付けられます。文字は、手順1で選択してコピーした小さなボックスのようには見えない可能性があります。

。手順3で何も貼り付けられていない場合は、ダイアログボックスを閉じて、手順を再試行してください。それでも何も貼り付けられていない場合は、検索と置換を使用して印刷されていない文字を削除することはできず、これらの残りの手順をスキップできます。

。文字だけを削除したい場合は、[置換]ボックスに何もないことを確認してください。文字をスペースに置き換える場合は、[置換]ボックスに1つのスペースを入力します。

。 [すべて置換]をクリックします。

このアプローチは、主にExcelと、手順1で問題のある文字を正確にコピーできるかどうかによって、機能する場合と機能しない場合があります。機能する場合は、不良文字を取り除くための貴重なテクニックを学びました。それが機能しない場合は、別のアプローチを試す必要があります。

試してみる1つのことは、「クリーンアップ」操作でWordを使用することです。データをExcelからWord文書にコピーして(通常のテキストとして貼り付け)、問題のある文字を置き換えます。その後、データをExcelに貼り付けることができます。一部の人々は、データを操作するためのこのラウンドトリップアプローチを使用することで、希望どおりの結果が得られると報告しています。

もちろん、マクロを使用して問題のある文字を取り除くこともできます。

印刷されない文字を単に削除するのではなく、スペースに置き換える独自のバージョンのCLEANワークシート関数を作成することはそれほど難しくありません。次のマクロの例を考えてみましょう。

Function ReplaceClean1(sText As String, Optional sSubText As String = " ")

Dim J As Integer     Dim vAddText

vAddText = Array(Chr(129), Chr(141), Chr(143), Chr(144), Chr(157))

For J = 1 To 31         sText = Replace(sText, Chr(J), sSubText)

Next     For J = 0 To UBound(vAddText)

sText = Replace(sText, vAddText(J), sSubText)

Next     ReplaceClean1 = sText End Function

この関数は、ワークシート内で次のように使用します。

=ReplaceClean1(B14)

この場合、セルB14のすべての非印刷文字はスペースに置き換えられます。文字を別のものに置き換えたい場合は、置き換えるテキストを指定するだけです。次の例では、印刷されない文字をダッシュ​​に置き換えています。

=ReplaceClean1(A1,"-")

次の使用法は、CLEAN関数と同じように、印刷されない文字を削除するだけです。

=ReplaceClean1(A1,"")

前に示したReplaceClean1マクロを振り返ると、Replace関数を使用していることがわかります。このVBA関数は、さまざまなバージョンのExcelで使用されるすべてのバージョンのVBAで使用できるわけではありません。マクロを試して、Replace関数を使用する行の1つでエラーが発生した場合は、代わりにこのバージョンのReplaceCleanマクロを使用してください。

Function ReplaceClean2(sText As String, Optional sSubText As String = " ")

Dim J As Integer     Dim vAddText     Dim aWF As WorksheetFunction     Set aWF = Application.WorksheetFunction

vAddText = Array(Chr(129), Chr(141), Chr(143), Chr(144), Chr(157))

For J = 1 To 31         sText = aWF.Substitute(sText, Chr(J), sSubText)

Next     For J = 0 To UBound(vAddText)

sText = aWF.Substitute(sText, vAddText(J), sSubText)

Next     ReplaceClean2 = sText     Set aWF = Nothing End Function

注:

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

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

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

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

link:/ excelribbon-Getting_Rid_of_Non-Printing_Characters_Intelligently [非印刷文字をインテリジェントに取り除く]