アクセス数
健康情報 ⇒ どこへ向かって・・・ ⇒ VBAトップ ⇒ レジストリ
一人一人設定事項が異なっていたり、表に出さない細かな設定など、レジストリに格納すると便利です。
サンプル
'/*----------------------------------------------------'日付によって消費税率を変更させるプログラム(標準モジュール)
'----------------------------------------------------*/
Option Explicit
Public Const gcstrAppName As String = "VBA解説"
Public Function setTaxRate(sglTaxRate As Single, Optional dtTargetDate As Date =
1) As String
RegS "TAX_RATE", CStr(dtTargetDate), CStr(sglTaxRate)
setTaxRate = "完了しました"
End Function
'第三引数(intFraction)⇒0(切捨て)1(切り上げ)2(四捨五入)
Public Function TaxEx(price As Single, dtTargetDate As Date, Optional
intFraction As Integer = 0) As Integer
'前処理
TaxEx = price
Dim varResult As Variant
'バリアント型配列にレジストリの値を格納
varResult = GetAllSettings(gcstrAppName, "TAX_RATE")
Dim i As Integer
Dim dtDate As Date
Dim prevDate As Date
For i = 0 To UBound(varResult)
'日付を一時的に格納
dtDate = varResult(i, 0)
If dtTargetDate >= dtDate Then
'前回日付より経過しているかどうか判定
If dtDate >
prevDate Then
'計算
'端数処理(blnFraction)
If intFraction = 0 Then '切り捨て
TaxEx = Int(price * varResult(i, 1))
ElseIf intFraction = 1 Then '切り上げ
TaxEx = Int(price * varResult(i, 1) + 0.99)
Else '四捨五入
TaxEx = Int(price * varResult(i, 1) + 0.5)
End If
prevDate = dtDate
End If
End If
Next
End Function
'レジストリセーブ
Sub RegS(strSection As String, strKey As String, strSetting As String)
SaveSetting gcstrAppName, strSection, strKey, strSetting
End Sub
'レジストリ読み込み(一応作成)
Function RegG(strSection As String, strKey As String) As String
RegG = GetSetting(gcstrAppName, strSection, strKey)
End Function
上の例では、functionプロシージャによって、任意の日付に対する消費税率を設定することができます。
excelのシートで設定し、利用することができます。
設定例
=SETTAXRATE(1.5,"10/04/01")
2010年4月1日より税率50%という設定
設定完了後、式を設定したセルには「完了しました」と表示されるので、消してしまって構いません。
利用時には、
=TAXEX(100,"10/05/01",1)
などとすると結果が返ります。
TAXEX( [税抜き価格] , [対象日付] , [0(切り捨て)1(切り上げ),2(四捨五入)※初期値は0])
それぞれの引数は他のセルを参照してもよいです。
例:=taxex(a1,b1,1)
●レジストリへの保存
SaveSetting appname, section, key, setting
同じキーであれば上書きされます。
●レジストリからの読み出し
GetSetting(appname, section, key[, default])
●レジストリの内容を全て読み出す
GetAllSettings(appname, section)
variant型変数(二次元配列)に格納できます。
⇒variant([0〜],0) = key
⇒variant([0〜],1) = setting
※読み込み方は上のサンプルを参照してください。
●レジストリの内容を消す
DeleteSetting appname, section[, key]
レジストリの内容の保管場所
スタート⇒ファイル名を指定して実行⇒regedit(Enter)
HKEY_CURRENT_USER
⇒Software
⇒VB and VBA Program Settings
⇒appname
⇒section
⇒key
※見るだけにして、変更などはしない方が無難です。
様々な値をレジストリに登録することによって、ユーザーごとの設定が可能となりますので、使い道は多くあります。また、設定の変更を配布したい場合にも、レジストリだけを修正するようなファイルで賄えるなら、Excel上で独自に設定した項目などが変更される恐れも無いため有効です。
さらに、いくつものファイルにまたがって利用できる点も大きいです。他のファイルの状況を保存しておくことによって、振る舞いを変えるような処理もできます。