見出し画像

C言語風なんちゃって複合書式(VBA)

 VBAでは、数値などの結果を説明とともに出力する場合、文字列や変数を&でつなげて書くことになります。例えば、「変数1の値は3.14、変数2の値は2.72であった。」という文字列を作る場合、

'VBA
dim var1, var2, str
var1 = 3.14
var2 = 2.72
str = "変数1の値は" & var1 & "、変数2の値は" & var2 & "であった。"
MsgBox str

'==>「変数1の値は3.14、変数2の値は2.72であった。」

などとしなければなりません。""や&が繰り返し出てくるのでわかりにくいです。
 C言語やC#言語ではtring.Formatメソッドなどで複合書式が使えるので

//C#
int var1 = 3.14, var2 = 2.72;
string form = "変数1の値は{0}、変数2の値は{1}であった。";
string s = string.Format(form, var1, var2);
Console.WriteLine(s);

//==>「変数1の値は3.14、変数2の値は2.72であった。」

というように、少しわかりやすくなります。
 そこでVBAでも類似の方法が使えるように関数を作りました。

Public Function strForm(bstr As Variant, ParamArray estr() As Variant) As Variant
    Dim ret As Variant
    ret = bstr
    Dim i As Long
    For i = 0 To UBound(estr)
        ret = Replace(ret, "{" & i & "}", estr(i))
    Next
    strForm = ret
End Function

これをつかうと

'VBA
dim var1, var2, str, sform
var1 = 3.14
var2 = 2.72
sform = "変数1の値は{0}、変数2の値は{1}であった。"
str = strForm(sform, var1, var2)
MsgBox str

'==>「変数1
の値は3.14、変数2の値は2.72であった。」

とできて、ややこしさは少しはマシになります。

以上です。

#VBA , #Excel , #format

応援してやろうということで、お気持ちをいただければ嬉しいです。もっと勉強したり、調べたりする糧にしたいと思います。