VBAの機能で操作できるレジストリキー
VBAにはレジストリ操作用の関数が用意されていますがこれらの関数には制約があり、操作できるレジストリは「HKEY_CURRENT_USER\Software\VB and VBA Program Settings」配下のみになります。
それ以外の個所のレジストリの操作(登録、更新、取得、削除)を行う場合は「VBAで全てのレジストリの操作を行う(WshShell)」をご参照ください。
用途
これらの関数は「HKEY_CURRENT_USER\Software\VB and VBA Program Settings」配下のみでしか扱えないという強い制限のためどうしても用途が限られます。
具体的な用途としては、個人用マクロブックであるPERSONAL.XLSBに登録されているVBAの関数を使った場合に、前回値として保存しておくような場合になります。
PERSONAL.XLSBはあくまでもソースコードのため、処理中の変数の値を保持することは可能でも、Excel終了後も保持しておくことはできません。そのような場合に、次のExcel起動時の初期値としてレジストリから値を取得するような用途として利用します。
レジストリ操作関数
VBAではレジストリの操作を行う関数が4つ用意されています。
Win32APIのレジストリ関連の関数は30個以上あるためそれと比べると少ないですが、利用できるレジストリキーが「HKEY_CURRENT_USER\Software\VB and VBA Program Settings」配下のみに限定されていることから、以下のように必要最低限のことに限定されています。
関数 | 処理概要 |
SaveSetting関数 | データ登録、更新 |
GetSetting関数 | 指定キーのデータ取得 |
GetAllSettings関数 | 指定セクションの全キー取得 |
DeleteSetting関数 | データ削除 |
SaveSetting関数
SaveSetting関数はレジストリにキーを追加する関数です。「HKEY_CURRENT_USER\Software\VB and VBA Program Settings」キーの直下に追加されます。同じキーが既に存在する場合は値を上書きします。
Sub SaveSetting(AppName As String, Section As String, Key As String, Setting As String)
AppName(省略不可) | アプリケーション名を文字列で指定します。 |
Section(省略不可) | セクション名を文字列で指定します。 |
Key(省略不可) | キー名を文字列で指定します。 |
Setting(省略不可) | キーに設定する値を文字列で指定します。 |
戻り値 | なし |
GetSetting関数
GetSetting関数はレジストリのキーの値を取得する関数です。
Function GetSetting(AppName As String, Section As String, Key As String, [Default]) As String
AppName(省略不可) | アプリケーション名を文字列で指定します。 |
Section(省略不可) | セクション名を文字列で指定します。 |
Key(省略不可) | キー名を文字列で指定します。 |
Default(省略可) | キーが存在しない場合に返す値を指定します。省略した場合は””(空文字列)が設定されます。 |
戻り値 | 対象キーの値が返されます。対象キーが存在しない場合は引数Defaultの値を返します。 |
GetAllSettings関数
GetAllSettings関数は指定セクションに含まれる全てのキーとその値を二次元配列で返します。二次元目のインデックスが0の配列にはキー、1の配列には値が設定されます。
Function GetAllSettings(AppName As String, Section As String)
AppName(省略不可) | アプリケーション名を文字列で指定します。 |
Section(省略不可) | セクション名を文字列で指定します。 |
戻り値 | セクションに含まれる全てのキーを配列で返します。 |
DeleteSetting関数
DeleteSetting関数は指定したキーを削除します。キーを省略した場合は指定したセクション全体を削除します。セクションも省略した場合は指定したアプリケーション名全体を削除します。
Sub DeleteSetting(AppName As String, [Section], [Key])
AppName(省略不可) | アプリケーション名を文字列で指定します。 |
Section(省略可) | セクション名を文字列で指定します。 |
Key(省略可) | キー名を文字列で指定します。 |
戻り値 | なし |
サンプルコード
関数を呼び出すだけでレジストリ操作が可能です。
レジストリへの登録、更新、取得、削除、の一連の流れを書いたコードです。
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 |
Sub RegTest() '// レジストリを追加 Call SaveSetting(AppName:="Test_AppName1", Section:="TEST_SECTION1", Key:="test_key1", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName1", Section:="TEST_SECTION1", Key:="test_key2", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName1", Section:="TEST_SECTION2", Key:="test_key1", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName1", Section:="TEST_SECTION2", Key:="test_key2", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName2", Section:="TEST_SECTION1", Key:="test_key1", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName2", Section:="TEST_SECTION1", Key:="test_key2", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName2", Section:="TEST_SECTION2", Key:="test_key1", Setting:="Test_Value") Call SaveSetting(AppName:="Test_AppName2", Section:="TEST_SECTION2", Key:="test_key2", Setting:="Test_Value") '// 上書き Call SaveSetting(AppName:="Test_AppName", Section:="TEST_SECTION1", Key:="test_key1", Setting:="Update") '// 取得 Dim s s = GetSetting(AppName:="Test_AppName", Section:="TEST_SECTION1", Key:="test_key1") '// セクション取得 Dim ar ar = GetAllSettings(AppName:="Test_AppName", Section:="TEST_SECTION1") Debug.Print ar(0, 0) '// test_key1 Debug.Print ar(0, 1) '// Update '// 削除 Call DeleteSetting(AppName:="Test_AppName") Call DeleteSetting(AppName:="Test_AppName1", Section:="TEST_SECTION1") Call DeleteSetting(AppName:="Test_AppName2", Section:="TEST_SECTION1", Key:="test_key1") End Sub |