えくせるちゅんちゅん

ことりがエクセルをちゅんちゅんするブログ

Excelから游ゴシック体を徹底的に駆逐する Part2

以前、游ゴシック体を駆逐する方法を紹介しましたが、あの面倒な設定全てをvbsで自動化することに成功したので紹介します。

f:id:Kotori-ChunChun:20190526010015p:plain


はじめに

游ゴシック体反対派の皆さん、お久しぶりです。

今回は、以前紹介した「Excelから游ゴシック体を徹底的に駆逐する方法」の第二回目になります。


手作業で安全に游ゴシック体を消したい方は下記の記事を御覧ください。

www.excel-chunchun.com

この記事は意外と検索からの流入もが多く、比較的人気記事となっております。


やっぱりみんな「游ゴシック体」嫌いなんですかね?

このスクリプトを使えば全社導入も容易です!

思い切って会社全体の游ゴシック体を駆逐しましょう!(笑)


前回の記事で記載したとおり、Excelから游ゴシック体を完全に消し去るには設定項目が沢山あり、新しい環境を作る度に設定するのが結構面倒です。

そんな私が、ワンタッチで游ゴシック体を駆逐できるステキなスクリプトをついに完成させました!

もちろん、ワンタッチで元に戻す事もできますのでご安心ください。


変更内容

Part1からの変更内容は以下のとおりです。


スクリプトの実行頻度を増加

以前の記事に書いたスクリプトでは、/onlogonつまり、PCの電源を入れる度に忌々しいアップデートからリカバリーしてくれています。

ところが、当然といえば当然、アップデートは電源を入っているときに行われるため、たまに游ゴシック体で立ち上がるときがあります。

仕方ないので游ゴシック体が出現した時は、泣く泣くExcelを閉じてスクリプトを直接実行・・・しているのですが、それはそれで面倒です。

まずはそれを改善したい。

というわけで・・・1分毎に更新するようにしてみました。

タスクの実行のタイミングを1分毎に設定する時は、/sc minute /mo 1と書くようです。

schtasks /create /tn "MyTask" /tr "hogehoge.vbs" /sc minute /mo 1


インストール/アンインストールの簡素化

そもそも游ゴシック体を駆逐するには、初期設定として多数の設定変更が必要で、新しい環境に組み込むのが面倒です。

できれば全ての設定をワンクリックで行いたい。

さらに実行頻度を上げたことで、游ゴシック体の取り消しが困難になったので、アンインストールもしたい。

というわけで、インストール/アンインストール用のvbsを書いてみました。(コード全文は後ほど)


アンインストール処理のイメージは、ざっとこんなところです。

  • タスクスケジューラからの削除
wsh.exec "schtasks /delete /tn """ & APP_NAME & """ /F"
wsh.RegDelete "HKCR\.xls\ShellNew\FileName"
  • データファイルの削除
  • テンプレートファイルの削除
  • 新規作成ファイルの削除
fso.DeleteFile "C:\Program Files\Microsoft Office\root\VFS\Windows\SHELLNEW\EXCEL12.XLSX"


一瞬コマンドプロンプトが表示されるのを解消

Windowsには、vbsを実行するためのプログラムが2種類組み込まれています。

cscript wscript
利用想定環境 コンソール向け 対話向け
メッセージボックス 無視 ユーザーの応答待ち
コマンドプロンプト 一瞬表示される 表示されない

なぜか前記事のスクリプトcscriptを使っていたため、wscriptに変更しました。


ちなみに、vbsをダブルクリック実行したときに黒い画面が見える場合は、vbsの関連付けがcscriptになっていることを示しています。

コマンドプロンプトで、cscript //h:wscriptと実行すれば関連付けが切り替わるそうです。


しかしwscriptに変更することで一つだけ問題があります。

上記の表の通りメッセージボックスの挙動が変わるらしいのです。

スクリプトの末尾には以下のようなコードが有りました。

MsgBox "完了",, "Excel フォント自動変更"

従って、以前のコードでは無視されていたのですが、このメッセージが表示されてしまうようになりました。

実行頻度を1分毎に変えたため、このままでは以下のメッセージボックスが1分ごとに出てきます。笑えませんね。

---------------------------
Excel フォント自動変更
---------------------------
完了
---------------------------
OK   
---------------------------

というわけで、Excel_FontChange.vbsの実行時パラメータに/hideを追加して、

  • ダブルクリック時は「完了」を表示
  • タスクスケジューラからの起動時は何も表示しない

という動きになるように調整しました。

wsh.exec "schtasks /create /tn " & APP_NAME & " /tr ""wscript \""" & VBS_PATH & "\"" \""/hide\"""" /sc minute /mo 1 /rl highest /F"

このダブルクォーテーションの数の調整にとても苦労しました。

コマンドプロンプトで通常のexeを1分毎に管理者として実行するタスクを登録する時はこうです。

schtasks /create /tn タスク名 /tr hoge.exe /sc minute /mo 1 /rl highest /F

しかし実行ファイルのパスに半角スペースが含まれる場合は、ダブルクォーテーションで囲う必要があり"文字列"`とします。

schtasks /create /tn タスク名 /tr "C:\Program Files\fuga\hoge.exe" /sc minute /mo 1 /rl highest /F

登録したexeに実行時パラメータ/hideを渡す場合は`"実行プログラム(半角スペース)パラメータ"とします。

schtasks /create /tn タスク名 /tr "C:\Program Files\fuga\hoge.exe /hide" /sc minute /mo 1 /rl highest /F

ところが、実行時パラメータにパスを渡すとなると、そこに半角スペースを含んでいる事があるため、ココでさらにダブルクォーテーションで囲う措置が必要になります。

しかし、この場合はエスケープする必要があるそうで、\"文字列\"とするそうです。

/hideのように半角スペースを含まないのであれば下記のように空欄でもOKです。

schtasks /create /tn タスク名 /tr "C:\Program Files\fuga\hoge.exe \"C:\Program Files\hoge\fuga.vbs\" /hide" /sc minute /mo 1 /rl highest /F

ここまでコマンドプロンプト(bat)の場合でしたが、vbsにするとschtasksが実行プログラムになるので、更に全体をダブルクォーテーションで囲わなければなりません。

vbsにおけるエスケープ文字はダブルクォーテーションは""(ダブルクォーテーション2つ)なので、そのように修正するとこうなります。

wsh.exec "schtasks /create /tn タスク名 /tr ""C:\Program Files\fuga\hoge.exe \"C:\Program Files\hoge\fuga.vbs\" /hide"" /sc minute /mo 1 /rl highest /F"

こうして、最初に記載したようなコードが生まれました。


スクリプト

管理者権限に昇格

スクリプトを管理者権限で実行されるように、自分自身を昇格して再実行させるためのスクリプトです。

タスクスケジューラに登録した時点で、管理者権限で実行するように登録するため本来は必要ないのですが、vbsをダブルクリックして直接起動したいときがあるので、基本的にvbsには入れるようにしています。

プロシージャCheckAdmin()に押し込んでいるのは、一見無意味に見えますが、変数のスコープを制限して、後々のスクリプトと競合を起こさないための工夫になります。

vbsについて深く勉強したことがないため、これが一般的な手法なのかどうかは知りません。


インストールされたExcelのパスの確認

EXCEL.EXEが所定の場所にあるかどうかで、インストールされているExcelが32bit版か64bit版かを判定し、テンプレートフォルダなどが変化します。

今後のアップデートなどでパスが変わると、下記の2箇所を変更しないといけないかもしれません。

本ツールのインストール先は、OSのビット数やOfficeのバージョンに関係なくC:\Program Files\Excel_FontChange\固定です。

例えば2016から増えているUWP版には対応していません。


Excel_FontChange.vbsの本体

タスクスケジューラから呼ばれるスクリプトに関しては、次のように改変しました。

  • 管理者権限に昇格
  • インストールされたExcelのパスの確認
  • "EXCEL8.XLS", "EXCEL12.XLSM", "EXCEL12.XLSX"の更新


Excel_FontChange_Install.vbsの本体

自動インストールを行うスクリプトに関しては、次のような構成です。

  • 管理者権限に昇格

  • インストールされたExcelのパスの確認

  • インストール/アンインストールを選択

  • インストールの場合

    • Excelのオプションのフォント変更

    vb wsh.RegWrite "HKCU\Software\Microsoft\Office\16.0\Excel\Options\Font", "MS Pゴシック,11", "REG_SZ"

    • テンプレート/新規作成のファイル事前準備

    vb fso.CopyFolder gScriptPath & APP_NAME, Left(APP_PATH, Len(APP_PATH) - 1), True

    • 1分おきに実行するタスクスケジューラ登録

    vb wsh.exec "schtasks /create /tn " & APP_NAME & " /tr ""wscript \""" & VBS_PATH & "\"" \""/hide\"""" /sc minute /mo 1 /rl highest /F"

    • 直ちにフォント書き換えを実行

    vb wsh.exec "schtasks /run /tn " & APP_NAME & ""

    • xlsxの新規作成のテンプレート(EXCEL12.XLSX)をバックアップ

    vb fso.CopyFile PATH_NEW & "EXCEL12.XLSX", PATH_NEW & "EXCEL12_base.XLSX"

    vb wsh.RegWrite "HKCR\.xls\ShellNew\FileName", PATH_NEW & "EXCEL8.XLS", "REG_SZ"

  • アンインストールの場合

    • タスクスケジューラからの削除

    vb wsh.exec "schtasks /delete /tn """ & APP_NAME & """ /F"

    vb wsh.RegDelete "HKCR\.xls\ShellNew\FileName"

    • データファイルの削除
    • テンプレートファイルの削除
    • 新規作成ファイルの削除

    vb fso.DeleteFile "C:\Program Files\Microsoft Office\root\VFS\Windows\SHELLNEW\EXCEL12.XLSX"


微妙に苦労したのが、新規作成に*.xlsを追加する方法で、従来(Excel 2007,2010)の頃は"HKCR.xls\ShellNew\FileName"に追加するだけで良かったのですが、Excel 2016やOffice365ではココに書き込んだだけでは増えません。

試行錯誤した結果、"HKCU\Software\Classes\xls_auto_file"にファイルの種類を書き込むことで、新規作成が有効になることがわかりました。

ちなみにこの部分が新規作成メニューの名称になっているようです。

きっと空欄だとメニュー表示出来ないってことなんでしょうね。

wsh.RegWrite "HKCR\.xls\ShellNew\FileName", PATH_NEW & "EXCEL8.XLS", "REG_SZ"

Rem [ファイルの種類]の定義。ココが空欄だとShellNewに登録してもメニューに増えない。
wsh.RegWrite "HKCU\Software\Classes\xls_auto_file", "Microsoft Excel 97-2003 互換ブック", "REG_SZ"
Rem 既定値は\で終了
wsh.RegWrite "HKCR\xls_auto_file\", "Microsoft Excel 97-2003 互換ブック", "REG_SZ"


完成品データ一式ダウンロード

ダウンロード

游ゴシック体を駆逐するためのスクリプト・テンプレート一式を詰め込んだZIPを、GitHubにて公開しました。

GitHubダウンロード

GitHubリポジトリを閲覧


注意

Officeのインストール方法によっては動作しません。

昨今はWindows10にUWP版がプリインストールされていることが多いので、知らずにUWP版を使っている人が増えていますが、UWP版では制約があり動作しません。

問題が起きた人はMicrosoftのOffice削除ツールなどで完全消去してから、公式のオンラインダウンロードにてデスクトップ版アプリを入れ直すようにすることを推奨します。

情シスの方はデスクトップアプリ版に入れ替えてから出荷してあげると良いかと思います。


まとめ

とりあえず、これでシツコイ游ゴシック体から、Excelを守る術を手に入れました!

もっともっとExcelを快適に使えるようにしていきましょう♪

以上


2019/7/21 続編を執筆しました。

www.excel-chunchun.com



何か御座いましたらコメント欄、またはTwitterからどうぞ♪

それではまた来週♪ ちゅんちゅん(・8・)