【Excel VBA】Windowsレジストリに設定を保存・読み込みする方法

マクロで利用する設定値(例えば、前回開いたファイルのパスや、ユーザーが入力した名前など)を、Excelファイルを閉じて再度開いた後も記憶しておきたい、という場合があります。

設定の保存は、非表示のシートに書き込む方法が一般的ですが、VBAにはWindowsの**「レジストリ」**という場所に、簡単な命令で設定を保存・読み込みするための専用機能が用意されています。

この記事では、SaveSettingGetSettingといったVBAの組み込みステートメントを使い、レジストリにマクロの設定を記録する方法を解説します。


目次

レジストリとは?

レジストリは、Windows自体や、インストールされたアプリケーションが、動作に必要な設定情報を記録しておくためのデータベースです。VBAからアクセスできる場所は、安全な特定の領域(HKEY_CURRENT_USER\Software\VB and VBA Program Settings)に限られています。


完成したVBAコード(保存・読み込み・削除)

以下は、レジストリに対する設定の「保存」「個別読み込み」「一括読み込み」「削除」という一連の操作を行うサンプルコードです。

' 設定をレジストリに保存するマクロ
Sub SaveSettingsToRegistry()

    ' SaveSetting AppName, Section, Key, Setting
    SaveSetting "MyExcelTool", "UserSettings", "UserName", "Taro Yamada"
    SaveSetting "MyExcelTool", "UserSettings", "LastLogin", CStr(Now())
    
    MsgBox "レジストリに設定を保存しました。"

End Sub


' レジストリから特定の設定を1つだけ読み込むマクロ
Sub GetSingleSettingFromRegistry()

    Dim userName As String
    
    ' GetSetting(AppName, Section, Key, [Default])
    userName = GetSetting("MyExcelTool", "UserSettings", "UserName", "Default User")
    
    MsgBox "レジストリから読み込んだユーザー名: " & userName

End Sub


' レジストリからセクション単位ですべての設定を読み込むマクロ
Sub GetAllSettingsFromRegistry()
    
    Dim allSettings As Variant
    Dim i As Long
    Dim message As String
    
    ' GetAllSettings(AppName, Section) は2次元配列を返す
    allSettings = GetAllSettings("MyExcelTool", "UserSettings")
    
    If IsEmpty(allSettings) Then
        message = "設定が見つかりませんでした。"
    Else
        message = "【UserSettings】の全設定:" & vbCrLf
        For i = LBound(allSettings, 1) To UBound(allSettings, 1)
            ' (i, 0)にKey, (i, 1)にSettingが格納されている
            message = message & allSettings(i, 0) & " = " & allSettings(i, 1) & vbCrLf
        Next i
    End If
    
    MsgBox message
    
End Sub


' レジストリの設定を削除するマクロ
Sub DeleteSettingsFromRegistry()

    ' DeleteSetting AppName, Section, [Key]
    ' Keyを省略すると、Sectionごと削除される
    DeleteSetting "MyExcelTool", "UserSettings"
    
    MsgBox "レジストリから設定を削除しました。"

End Sub

コードのポイント解説

① 設定の保存: SaveSetting

SaveSetting AppName, Section, Key, Setting 4つの引数を指定して、値をレジストリに書き込みます。

  • AppName: アプリケーション名(例: MyExcelTool)。レジストリ内のフォルダ名になります。
  • Section: 設定のカテゴリ(例: UserSettings)。サブフォルダ名になります。
  • Key: 設定項目の名前(例: UserName)。
  • Setting: 保存したい値(例: Taro Yamada)。

② 設定の読み込み: GetSettingGetAllSettings

  • GetSetting(AppName, Section, Key, [Default]): Keyを指定して、特定の値を1つだけ読み込みます。値が存在しない場合に返されるデフォルト値をDefault引数で指定できます。
  • GetAllSettings(AppName, Section): Section内のすべての設定をまとめて2次元配列として取得します。複数の設定を一度に読み込みたい場合に便利です。

③ 設定の削除: DeleteSetting

DeleteSetting AppName, Section, [Key] Keyを指定すればその項目だけが、Keyを省略すればSection全体が削除されます。


レジストリ利用時の重要な注意点

  • セキュリティ: レジストリに保存される値は暗号化されません。パスワードなどの機密情報は絶対に保存しないでください。
  • スコープ: 設定は、PCの現在のWindowsユーザーに対して保存されます。
    • Excelファイルを他のPCに移動しても、設定は引き継がれません。
    • 同じPCでも、別のWindowsユーザーがログインした場合は、その設定を読み込むことはできません。

この特性から、レジストリは「そのPCで、そのユーザーが使うとき」の個人的な設定(ウィンドウの位置やサイズ、前回入力した値など)を記憶させておくのに適しています。


まとめ

VBAに組み込まれたレジストリ操作命令を使えば、ユーザーの設定などをExcelファイルをまたいで永続的に保存できます。

  • 保存: SaveSetting
  • 読み込み: GetSetting / GetAllSettings
  • 削除: DeleteSetting

非表示シートによる設定保存に比べて、ユーザーが誤ってデータを消してしまうリスクがないという利点があります。ただし、そのPC・そのユーザー限定の設定であるというスコープを正しく理解した上で、適切に利用しましょう。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次