VBA入門
レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2018-02-07 最終更新日:2020-04-18

第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)


マクロVBAでレジストリを操作することの是非はあるかもしれませんが、
VBAには、レジストリ操作のステートメントと関数が用意されています。


VBAエキスパートのVBAスタンダートの出題範囲を見るとレジストリ操作が入っており、
ここまでの「マクロVBA入門」で漏れている項目として今回取り上げます。
(2019/5の試験改定で出題範囲から削除されました。)

レジストリを保存するには、SaveSettingステートメントを使います。
レジストリからキー設定値を取得するには、GetSetting関数を使います。
レジストリから全ての設定値を取得するには、GetAllSettings関数を使います。
レジストリからキー設定を削除するには、DeleteSettingステートメントを使います。

SaveSettingステートメント

レジストリにアプリケーションの項目を保存または作成します。
SaveSetting appname, section, key, setting
SaveSetting ステートメントの構文は、次の名前付き引数から構成されます。

指定項目 内容
appname 必ず指定します。
設定を適用するアプリケーション名またはプロジェクト名を含む文字列式を指定します。
Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section 必ず指定します。
キー設定を保存するセクション名を含む文字列式を指定します。
key 必ず指定します。
保存するキー名を含む文字列式を指定します。
setting 必ず指定します。
名前付き引数 key に設定する値を含む式を指定します。

キー設定が保存できない場合、エラーが発生します。
レジストリに保存される位置は、
HKEY_CURRENT_USER
→Software
 →VB and VBA Program Settings

この下に、以下のように保存されます

VBA マクロ 参考画像

DeleteSettingステートメント

レジストリにあるセクションまたはキー設定を削除します。
DeleteSetting appname, section[, key]
DeleteSetting ステートメントの構文は、次の名前付き引数から構成されます。

指定項目 内容
appname 必ず指定します。
セクションか、キー設定を適用するアプリケーション名またはプロジェクトの名前を含む文字列式を指定します。
Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section 省略可能です。
キー設定を削除するセクション名を含む文字列式を指定します。
名前付き引数 appname および名前付き引数 section だけを指定した場合、指定されたセクションは関連付けられたすべてのキー設定と共に削除されます。
key 省略可能です。
削除するキー名を含む文字列式を指定します。

keyだけ省略した場合は、指定sectionの全てのキーが削除されます。
sectionとkeyを省略した場合は、指定したappnameの全てが削除されます。
ただし、
指定したセクションまたはキー設定が存在しない場合にはDeleteSettingステートメントを使用すると、実行時エラーが発生します。

GetSetting関数

レジストリにあるキー設定値を取得し返します。
GetSetting(appname, section, key[, default])
GetSetting 関数の構文は、次の名前付き引数から構成されます。

指定項目 内容
appname 必ず指定します。
設定を適用するアプリケーション名またはプロジェクト名を含む文字列式を指定します。
Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section 必ず指定します。
キー設定を保存するセクション名を含む文字列式を指定します。
key 必ず指定します。
保存するキー名を含む文字列式を指定します。
default 省略可能です。
キー設定に値が設定されていない場合に返す値を含む式を指定します。
省略すると、長さ 0 の文字列 ("") とみなされます。

GetSetting 関数の名前付き引数のいずれかを指定していない場合、
GetSetting 関数では、名前付き引数 default の値が返されます。

GetAllSettings関数

レジストリにあるSaveSettingステートメントを使って作成された項目内のすべてのキー設定および各キー設定に対応する値のリストを返します。
GetAllSettings(appname, section)
GetAllSettings 関数の構文は、次の名前付き引数から構成されます。

指定項目 内容
appname 必ず指定します。キー設定を取得するアプリケーション名またはプロジェクト名を含む文字列式を指定します。Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section 必ず指定します。キー設定を取得するセクション名を含む文字列式を指定します。GetAllSettings 関数では、指定したセクションのすべてのキー設定およびそのキー設定に対応する値を含む文字列の二次元配列を格納したバリアント型 (Variant) の値が返されます。

名前付き引数 appname または名前付き引数 section のいずれかを指定していない場合、
GetAllSettings 関数は初期化されていないバリアント型 (Variant) の値を返します。

レジストリ操作の使用例

'レジストリに保存
SaveSetting appname:="MyApp", _
      section:="Test", _
      Key:="Test1", _
      setting:="Excelの神髄1"
SaveSetting "MyApp", _
      "Test", _
      "Test2", _
      "Excelの神髄2"

'レジストリから取得
MsgBox GetSetting(appname:="MyApp", _
         section:="Test", _
         Key:="Test1", _
         Default:="未登録")
MsgBox GetSetting("MyApp", _
         "Test", _
         "Test2", _
         "未登録")

'レジストリから全てを取得します。
Dim MySettings As Variant
Dim intSettings As Integer
MySettings = GetAllSettings(appname:="MyApp", _
              section:="Test")
For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)
  MsgBox MySettings(intSettings, 0) & ":" & _
       MySettings(intSettings, 1)
Next

'レジストリからキー削除
DeleteSetting appname:="MyApp", section:="Test", Key:="Test2"
'レジストリからApp全て削除
DeleteSetting appname:="MyApp"

以下の順にメッセージボックスに表示されます。
Excelの神髄1
Excelの神髄2
Test1:Excelの神髄1
Test2:Excelの神髄2

最後に

各種アプリケーションを開発してきたものとしては、
アプリケーションでレジストリを使う場合は、アプリケーションのアンインストールを用意すべきだと思っています。
つまり、
ExcelのVBAでレジストリを扱うのであれば、アンインストールも用意すべきだと考えます。
VBAでこれを用意していないのであれば、レジストリは使うべきではないと思います。
必ず、レジストリへの登録と削除はセットで用意するようにしてください。

レジストリを頻繁に使う場合は、以下の記事のクラスを使うとVBA記述が見やすく簡単になると思います。
ただし、複数クラスを使っているので、クラスに対する知識は相応に必要です。
VBAの学習を続けていくと、いずれ必ずクラスとかオブジェクト指向といった言葉に出くわします。VBAクラスについて、基礎から実践応用まで解説していきます。VBEの「挿入」の一番下にある「クラスモジュール」については、存在は知っていても使う機会が無かったかもしれません。



同じテーマ「マクロVBA入門」の記事

第130回.テーブル操作の概要(ListObject)
第131回.テーブル操作のVBAコード(ListObject,DataBodyRange)
第142回.テーブル全件処理とデータ最終行(ListObject,DataBodyRange)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)
第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
第133回.引数の数を可変にできるパラメーター配列(ParamArray)
第134回.Errオブジェクトとユーザー定義エラー
第138回.外部ライブラリ(ActiveXオブジェクト)
第140回.Property {Get|Let|Set} ステートメント
第143回.WorksheetFunctionの効率的な使い方とスピル新関数の利用


新着記事NEW ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ