VB: sprintf もどき

指定したフォーマットで文字列を作る VB6 用関数。

Public Function FormatText(ByVal Pattern As String, ParamArray Params() As Variant) As String
    Dim Values()        As String
    Dim Pos             As Long
    Dim I               As Long
    
    Values = Split(Pattern, "%%")
    For I = 1 To UBound(Values) Step 2
        Pos = InStr(Values(I), ":")
        If Pos < 1 Then
            Values(I) = CStr(Params(Val(Values(I)) - 1))
        Else
            Values(I) = Format(Params(Val(Left(Values(I), Pos - 1)) - 1), Mid(Values(I), Pos + 1))
        End If
    Next
    
    FormatText = Join(Values, "")
End Function

Pattern に書式を指定し、以下にパラメータを指定する。Pattern 中に %%1%%、%%2%%、……と書くと、パラメータの 1 つめ、2 つめが埋め込まれる。
埋め込む部分の書式を指定したい場合は、数字の後に、コロンをはさんで書式を指定できる。この書式は Format 関数の指定に従う。
以下、利用例。

FormatText("今日の日付は %%1%% ですよ。", Date)
         → 今日の日付は 2005/06/03 ですよ。
FormatText("今日の日付は %%1:yyyy年mm月dd日%% ですよ。", Date)
         → 今日の日付は 2005年06月03日 ですよ。
FormatText("今月の収支は %%1:###;(###)%% まんえーん。", 20)
         → 今月の収支は 20 まんえーん。
FormatText("今月の収支は %%1:###;(###)%% まんえーん。", -20)
         → 今月の収支は (20) まんえーん。