StrConv関数とライス小の大盛り

Excel には StrConv関数という、文字変換用関数があります。
例えば以下のような感じです。

Sub StrConvSample()
    MsgBox StrConv("バナナ", vbWide)
End Sub

f:id:Infoment:20180811143244p:plain

String(文字)Convert(変換)で、「バナナ」が vbWide つまり全角の「バナナ」に変換されたわけです。

ところでこの関数、指定文字列の中身を選択的に変換することはできません。つまり半角にするなら全部半角、全角なら全て全角になります。従って処理の順番が変われば、変換結果も変わってきます。

Sub StrConvSample()
    MsgBox StrConv(StrConv("バナナとリンゴとミカン", vbWide), vbNarrow)
End Sub

f:id:Infoment:20180811144421p:plain

Sub StrConvSample()
    MsgBox StrConv(StrConv("バナナとリンゴとミカン", vbNarrow), vbWide)
End Sub

f:id:Infoment:20180811144519p:plain

ここまで、当然と言えば当然の結果です。
参考までに、この処理は引数を足し算で指定することが出来ます。
↓半角化+大文字化

Sub StrConvSample()
    MsgBox StrConv("aBc", vbNarrow + vbUpperCase)
End Sub

f:id:Infoment:20180811145035p:plain

ただし相反する二つの引数、例えば半角化と全角化を同時に指定した場合は、エラーになるので御注意ください。

Sub StrConvSample()
    MsgBox StrConv("バナナとリンゴとミカン", vbNarrow + vbWide)
End Sub

f:id:Infoment:20180811202447p:plain


ところで今回のテーマは、↓を思い出したのが切っ掛けでした。
matome.naver.jp

そもそも、以下はどのように定義されているのでしょうか。

  • 大(盛り)

大盛が2人前である場合、単に並盛を2つ注文することとの差別化が難しい。
ということで勝手に、次の通り定義してみました。

  • 半 ⇒ 0.50倍(1/2倍) 例)半ライス、半チャーハンなど
  • 小 ⇒ 0.75倍(3/4倍) 例)小ライス ※店舗によっては、半=小の場合もある
  • 並 ⇒ 1.00倍
  • 大 ⇒ 1.50倍(3/2倍) 例)大ライス、ラーメン大盛など

この定義を正とした場合、相反する引数(?)ではあるものの、次式が成立します。
 半ライスの大盛=大盛ライスのハーフ(半)=並盛の0.75倍

この計算式を見て、バカバカしさ半分と共に、中々面白いなと思いました。
なぜなら半ライスの大盛は小ライスと同じであり、少なくとも「1杯は食べられないが、1杯弱は食べたい気分」が見て取れます。

一方で大盛ライスのハーフも同じ量でありながら、「一旦大盛にしたうえで、半分にする」意図が伝わりにくいです。注文の受け手に「この人、一体何考えてんだ?」といった悪感情を与える恐れがあります。
(とてもお腹が空いていたため、勢いで「大盛」と言ったものの、急に弱気になって「・・・のハーフ」と続けてしまったか)。

※共に私見です。あくまで。

世の中には、順序を入替えると得られる結果が正反対になることがあるため、時に注意が必要です。また一方で、最終的な結果が同じでありながら、順番を変えることで、与える印象が変わってしまう場合もあるようです。文章も会話も、コードも、受け手のことを考えた構成が重要だなと思った次第です。

今回のまとめは、かなり強引でした。

参考まで。