INIファイルを使用して外部に設定情報を保存・読み込みすることが可能です。INIファイルは、シンプルなテキストファイル形式で、構造が分かりやすく、設定の読み書きが容易であるため、アプリケーションの初期設定やユーザー設定の保存などに適しています。
以下では、VBAでINIファイルを扱う方法について、具体例を交えて2000文字程度で詳しく解説します。
■ INIファイルの構造
INIファイルは以下のような構造を持っています:
[セクション名]
キー1=値1
キー2=値2
たとえば、設定ファイル config.ini
に以下のような内容が書かれているとします。
[設定]
ユーザー名=山田太郎
ウィンドウ幅=1024
ウィンドウ高さ=768
■ VBAでINIファイルを扱う方法
VBAには直接INIファイルを操作する関数はありませんが、Windows API関数を使うことで読み書きが可能です。主に使用するAPI関数は以下の2つです。
1. GetPrivateProfileString
INIファイルから値を取得する
2. WritePrivateProfileString
INIファイルに値を書き込む
■ API関数の宣言(標準モジュールに記述)
Declare PtrSafe Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Declare PtrSafe Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Long
※ PtrSafe
は64ビット版Officeを使用している場合に必要です。32ビット版では Declare Function
に読み替えてください。
■ INIファイルから値を読み込む関数の例
Function ReadIniValue(section As String, key As String, filePath As String) As String
Dim buffer As String * 255
Dim length As Long
length = GetPrivateProfileString(section, key, "", buffer, Len(buffer), filePath)
ReadIniValue = Left(buffer, length)
End Function
使用例:
Sub ReadExample()
Dim iniPath As String
iniPath = "C:\test\config.ini"
Dim username As String
username = ReadIniValue("設定", "ユーザー名", iniPath)
MsgBox "ユーザー名:" & username
End Sub
■ INIファイルに値を書き込む関数の例
vbコピーする編集するFunction WriteIniValue(section As String, key As String, value As String, filePath As String) As Boolean
Dim result As Long
result = WritePrivateProfileString(section, key, value, filePath)
WriteIniValue = (result <> 0)
End Function
使用例:
Sub WriteExample()
Dim iniPath As String
iniPath = "C:\test\config.ini"
Dim success As Boolean
success = WriteIniValue("設定", "ユーザー名", "田中一郎", iniPath)
If success Then
MsgBox "書き込み成功"
Else
MsgBox "書き込み失敗"
End If
End Sub
■ 応用:設定の保存と読込を一括管理
アプリケーションの起動時に設定を読み込み、終了時に保存するようにすれば、ユーザーごとの設定を保持できます。
Sub LoadSettings()
Dim iniPath As String
iniPath = ThisWorkbook.Path & "\settings.ini"
Dim width As String
width = ReadIniValue("ウィンドウ", "幅", iniPath)
If IsNumeric(width) Then
Application.Width = CLng(width)
End If
End Sub
Sub SaveSettings()
Dim iniPath As String
iniPath = ThisWorkbook.Path & "\settings.ini"
WriteIniValue "ウィンドウ", "幅", CStr(Application.Width), iniPath
End Sub
■ 注意点・補足
- INIファイルのパスが存在しない場合は、読み込みは失敗し、書き込み時にはファイルが自動生成されます。
- INIファイルはテキストエディタ(メモ帳など)で簡単に編集できます。
- ファイルの文字コードは ANSI(Shift_JIS) 推奨。UTF-8では読み込みできないことがあります。
- セクション名、キー名、値はすべて文字列で扱います。
■ まとめ
VBAでINIファイルを扱うには、Windows API関数である GetPrivateProfileString
と WritePrivateProfileString
を使います。これにより、設定の保存・読み込みが可能となり、ユーザー設定や外部パラメータの管理が柔軟になります。
INIファイルの主な利点:
- 設定情報の外部管理が可能
- テキスト形式で編集が容易
- プログラムと独立して管理できる