プロが教えるわが家の防犯対策術!

Excel-VBA初心者です。初歩的なことをお聞きします。以下のプログラムで、2)の場合がエラーにならないのは何故でしょうか。引数は文字列データである必要があると思うのですが、数字でもエラーが出ません。本来は型変換をする3)が正しいと思うのですが...。お詳しい方、解説お願いいたします。

------------
Sub test()
Dim str As String
Dim num As Long

str = "あいうえお"
num = 100
'1)
MsgBox "str:" & str
'2)
MsgBox "num:" & num
'3)
MsgBox "CStr(num):" & CStr(num)
End Sub

A 回答 (5件)

着眼点が素晴らしいと思います。

ご指摘の通り 3) の明示的に型変換した記述が最良だと私も考えていますし、普段から明示的な型変換をした記述を私は心掛けています。
MsgBox 関数は言語の機能ですが、暗黙の型変換は Microsoft 社製 Excel の持つ機能です。そのため VBA をサポートする Excel 互換の他社製ソフトでは暗黙の型変換機能が無いため 2) はエラーになります。

また、暗黙の型変換を特にループ内で多用すると顕著に処理が遅くなります。こちらの方が実例としては多いので取り上げますが、ありがちな例は Renge オブジェクトの Cells プロパティーを使ったケースで
Cells(1, "A")
と記述した場合です。リファレンス上、引数には数値が指定されていますが、列番号では何列目なのか分かり難いからと言う理由で文字列で指定する方がほとんどだと思います。この場合、暗黙の型変換機能が働き、数値に型変換してから実行されますので、暗黙の型変換の回数が多ければ多いほど実行速度が遅くなっていきます。
私の場合はループ手前で
Const A As Long = 1
と記述しておき、ループ内で
Cells(1, A)
と記述しています。

Microsoft 社製 Excel で暗黙の型変換を使うのは間違った事でも悪いことでもありませんし、否定をするつもりもありません。存在する機能ですから使っていただいても何も悪くはありませんし、難しい事は考えずに動けば良いと考える方もいらっしゃいます。最終的には記述する方の考え方次第なので。

暗黙の型変換機能を使う場合は、使っていると言う意識が有りさえすれば、それで良いと思います。失礼しました。
    • good
    • 0

暗黙の型変換ですね。



文字列とその他の型との変換 (Visual Basic)
https://learn.microsoft.com/ja-jp/dotnet/visual- …
    • good
    • 0

VBAの仕様だからですね。

    • good
    • 0

「暗黙の型変換」とか「自動型変換」と呼ばれる機能が働いたから。


>"num:" & num
&演算子により文字列の結合であると解釈できるので処理系がnumを文字列に変換したのでしょう。
    • good
    • 0

「暗黙の型変換」というものがあって、特定の条件が揃ったときに自動で型変換されます。



MsgBox "num:" & num

MsgBox "num:" & CStr(num)
という暗黙の変換がおこなわれています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A