句読点漏れのチェック
Excelで文章を書いていると句読点が抜けていることがあります。また、IMEの設定や変換の影響により「。」が「.」になったり、「、」が「,」になっていたりすることがあります。
これはIMEの設定を変えれば防ぐことは出来るのですが、普段使っていないPCで作業したりすると、そこまで気が回らないためこういうことが起こります。
自分だけしか見ない資料であれば別に気にする必要はありませんが、そうでない場合に句読点の漏れチェックが必要になることがあります。
そこで以下ではセルに入力した文章の末尾に句読点がない箇所を明示するマクロを紹介します。
IMEの設定
ちなみにIMEでの句読点の設定方法ですが、タスクバーの「あ」または「A」を右クリックして「プロパティ」があるか確認します。
無い場合は、タスクバー右クリック→「設定」→「全般」→以前のバージョンのMicrosoft IMEを使う、をオンにすると、タスクバーの「あ」「A」右クリックで「プロパティ」が出るようになります。
あとは、下の絵の通りですが、「プロパティ」→「Microsoft IME の設定」ダイアログの下の方にある「詳細設定」ボタン→「Microsoft IMEの詳細設定」の全般タブの句読点で選択します。
タスクバーを右クリックして「プロパティ」を選択します。
Microsoft IMEの設定の詳細設定ボタンを押します。
Microsoft IMEの詳細設定の全般タブの句読点の設定を行います。
句読点が無いセルの検索を行うコード
以下のコードはアクティブシートに記述されている文章のうちで、末尾が句読点で終わっていない箇所を検出します。
ここでは背景色を黄色にしてイミディエイトウィンドウにセル座標を出力するようにしています。数式のセルは句読点とは関係がないので除外しています。
処理の途中で「GoTo CONTINUE」の部分があります。これは条件に一致した場合は以降の処理を行わないようにしています。この関数では句読点がないセルであるかどうかの判定が3種類あります。「セルが未入力か?」「数式か?」「句読点入力済みか?」の3つです。
素直にIf文で書くとネスト(If文の深さ)が3段階深くなります。GoTo文でループの最後に処理を飛ばすことでネストが深くならずに済むようにしています。
このGoToの書き方の詳細については「VBAでループのcontinueを疑似的に行う方法」をご参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub FindPunctuation() Dim ws As Worksheet '// ワークシート Dim r As Range '// セル Dim s As String '// 末尾文字 Set ws = ActiveSheet '// アクティブシートの入力セル範囲のセルを1つずつループ For Each r In ws.UsedRange '// セルに未入力の場合(空白は除去して判定) If Trim(r.Value) = "" Then '// 次のセルの処理を行う GoTo CONTINUE End If '// 数式の場合 If r.HasFormula = True Then '// 次のセルの処理を行う GoTo CONTINUE End If '// 以降はセルに入力されている場合 '// 末尾文字を取得 s = Right(r.Value, 1) '// 末尾が句読点の場合 If (s = "。") Or (s = "、") Then '// 次のセルの処理を行う GoTo CONTINUE End If '// 以降は末尾が句読点 '// セル座標を出力 Debug.Print r.Address(False, False) '// セルの背景色を黄色に設定 r.Interior.Color = vbYellow CONTINUE: Next End Sub |
使い方
句読点の漏れがないかチェックしたいシートを表示して上のマクロを実行します。
句読点がないセルの背景色に黄色が設定され、VBAのイミディエイトウィンドウにセル座標が出力されます。
以下ではB4、B11セルの末尾に句読点がないため黄色の背景色を設定しています。