VBAエキスパート対策
レジストリの操作

Excel VBAエキスパート対策です
公開日:2018-03-12 最終更新日:2019-08-26

レジストリの操作


・レジストリの概念
・レジストリ操作の注意点
・レジストリに登録する
・レジストリを取得する
・レジストリを削除する


2019/05/15からの「VBAエキスパート」リニューアルに伴い出題範囲から削除されました。
マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています。エクセル関数・機能・基本操作の入門解説からマクロVBAまでエクセル全般を網羅しています。

もともと、実務としてもレジストリについては必須ではありません。
VBAで扱うこと自体は簡単なので、必要になった時に調べれば十分です。

【ここでのポイント】

ここは試験対策と割り切って覚えて下さい。

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

これらのステートメントと関数、そしてその引数だけを覚えておけば問題ありません。

レジストリの概念

Microsoft Windows オペレーティングシステム(OS)で用いられている設定情報のデータベースです。

OSに関する基本情報やアプリケーションの設定、拡張情報などのほか、拡張子の関連付け、ユーザパスワードなども保存されています。
すべてのアプリケーションがレジストリを使用しているわけではなく、独自の設定ファイルを用いているものもある。

レジストリを閲覧・修正・登録する専用のアプリケーションとして、Windowsにはレジストリエディタ(regedit.exe)が用意されています。

VBAには、レジストリを操作するための専用の、ステートメント・関数が用意されています。
レジストリを保存するには、SaveSettingステートメントを使います。
レジストリからキー設定値を取得するには、GetSetting関数を使います。
レジストリから全ての設定値を取得するには、GetAllSettings関数を使います。
レジストリからキー設定を削除するには、DeleteSettingステートメントを使います。

レジストリは階層構造で出来ています。
appname ・・・ App名
→section ・・・ App内のセクション
 →key, setting ・・・ キーと設定値


レジストリ操作の注意点

レジストリエディタは、レジストリの全てを扱う事が出来ますが、
VBAでは、レジストリ内の特定の場所のみ操作が許可されています。

VBAで操作できるレジストリの場所
VBAで、レジストリに読込・保存できる場所は、以下の場所のみと決められています。

HKEY_CURRENT_USER
→Software
 →VB and VBA Program Settings


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

VBA マクロ 参考画像

試験には関係ないとは思いますが、以下の点についての認識を持っておいてください。

レジストリを使うVBAを作成した時、
そのマクロ使用者には、レジストリを使っていることがわかるようにしてください。
通常、Excelはファイルだけあれば動作するものと思われているため、
レジストリをどのような使い方をしているかを明確にしておくべきです。
特に、登録だけしてそのままと言うのは、アプリケーション作成のモラルに反します。
登録した、レジストリの削除方法等、アンインストール方法も用意しておくべきです。

レジストリに登録する

レジストリを保存するには、SaveSettingステートメントを使います。

SaveSettingステートメント
レジストリにアプリケーションの項目を保存または作成します。

SaveSetting appname, section, key, setting

SaveSetting ステートメントの構文は、次の名前付き引数から構成されます。

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

キー設定が保存できない場合、エラーが発生します。

レジストリを取得する

レジストリからキー設定値を取得するには、GetSetting関数を使います。
レジストリから全ての設定値を取得するには、GetAllSettings関数を使います。


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) の値を返します。

レジストリを削除する

レジストリからキー設定を削除するには、DeleteSettingステートメントを使います。

DeleteSettingステートメント
レジストリにあるセクションまたはキー設定を削除します。

DeleteSetting appname, section[, key]

DeleteSetting ステートメントの構文は、次の名前付き引数から構成されます。

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

引数をすべて指定した場合、指定したキー設定が削除されます。

ただし、
指定したセクションまたはキー設定が存在しない場合にDeleteSettingステートメントを使用すると、実行時エラーが発生します。

レジストリの使用例

'レジストリに保存
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"

以下の順にメッセージボックスに表示されます。

Excelの神髄1
Excelの神髄2
Test1:Excelの神髄1
Test2:Excelの神髄2

【業務改善の実務】

VBA開発の実務で、レジストリを使う事はほとんど必要ないと思います。
レジストリは、OSの設定情報等の重要な情報が書き込まれています。
そのような領域に、VBAの情報を書き込まなければならない特段の理由が見当たらないからです。

各種アプリケーションを開発してきたものとしては、
アプリケーションでレジストリを使う場合は、
アプリケーションのアンインストールとしてレジストリの消去も用意すべきだと思っています。
つまり、
VBAでこれを用意しているいないのであれば、レジストリを安易に使うべきではないと思います。

アプリケーション独自の設定情報が、Excelファイルの外に必要であるなら、
大抵の場合は、独自のファイルを用意すれば良い事です。

【本サイト内の関連ページ】

第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
・SaveSettingステートメント ・DeleteSettingステートメント ・GetSetting関数 ・GetAllSettings関数 ・レジストリ操作の使用例 ・最後に

VBAエキスパート公式テキスト

2019/5/30発売リニューアル版


2019/7/26発売リニューアル版

こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。



同じテーマ「VBAエキスパート対策」の記事

プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
APIとOLEオートメーション
変数と配列
レジストリの操作
ファイルの操作
ユーザーフォームとメニューの操作
VBAスタンダード試験対策まとめ


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

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)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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