セル先頭のシングルクォーテーションが邪魔
セルの表示形式は初期状態は「標準」になっています。「標準」のセルに数字を入力すると、数値として解釈されます。例えば「0.0」と入力しても右寄せで「0」と表示されます。
Excel使い始めの方が嫌がるExcelのおせっかい機能とも言えます。
その対応方法としてよく使われる方法が、先頭にシングルクォーテーションを付けて「’0.0」と入力する方法です。こうすることでセルに「0.0」と表示されます。
ただ、このシングルクォーテーションで数値を数字とする入力方法は欠点があります。それは、セルの表示形式を「標準」から「数値」などに変更してもシングルクォーテーションがあるせいでそちらの方が有効になり、見た目は「文字列」のままで扱われてしまう点です。
なので、Excelの操作に慣れている人はセルの書式設定(Ctrl + 1キー、または、セルを右クリック+セルの書式設定)で、表示形式から「文字列」を選んで、入力した内容をそのまま表示することもあるでしょう。
このように、表示形式でセルの表示をきちんと設定したい人にとっては、セル先頭のシングルクォーテーションの入力が邪魔な場合が多々あります。
そこで以下ではセル先頭にシングルクォーテーションを設定されているセルの検索、および、シングルクォーテーションを一括削除する方法を紹介します。
先頭がシングルクォーテーションのセルに背景色を設定する
以下のコードはアクティブシートでシングルクォーテーションが先頭に設定されているセルが分かるようにします。
5行目のActiveSheet.UsedRangeはアクティブシートで入力されているセル範囲を意味します。
明示方法は背景色を黄色にしています。イミディエイトウィンドウにもセル座標を出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub SearchSingleQuote() Dim r As Range '// セル '// アクティブシートで入力されている範囲をループ For Each r In ActiveSheet.UsedRange '// 先頭がシングルクォーテーションの場合 If r.PrefixCharacter = "'" Then '// 座標をイミディエイトウィンドウに出力 Debug.Print r.Address(False, False) '// セルの背景色を黄色にする r.Interior.Color = vbYellow End If Next End Sub |
実行結果
A1セルとB3セルに「’0.0」と入力している場合の結果です。それぞれが黄色に設定され、イミディエイトウィンドウにもセル座標が出力されます。
選択範囲のセル先頭のシングルクォーテーションを一括削除する
以下のコードは選択セル範囲の中で、先頭文字がシングルクォーテーションの場合は削除します。
コメントにも書いていますが、RangeオブジェクトのValueプロパティを再設定するとシングルクォーテーションが削除されます。
これはどういうことかというと、セル先頭のシングルクォーテーションはValueプロパティには含まれておらず、例えば「’1.00」とシングルクォーテーション付きで入力していてもValueプロパティでは「1.00」として扱われているため、それをValueプロパティに再設定することでシングルクォーテーションが外れることになります。
先のコードで先頭がシングルクォーテーションかどうかの判定にPrefixCharacterプロパティを使っていましたので、これを編集すればシングルクォーテーションを削除できそうな気になりますが、残念ながらPrefixCharacterプロパティは参照しかできません。PrefixCharacterプロパティを””に更新してシングルクォーテーションを削除しようとしてもエラーになります。
なお、コード実行後はセルの表示形式に合わせて表示されます。表示形式が「標準」のままであれば「’0.0」は「0」が表示されますが、「数値」になっていれば表示形式の実体は「0_」のため、「’0.0」は「0△」(△は半角スペース)のようにの右に空白が付いて表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub DeleteBeginSingleQuote() Dim r As Range '// セル '// 選択セル範囲をループ For Each r In Selection '// 先頭がシングルクォーテーションの場合 If r.PrefixCharacter = "'" Then '// 座標をイミディエイトウィンドウに出力 Debug.Print r.Address(False, False) '// Valueを再設定するとシングルクォーテーションが削除される r.Value = r.Value End If Next End Sub |
実行結果
実行前(「’0.0」と入力)
実行後(「’0.0」が「0.0」として入力されて「0」として表示)