機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA

レジストリを使う



VBAにはレジストリにデータを書き込んだり、レジストリのデータを読み取るための命令が用意されています。ここでは、レジストリの使い方を簡単に解説します。
レジストリは、Windowsやアプリケーションの各種設定が記録される重要な仕組みです。レジストリには膨大な設定情報が記録され、それぞれの項目が密接に関連しています。「レジストリが壊れるとWindowsが起動しなくなることもある。ビギナーは触らない方がいい」という脅し文句は、まんざらウソではありません。なお、VBAのコマンドで操作できるレジストリは、HKEY_CURRENT_USERの下にあるSoftware内のVB and VBA Program Setting内です。そのほかの場所を操作したいときはAPIなどを使います。

レジストリへの登録


レジストリにデータを保存するには、SaveSettingステートメントを実行します。SaveSettingステートメントの構文は次の通りです。

SaveSetting appname, section, key, data

たとえば次のように実行すると、

Sub test1()
    SaveSetting "MyMacro", "Main", "Data", "123"
End Sub



レジストリはツリー構造(階層構造)で管理されています。上記のサンプルで保存したレジストリデータは、「VB and VBA Program Settingフォルダ」内に「\MyMacro\Mainフォルダ」を作成し、そのフォルダに「Dataファイル」を作り、そのファイルに「123」というデータを書き込んだようなものです。

レジストリのデータを取得する


レジストリに保存されているデータを取得するには、GetSetting関数やGetAllSettings関数を使います。GetSetting関数は指定したキーのデータを取得します。GetAllSettings関数は、指定したセクションに保存されているすべてのキーを配列で取得します。それぞれの構文は次の通りです。

GetSetting(appname, section, key, default)
GetAllSettings(appname, section)

引数appnameにはエントリ名を指定します。引数sectionにはセクション名を指定します。次のサンプルは、「Data1」のデータを画面に表示します。

Sub test2()
    MsgBox GetSetting("MyMacro", "Main", "Data1")
End Sub

次のサンプルは、「Main」セクション内の全てのデータを取得し、Sheet1のA列にキー名、B列にデータを書き込みます。

Sub test3()
    Dim buf As Variant, i As Long
    buf = GetAllSettings("MyMacro", "Main")
    For i = 0 To UBound(buf)
        Worksheets("Sheet1").Cells(i + 1, 1) = buf(i, 0)
        Worksheets("Sheet1").Cells(i + 1, 2) = buf(i, 1)
    Next i
End Sub

なお、今回の例では「VB and VBA Program Settingフォルダ」内に「MyMacro」というサブキーを作りました。さらに、「MyMacro」サブキーの中には「Main」というサブキーがあります。VBAに用意されている標準のコマンドでは、こうしたサブキーの存在を調べることはできません。「MyMacro」に対してGetAllSettings関数を実行しても、サブキーの名前を列挙することはできないんです。保存されている全サブキーを列挙するにはWMIを使います。詳しくは「レジストリのサブキーを列挙する」をご覧ください。

レジストリのデータを削除する


レジストリに保存されているデータを削除するには、DeleteSettingステートメントを実行します。DeleteSettingステートメントの構文は次の通りです。

DeleteSetting appname, section, key

引数appname、引数section、引数keyには、SaveSettingステートメントで指定したキー名やセクション名を指定します。次のサンプルは、「Data2キー」を削除します。

Sub test4()
    DeleteSetting "MyMacro", "Main", "Data2"
End Sub


確かにレジストリはデリケートな記録領域です。扱いには慎重さも必要でしょう。しかしレジストリは、設定項目などを記録しておくのに最も適した場所のひとつです。上記で紹介したVBAのコマンドを使う限り、操作できるのはHKEY_CURRENT_USER\Software\VB and VBA Program Setting内だけですので、誤って重大な被害を被る可能性は少ないと思います。慎重さを持って、積極的に使いましょう。




このエントリーをはてなブックマークに追加