💭

VBA エディターのフォントと配色設定をインポート&エクスポートする

に公開

はじめに

VBA で使用するコードエディター(以下 VBE)は、初期設定では白背景に黒文字の、いわゆるライトモード表示です。

近年多くの開発環境で採用されているダークモードは、残念ながら VBE には標準で実装されていません
そのため、ダークモードのような目に優しい表示にするには、ユーザーが設定画面から手動で背景色や文字色を一つずつ変更する必要があります。

しかし、VBE の設定項目は意外と多く、手動での設定は手間がかかります。
さらに、PC を買い替えたり、別の環境で作業したりする際に、これらの設定を簡単に移行できないという課題もあります。

そこでこの記事では、VBE の配色やフォント設定をテキストファイルとして管理し、PowerShell スクリプトを使って簡単に設定を保存(エクスポート)したり、別の環境に適用(インポート)したりする方法を紹介します。

なお、本記事は VBA 7.1 を対象として解説します。

記事の進め方

この記事では、PowerShell スクリプトを使って Windows のレジストリ (HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common) を編集し、VBE のフォントや配色設定を一括で変更する方法を解説します。

すぐに設定用スクリプトを使いたい方へ
具体的な PowerShell スクリプトは「PowerShell スクリプトの作成」セクションに記載しています。

レジストリ編集について
レジストリは Windows の重要な設定情報を含んでいます。
意図しない変更はシステムやアプリケーションの動作に影響を与える可能性があるため、どのキーが VBE のどの設定に対応しているのかを理解した上で編集することが望ましいです。

そのため、この記事では少し丁寧になりますが、以下のステップで解説を進めます。

  1. VBE の設定を手動で変更する手順の確認
  2. 設定変更によってレジストリの値がどのように変わるかの確認
  3. 編集対象となるレジストリキーの特定
  4. 設定を適用・保存するための PowerShell スクリプトの作成

レジストリを変更する処理ですので、あくまで自己責任で実行するようお願いいたします。

検証環境

  • Windows 11 64 bit
  • Excel (Microsoft Office Home and Business 2019, Ver. 2503, Build 18623.20178)
  • VBA (Ver. 7.1, Build 7.1.1146, Forms3 16.0.18623.20076)

フォント配色の設定方法(手動)

PowerShell で設定を変更する前に、まずは手動での設定方法を確認します。

VBE を開き、ツール>オプションをクリックします。

次に、表示されたオプション画面で エディターの設定 タブをクリックします。

設定画面へのアクセス方法

エディター設定画面

この画面では、「コードの表示色」リストにある複数のコード要素(文字種)に対して、前景色・背景色を設定できます。
また、「フォント」と「サイズ」も同じ画面で指定可能です。

重要
VBE のこれらの設定を一度も変更したことがない場合、対応するレジストリキーが存在しないことがあります。
後の手順でレジストリを確認・編集できるようにするために、ここで少なくとも1つの色(例: コメントの色)やフォントの種類・サイズを変更しておきましょう。

VBE 設定が保存されているレジストリ

先ほど手動で変更したフォントや色の設定が、Windows のどこに保存されているか確認しましょう。
これらの設定はレジストリに格納されています。

まず、レジストリエディターを開きます。PowerShell で以下のコマンドを実行するか、「ファイル名を指定して実行」(Windowsキー + R) で regedit と入力して Enter キーを押します。

PowerShell
start regedit

レジストリエディターが起動したら、左側のツリービューで以下のパスまで移動します。

HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common

この Common キーを選択すると、右側のペインに VBE に関連する様々な設定値(名前、種類、データ)が表示されているはずです(前の手順で設定を変更していないと、一部の値が存在しない場合があります)。

VBEレジストリの詳細

フォント/配色設定を示すキー

HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common の中から、VBE のフォントと配色に関連する主要なキーは以下の通りです。

CodeForeColors = 7 0 5 0 1 9 11 1 0 0 0 0 0 0 0 0 
CodeBackColors = 4 0 4 7 6 4 4 4 0 0 0 0 0 0 0 0 
FontFace       = Ricty ShinDiminished Regular
FontHeight     = 13
FontCharSet    = 128

配色の仕組み

CodeForeColorsCodeBackColors は、スペース区切りの数値(1から16、または 0=自動)の文字列で色を指定します。
RGB 値を直接指定するのではなく、事前に定義された 16 色のカラーパレットから番号で選択する方式です。

数値配列のインデックス(0から始まる位置)が、VBE のオプション画面「エディターの設定」タブにある「コードの表示色」リストのどの項目に対応するかを示しています。
以下の表は、各インデックスと UI 表示名の対応関係、および上記「例」の値の場合のカラーパターン番号と対応する色を示したものです。

注記: 以下のインデックスと表示名の対応関係は、レジストリ値と VBE の UI を比較して推定したものです。

レジストリ
インデックス
表示名(UI) 例:
CodeForeColors
例:
CodeBackColors
例での前景色 例での背景色
0 標準コード 7 4 黄色 黒色
1 選択された文字 0 0 自動 自動
2 構文エラーの文字 5 4 赤色 黒色
3 次のステートメント 0 7 自動 黄色
4 ブレークポイント 1 6 白色 赤色
5 コメント 9 4 緑色 黒色
6 キーワード 11 4 水色 黒色
7 識別子 1 4 白色 黒色
8 ブックマーク 0 0 自動 自動
9 呼び出し元 0 0 自動 自動
(10-15) (予約/未使用?) 0 0 自動 自動

各カラーパターン番号(1-16)が具体的にどの RGB 値に対応するかは、VBE7.DLL 内で定義されているようです。
これらの基本色を変更したい場合は、サードパーティ製のツール VBEThemeColorEditor を利用する方法があります。

https://github.com/gallaux/VBEThemeColorEditor

フォントの仕組み

FontFace
使用するフォント名を指定します。
誤った値(存在しないフォント名)を指定した場合、意図しないフォントが割り当てられます。

FontHeight
フォントサイズをポイント単位で指定します。

FontCharSet
フォントの文字セットを指定します。
日本語環境で日本語文字を正しく表示するためには、SHIFTJIS を示す 128 を指定するのが一般的です。

https://learn.microsoft.com/ja-jp/windows/win32/lwef/fontcharset-property

PowerShell スクリプトの作成

VBE の設定を PowerShell で変更するためのスクリプトを作成します。
ここでは、設定を適用するスクリプトと、現在の設定をファイルに保存するスクリプトの2つを紹介します。

指定したフォント&配色設定を VBE に適用する(インポート)

まず、定義したフォントと配色の設定を VBE に一括で適用するスクリプトです。

準備

以下の2つのファイル (VbeThemeSettings.txtVbeThemeApply.ps1) を、PC 上の同じフォルダに作成します。

  • 設定ファイル: VbeThemeApply.txt
  • 適用スクリプト: VbeThemeApply.ps1

VbeThemeApply.txt ファイルを開き、適用したい VBE の設定を以下の形式で記述します。
下記はダークモード風の設定例です。

VbeThemeApply.txt
CodeForeColors = 7 0 5 0 1 9 11 1 0 0 0 0 0 0 0 0 
CodeBackColors = 4 0 4 7 6 4 4 4 0 0 0 0 0 0 0 0 
FontFace       = Ricty ShinDiminished Regular
FontHeight     = 13
FontCharSet    = 128

次に、以下の内容で VbeThemeApply.ps1 ファイルを作成します。

VbeThemeApply.ps1
# VbeThemeApply.ps1
# テーマ適用 + 変更前バックアップ

$regBase = "HKCU\Software\Microsoft\VBA\7.1\Common"
$regPathPS = "HKCU:\Software\Microsoft\VBA\7.1\Common"
$themeFile = ".\VbeThemeApply.txt"
$backupFile = ".\VbeThemeBackup.reg"

# ▼ 1. レジストリバックアップ
reg export "$regBase" "$backupFile" /y
Write-Host "レジストリバックアップを作成しました: $backupFile" -ForegroundColor Green

# ▼ 2. テーマファイルの読み込み
if (-Not (Test-Path $themeFile)) {
    Write-Host "テーマファイルが見つかりません: $themeFile" -ForegroundColor Red
    exit
}

$theme = Get-Content $themeFile | Where-Object { $_ -match "=" } |
    ForEach-Object {
        $parts = $_ -split "=", 2
        @{ Name = $parts[0].Trim(); Value = $parts[1].Trim() }
    }

# ▼ 3. 書き込み処理
foreach ($item in $theme) {
    switch ($item.Name) {
        "CodeForeColors" {
            Set-ItemProperty -Path $regPathPS -Name "CodeForeColors" -Value $item.Value -Type String
        }
        "CodeBackColors" {
            Set-ItemProperty -Path $regPathPS -Name "CodeBackColors" -Value $item.Value -Type String
        }
        "FontFace" {
            Set-ItemProperty -Path $regPathPS -Name "FontFace" -Value $item.Value -Type String
        }
        "FontHeight" {
            Set-ItemProperty -Path $regPathPS -Name "FontHeight" -Value ([int]$item.Value) -Type DWord
        }
        "FontCharSet" {
            Set-ItemProperty -Path $regPathPS -Name "FontCharSet" -Value ([int]$item.Value) -Type DWord
        }
    }
}

Write-Host "テーマを適用しました!VBEを再起動して反映してください" -ForegroundColor Cyan

実行

PowerShell を開き、cd コマンドで上記ファイルを保存したフォルダに移動し、スクリプトを起動します。

PowerShell
./VbeThemeApply.ps1

実行時の動作

まず現在のレジストリ設定 (HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common) のバックアップを、スクリプトと同じフォルダに VbeRegistryBackup.reg という名前で作成します。

その後、VbeThemeSettings.txt の内容に従ってレジストリ値を書き換えます。

設定の復元

もし設定を元に戻したくなった場合は、作成されたバックアップファイル (VbeRegistryBackup.reg) をダブルクリックしてください。

現在の VBE 設定をファイルに保存する (エクスポート)

前の手順で適用した設定や、その後 VBE 上で手動で調整した配色・フォント設定を、他の PC で再利用したり、バックアップとして保存しておきたい場合があるでしょう。

このスクリプトは、現在の VBE 設定(フォントと配色に関するキー)をレジストリから読み取り、適用スクリプト (VbeThemeApply.ps1) が読み込める形式のテキストファイル (.txt) として保存します。

準備

以下の内容で VbeThemeBackup.ps1 ファイルを、適用スクリプトと同じフォルダに作成します。

VbeThemeBackup.ps1
$regPath = "HKCU:\Software\Microsoft\VBA\7.1\Common"
$scriptDir = Get-Location
$savePath = Join-Path $scriptDir "VbeThemeBackup.txt"

try {
    $reg = Get-ItemProperty -Path $regPath

    @"
CodeForeColors = $($reg.CodeForeColors)
CodeBackColors = $($reg.CodeBackColors)
FontFace       = $($reg.FontFace)
FontHeight     = $($reg.FontHeight)
FontCharSet    = $($reg.FontCharSet)
"@ | Out-File -FilePath $savePath -Encoding UTF8

    Write-Host "テーマ設定を保存しました" -ForegroundColor Green
    Write-Host "保存場所:" $savePath
}
catch {
    Write-Host "レジストリの読み取りに失敗しました" -ForegroundColor Red
}

実行

PowerShell を開き、cd コマンドで上記ファイルを保存したフォルダに移動し、スクリプトを起動します。

PowerShell
./VbeThemeBackup.ps1

実行時の動作

スクリプトを実行したフォルダに VbeThemeBackup.txtが作成されます。
このファイルには、現在の VBE の CodeForeColors, CodeBackColors, FontFace, FontHeight, FontCharSet の値が 名前 = 値 の形式で書き込まれます。

このファイルは、そのまま VbeThemeApply.ps1 スクリプトが読み込む設定ファイル (例: VbeThemeApply.txt にリネームするなどして) として利用できます。

参考サイト

VBEThemeColorEditor を用いたカラーパターンを変える方法が解説されています。

https://qiita.com/mochimo/items/e9be36619a76e15bc898

配色そのものはこちらのサイトを参考にさせていただきました。

https://entsumugu.com/how-to-set-excelvbe-to-dark-mode-style/

おわりに

最近、複数の PC で VBA を使う機会があり、それぞれの環境で VBE の見た目を手動で設定し直すのが面倒だと感じたのが、この方法を試したきっかけです。

過剰な実装とは思いつつも、コードベースで設定を管理したいと思い、作成しました。

ダークモードくらい公式で実装してほしい

Discussion