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 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ファイルをメモ帳で開いた画面です。
セクション、キー毎に区分され書き込まれているのが分かります。
上のコードで、指定したデータを確認してください。