VBA INIファイルの使用

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関数である GetPrivateProfileStringWritePrivateProfileString を使います。これにより、設定の保存・読み込みが可能となり、ユーザー設定や外部パラメータの管理が柔軟になります。

INIファイルの主な利点:

  • 設定情報の外部管理が可能
  • テキスト形式で編集が容易
  • プログラムと独立して管理できる
タイトルとURLをコピーしました