Excel VBA:INIファイルへの書き込み/読込み|使用例と解説

Excel VBAでINIファイルへ書き込むコードと、読込むコードの解説を掲載しています。




Homeに戻る > Excel ファイル操作のTipsへ


INIファイルとは、アプリの設定データを保存したテキストファイルのことです。

拡張子は「.ini」で、initializationの略になります。

INIファイルを使うと、次回起動時の初期設定値などを保存でき便利です。

使い方も簡単です。

  • 書き込み時、指定したファイルがなくても、自動的に作成されエラーにはなりません。
    ですので確実に保存したい場合は、事前にファイルの存在チェックなどの処理が必要です。
  • 読込み時、指定したデータが登録されていない場合にも、既定値を設定できエラーにはなりません。
    ですので「前回の設定データが見使いません。初期値に戻します。」などのメッセージを表示させたりします。

書き込みと読込みを行うには、Windows APIを使用します。

どちらもセクション(区分名)とキー(データに関連付ける目印)を指定します。


書き込みは、WritePrivateProfileStringを使用します。

構文:

Private Declare Function WritePrivateProfileString Lib "kernel32" _ Alias "WritePrivateProfileStringA" _ (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _ ByVal lpString As Any, ByVal lpFileName As String) As Long

引数:

  • lpApplicationName:保存先のセクションの名を指定します。
  • lpKeyName:関連付けるキーの名前を指定します。
  • lpString:保存するデータを指定します。
  • lpFileName:INIファイル名を指定します。

読込みは、GetPrivateProfileStringを使用します。

構文:

Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" _ (ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, ByVal lpDefault As String, _ ByVal lpReturnedString As String, ByVal nSize As Long, _ ByVal lpFileName As String) As Long

引数:

  • lpApplicationName:読込先のセクションの名を指定します。
  • lpKeyName:関連付けるキーの名前を指定します。
  • lpDefault:セクションとキーが見つからなかった場合のデフォルトのデータを指定します。
  • lpReturnedString:取得したデータが保存されます。
  • nSize:読込むバッファサイズを指定します。このサイズを超えた場合は切り捨てられます。
  • lpFileName:INIファイル名を指定します。

アプリで使用した「Excelで画像表示ソフトを作ってみよう Step 3 終了ボタンと、終了時フォルダをINIファイルに保存」を掲載しています参照してください。



Excel VBAでINIファイルへ書込みと読込みを行う

Excel実行画面

「書き込み」ボタンをクリックすると、E3 ~ E5 が書き込まれます。

「読込み」ボタンをクリックすると、指定データが読み込まれE7 ~ E9 に表示されます。

Excel実行画面

Excel VBA コード

  • INIファイル名:c:\test.ini
  • セクション:Excel_INIファイル、エクセル_INIファイル
  • キー:文字、数字

以上を指定し、書込みと読込みを行っています。

'INIファイル読込み
Private Declare Function WritePrivateProfileString Lib "kernel32" _
    Alias "WritePrivateProfileStringA" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
     ByVal lpString As Any, ByVal lpFileName As String) As Long

'INIファイル書き込み
Private Declare Function GetPrivateProfileString Lib "kernel32" _
    Alias "GetPrivateProfileStringA" _
    (ByVal lpApplicationName As String, _
     ByVal lpKeyName As Any, ByVal lpDefault As String, _
     ByVal lpReturnedString As String, ByVal nSize As Long, _
     ByVal lpFileName As String) As Long

'Excel VBAでINIファイル書き込み
Private Sub CommandButton1_Click()
    Dim lret As Long
    Dim s1 As String
    
    s1 = Range("E3")
    'セクション: Excel_INIファイル
    'キー: 文字
    '書き込む文字: s1
    'INIファイル名: c:\test.ini
    lret = WritePrivateProfileString("Excel_INIファイル", "文字", s1, "c:\test.ini")

    'セクション: Excel_INIファイル
    'キー: 数字
    '書き込む文字: s1
    'INIファイル名: c:\test.ini
    s1 = Range("E4")
    lret = WritePrivateProfileString("Excel_INIファイル", "数字", s1, "c:\test.ini")

    s1 = Range("E5")
    'セクション: エクセル_INIファイル
    'キー: 文字
    '書き込む文字: s1
    'INIファイル名: c:\test.ini
    lret = WritePrivateProfileString("エクセル_INIファイル", "文字", s1, "c:\test.ini")

End Sub

'Excel VBAでINIファイル読込み
Private Sub CommandButton2_Click()
    Dim buf As String * 256
    
    'セクション: Excel_INIファイル
    'キー: 数字
    '既定値: 556
    'INIファイル名: c:\test.ini
    rc = GetPrivateProfileString _
        ("Excel_INIファイル", "数字", 556, buf, Len(buf), "c:\test.ini")
    '文末のNULL文字を削除
    Range("E7") = Left$(buf, InStr(buf, vbNullChar) - 1)

    'セクション: Excel_INIファイル
    'キー: 文字
    '既定値: NULL
    'INIファイル名: c:\test.ini
    rc = GetPrivateProfileString _
        ("Excel_INIファイル", "文字", vbNullString, buf, Len(buf), "c:\test.ini")
    Range("E8") = Left$(buf, InStr(buf, vbNullChar) - 1)

    'セクション: エクセル_INIファイル
    'キー: 文字
    '既定値: "VBA"
    'INIファイル名: c:\test.ini
    rc = GetPrivateProfileString _
        ("エクセル_INIファイル", "文字", "VBA", buf, Len(buf), "c:\test.ini")
    Range("E9") = Left$(buf, InStr(buf, vbNullChar) - 1)
End Sub


Excel VBAで書き込まれた、INIファイル

作成されたINIファイルをメモ帳で開いた画面です。

セクション、キー毎に区分され書き込まれているのが分かります。

上のコードで、指定したデータを確認してください。

Excel VBAで書き込まれた、INIファイル

Homeに戻る > Excel ファイル操作のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved