【VBA】GetPrivateProfileString / GetPrivateProfileInt を使って設定値を取得する
<機能>
(1)iniファイルより GetPrivateProfileString を使って設定値(文字型)を取得します
(2)iniファイルより GetPrivateProfileInt を使って設定値(数値型)を取得します
(3)動作確認用のサンプルiniファイルを作成します
(4)取得結果をメッセージボックスで出力します
<サンプルデータ>
[MOJI_SECTION]
moji1=あいうえおかきくけこ
moji2="さしすせそ たちつてと"
moji3=""
[NUMBER_SECTION]
num1=1234
num2=abc
num3=""
セクション名 | キー名 | 設定値 | 取得API | 取得値 |
---|---|---|---|---|
MOJI_SECTION | moji1 | あいうえおかきくけこ | GetPrivateProfileString | あいうえおかきくけこ |
moji2 | "さしすせそたちつてと" | GetPrivateProfileString | さしすせそたちつてと | |
moji3 | GetPrivateProfileString | |||
NUMBER_SECTION | num1 | 123456 | GetPrivateProfileInt | 123456 |
num2 | abc | GetPrivateProfileInt | 0(数値に変換できないため) | |
num3 | GetPrivateProfileInt | 0(設定なしのためGetPrivateProfileIntの第3引数で指定した初期値) |
<動作検証&開発環境>
Microsoft Office 2010
<使い方>
ソース全体をそのまま張り付けてください
初期設定情報を取得()を呼び出すと処理を開始します
サンプルini作成 → 設定値取得 → メッセージに結果出力
'//DLLの参照を宣言
'//GetPrivateProfileString による設定値(文字型)の取得
'//https://msdn.microsoft.com/ja-jp/library/cc429779.aspx
Private Declare Function GetPrivateProfileString _
Lib "KERNEL32.dll" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
'//GetPrivateProfileString による設定値(文字型)の取得
'//https://msdn.microsoft.com/ja-jp/library/cc429779.aspx
Private Declare Function GetPrivateProfileString _
Lib "KERNEL32.dll" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
'//GetPrivateProfileInt による設定値(数値型)の取得
'//https://msdn.microsoft.com/ja-jp/library/cc429763.aspx
Private Declare Function GetPrivateProfileInt _
Lib "kernel32" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal nDefault As Long, _
ByVal lpFileName As String) As Long
'//https://msdn.microsoft.com/ja-jp/library/cc429763.aspx
Private Declare Function GetPrivateProfileInt _
Lib "kernel32" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal nDefault As Long, _
ByVal lpFileName As String) As Long
'//取得した初期設定値を格納する構造体
'//要素数は文字、数値それぞれ3つ
Private Type SCT_SETTING
mojidat(2) As String
numdat(2) As Integer
End Type
'//要素数は文字、数値それぞれ3つ
Private Type SCT_SETTING
mojidat(2) As String
numdat(2) As Integer
End Type
'********************************************
'iniファイルから設定値を取得します
'設定値をメッセージボックスで出力します
'1)iniファイルは実行環境に存在するものとします
'2)iniファイル名は「初期設定.ini」とします
'********************************************
Sub 初期設定情報を取得()
Dim strSample As String
Dim sctIni As SCT_SETTING
'//サンプルiniのパス
strSample = ThisWorkbook.path & "¥初期設定.ini"
strSample = ThisWorkbook.path & "¥初期設定.ini"
'//サンプルデータを作成
MakeSampleIni strSample
MakeSampleIni strSample
'//iniファイルから初期設定データを取得
'(1)文字列データ(通常の設定データ)
sctIni.mojidat(0) = Get_Setting("MOJI_SECTION", "moji1", strSample)
'(2)文字列データ(ダブルコーテーションで囲まれた文字列)
sctIni.mojidat(1) = Get_Setting("MOJI_SECTION", "moji2", strSample)
'(3)文字列データ(iniファイルに設定なし)
sctIni.mojidat(2) = Get_Setting("MOJI_SECTION", "moji3", strSample)
'(1)文字列データ(通常の設定データ)
sctIni.mojidat(0) = Get_Setting("MOJI_SECTION", "moji1", strSample)
'(2)文字列データ(ダブルコーテーションで囲まれた文字列)
sctIni.mojidat(1) = Get_Setting("MOJI_SECTION", "moji2", strSample)
'(3)文字列データ(iniファイルに設定なし)
sctIni.mojidat(2) = Get_Setting("MOJI_SECTION", "moji3", strSample)
'//取得に失敗したときデフォルト値=0が返るように指定
'(4)数値データ(通常の設定データ)
sctIni.numdat(0) = GetPrivateProfileInt("NUMBER_SECTION", "num1", 0, strSample)
'(5)数値データ(文字が設定されている)
sctIni.numdat(1) = GetPrivateProfileInt("NUMBER_SECTION", "num2", 0, strSample)
'(6)数値データ(iniファイルに設定なし)
sctIni.numdat(2) = GetPrivateProfileInt("NUMBER_SECTION", "num3", 0, strSample)
'(4)数値データ(通常の設定データ)
sctIni.numdat(0) = GetPrivateProfileInt("NUMBER_SECTION", "num1", 0, strSample)
'(5)数値データ(文字が設定されている)
sctIni.numdat(1) = GetPrivateProfileInt("NUMBER_SECTION", "num2", 0, strSample)
'(6)数値データ(iniファイルに設定なし)
sctIni.numdat(2) = GetPrivateProfileInt("NUMBER_SECTION", "num3", 0, strSample)
'//取得値をメッセージ出力
Dim strmsg As String
strmsg = "[MOJI_SECTION] moji1=" & sctIni.mojidat(0) & vbCrLf
strmsg = strmsg & "[MOJI_SECTION] moji2=" & sctIni.mojidat(1) & vbCrLf
strmsg = strmsg & "[MOJI_SECTION] moji3=" & sctIni.mojidat(2) & vbCrLf
strmsg = strmsg & "[NUMBER_SECTION] num1=" & CStr(sctIni.numdat(0)) & vbCrLf
strmsg = strmsg & "[NUMBER_SECTION] num2=" & CStr(sctIni.numdat(1)) & vbCrLf
strmsg = strmsg & "[NUMBER_SECTION] num3=" & CStr(sctIni.numdat(2)) & vbCrLf
Dim strmsg As String
strmsg = "[MOJI_SECTION] moji1=" & sctIni.mojidat(0) & vbCrLf
strmsg = strmsg & "[MOJI_SECTION] moji2=" & sctIni.mojidat(1) & vbCrLf
strmsg = strmsg & "[MOJI_SECTION] moji3=" & sctIni.mojidat(2) & vbCrLf
strmsg = strmsg & "[NUMBER_SECTION] num1=" & CStr(sctIni.numdat(0)) & vbCrLf
strmsg = strmsg & "[NUMBER_SECTION] num2=" & CStr(sctIni.numdat(1)) & vbCrLf
strmsg = strmsg & "[NUMBER_SECTION] num3=" & CStr(sctIni.numdat(2)) & vbCrLf
MsgBox strmsg, vbInformation
End Sub
'********************************************
'GetPrivateProfileStringを用いて文字列データを取得
'引数 :
' sec 取得するセクション名
' key 取得するキー名
' strSample iniファイルのフルパス
'********************************************
Public Function Get_Setting(ByVal sec As String, _
ByVal key As String, ByVal strSample As String) As String
'GetPrivateProfileStringを用いて文字列データを取得
'引数 :
' sec 取得するセクション名
' key 取得するキー名
' strSample iniファイルのフルパス
'********************************************
Public Function Get_Setting(ByVal sec As String, _
ByVal key As String, ByVal strSample As String) As String
Dim strbuf As String
Dim lLen As Long, lRtn As Long
Dim lLen As Long, lRtn As Long
'取得バッファを確保
strbuf = String(256, Chr(0))
lLen = Len(strbuf)
strbuf = String(256, Chr(0))
lLen = Len(strbuf)
'sec : セクションを指定
'key : キーを指定
'strbuf : 取得バッファ
'lLen : 取得バッファ(strbuf)のサイズ
'strSample : iniファイルのフルパスを指定
'lRtn : バッファに格納された文字数が返る(終端の NULL 文字は含まない)
lRtn = GetPrivateProfileString(sec, key, "", strbuf, lLen, strSample)
'NULL「Chr(0)」の手前までを取り出す
lLen = InStr(strbuf, Chr(0))
strbuf = Trim$(Left$(strbuf, lLen - 1))
'key : キーを指定
'strbuf : 取得バッファ
'lLen : 取得バッファ(strbuf)のサイズ
'strSample : iniファイルのフルパスを指定
'lRtn : バッファに格納された文字数が返る(終端の NULL 文字は含まない)
lRtn = GetPrivateProfileString(sec, key, "", strbuf, lLen, strSample)
'NULL「Chr(0)」の手前までを取り出す
lLen = InStr(strbuf, Chr(0))
strbuf = Trim$(Left$(strbuf, lLen - 1))
Get_Setting = strbuf
End Function
End Function
'********************************************
'初期設定.iniをダミーで作成
'引数 : iniファイルのフルパス
'********************************************
Sub MakeSampleIni(ByVal strSample As String)
Dim fl As Long
'初期設定.iniをダミーで作成
'引数 : iniファイルのフルパス
'********************************************
Sub MakeSampleIni(ByVal strSample As String)
Dim fl As Long
'//テスト用サンプルiniファイルをオープン
fl = FreeFile
Open strSample For Output As #fl
fl = FreeFile
Open strSample For Output As #fl
'//データを書き込み
Print #fl, "'//// サンプルiniファイル"
Print #fl, "[MOJI_SECTION]"
Print #fl, "moji1=あいうえおかきくけこ"
Print #fl, "moji2=""さしすせそ たちつてと"""
Print #fl, "moji3="""""
Print #fl, ""
Print #fl, "[NUMBER_SECTION]"
Print #fl, "num1=1234"
Print #fl, "num2=abc"
Print #fl, "num3="""""
Print #fl, "'//// サンプルiniファイル"
Print #fl, "[MOJI_SECTION]"
Print #fl, "moji1=あいうえおかきくけこ"
Print #fl, "moji2=""さしすせそ たちつてと"""
Print #fl, "moji3="""""
Print #fl, ""
Print #fl, "[NUMBER_SECTION]"
Print #fl, "num1=1234"
Print #fl, "num2=abc"
Print #fl, "num3="""""
'//テスト用サンプルiniファイルをクローズ
Close #fl
Close #fl
End Sub
よろしければポチッと押してください