'INIファイル読み込み
Private Declare PtrSafe 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 PtrSafe 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
コードサンプル
Sub iniファイル書き込み(セクション As String, キー As String, 値 As String)
Dim iniファイル As String: iniファイル = ThisWorkbook.Path & "\config.ini"
Dim lret As Long: lret = WritePrivateProfileString(セクション, キー, 値, iniファイル)
End Sub
Function iniファイル読み込み(セクション As String, キー As String, Optional ByVal 初期値 As String = vbNullString)
Dim buf As String * 256 '固定長の文字列型
Dim iniファイル As String: iniファイル = ThisWorkbook.Path & "\config.ini"
Dim rc As Long: rc = GetPrivateProfileString(セクション, キー, 初期値, buf, Len(buf), iniファイル)
'文末のNULL文字を削除
iniファイル読み込み = Left$(buf, InStr(buf, vbNullChar) - 1)
End Function
使用サンプル
Private Sub 書き込みテスト()
Call iniファイル書き込み("セクション1", "キーA", "あいうえお")
Call iniファイル書き込み("セクション1", "キーB", "かきくけこ")
Call iniファイル書き込み("セクション1", "キーC", "さしすせそ")
Call iniファイル書き込み("セクション2", "キーA", "たちつてと")
Call iniファイル書き込み("セクション2", "キーB", "なにぬねの")
End Sub
Private Sub 読み込みテスト()
Msgbox iniファイル読み込み("セクション1", "キーA")
End Sub
'INIファイルセクション一括読み込み
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
コードサンプル
Function iniファイルセクション一括読み込み(セクション As String) As Variant
Dim buf As String * 256 '固定長の文字列型
Dim iniファイル As String: iniファイル = ThisWorkbook.Path & "\Data\config.ini"
Dim ret As Long: ret = GetPrivateProfileSection(セクション, buf, Len(buf), iniファイル)
'文末のNULL文字を削除
Dim 一括データ As String: 一括データ = Left$(buf, InStr(1, buf, vbNullChar & vbNullChar) - 1)
' 配列形式で返す:Array(0) = 「キー = 値」
iniファイルセクション一括読み込み = Split(一括データ, vbNullChar)
End Function
使用サンプル
サンプル1:文字列で一括取得
Private Sub サンプル1()
Dim 配列 As Variant: 配列 = iniファイルセクション一括読み込み("セクション1")
For i = 0 To UBound(配列)
Debug.Print 配列(i)
Next
End Sub
サンプル2:キーと値を別々に取得
Private Sub サンプル2()
Dim 配列 As Variant: 配列 = iniファイルセクション一括読み込み("セクション1")
For i = 0 To UBound(配列)
キー = Split(配列(i), "=")(0)
値 = Split(配列(i), "=")(1)
Debug.Print キー & "..." & 値
Next
End Sub
サンプル2-2:キーにRangeの番地、値に入力文字を指定して一括で入力(初期化等)する
Private Sub サンプル2-2()
Dim 配列 As Variant: 配列 = iniファイルセクション一括読み込み("シートの初期化")
For i = 0 To UBound(配列)
キー = Split(配列(i), "=")(0)
値 = Split(配列(i), "=")(1)
Range(キー) = 値
Next
End Sub
サンプル2-3:2-2圧縮版
Private Sub サンプル2-3()
Dim 配列 As Variant: 配列 = iniファイルセクション一括読み込み("シートの初期化")
For i = 0 To UBound(配列)
Range(Split(配列(i), "=")(0)) = Split(配列(i), "=")(1)
Next
End Sub
サンプル3:サンプル2-2改良版(値に「=」を使用可能)
Private Sub サンプル()
Dim 配列 As Variant: 配列 = iniファイルセクション一括読み込み("シートの初期化")
For i = 0 To UBound(配列)
Dim 区切り位置 As String: 区切り位置 = InStr(1, 配列(i), "=")
キー = Left(配列(i), 区切り位置 - 1)
値 = Mid(配列(i), 区切り位置 + 1)
Debug.Print キー & "..." & 値
'Range(キー) = 値
Next
End Sub
サンプル3-2:サンプル3圧縮版
Private Sub サンプル()
Dim 配列 As Variant: 配列 = iniファイルセクション一括読み込み("シートの初期化")
For i = 0 To UBound(配列)
Range(Left(配列(i), InStr(1, 配列(i), "=") - 1)) = Mid(配列(i), InStr(1, 配列(i), "=") + 1)
Next
End Sub