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件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
「暗黙の型変換」というものがあって、特定の条件が揃ったときに自動で型変換されます。
MsgBox "num:" & num
は
MsgBox "num:" & CStr(num)
という暗黙の変換がおこなわれています。
No.2
- 回答日時:
「暗黙の型変換」とか「自動型変換」と呼ばれる機能が働いたから。
>"num:" & num
&演算子により文字列の結合であると解釈できるので処理系がnumを文字列に変換したのでしょう。
No.4
- 回答日時:
No.5
- 回答日時:
着眼点が素晴らしいと思います。
ご指摘の通り 3) の明示的に型変換した記述が最良だと私も考えていますし、普段から明示的な型変換をした記述を私は心掛けています。MsgBox 関数は言語の機能ですが、暗黙の型変換は Microsoft 社製 Excel の持つ機能です。そのため VBA をサポートする Excel 互換の他社製ソフトでは暗黙の型変換機能が無いため 2) はエラーになります。
また、暗黙の型変換を特にループ内で多用すると顕著に処理が遅くなります。こちらの方が実例としては多いので取り上げますが、ありがちな例は Renge オブジェクトの Cells プロパティーを使ったケースで
Cells(1, "A")
と記述した場合です。リファレンス上、引数には数値が指定されていますが、列番号では何列目なのか分かり難いからと言う理由で文字列で指定する方がほとんどだと思います。この場合、暗黙の型変換機能が働き、数値に型変換してから実行されますので、暗黙の型変換の回数が多ければ多いほど実行速度が遅くなっていきます。
私の場合はループ手前で
Const A As Long = 1
と記述しておき、ループ内で
Cells(1, A)
と記述しています。
Microsoft 社製 Excel で暗黙の型変換を使うのは間違った事でも悪いことでもありませんし、否定をするつもりもありません。存在する機能ですから使っていただいても何も悪くはありませんし、難しい事は考えずに動けば良いと考える方もいらっしゃいます。最終的には記述する方の考え方次第なので。
暗黙の型変換機能を使う場合は、使っていると言う意識が有りさえすれば、それで良いと思います。失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBAに関して 2 2023/11/09 20:57
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) マクロについて教えてください。 下記のマクロは以前教えて頂いたマクロです。 マクロを実行すると 指定 6 2024/01/17 17:50
- Visual Basic(VBA) Excelセルに入力された文字の色を変える方法を教えてください 2 2023/12/10 07:42
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
Excel VBA 定義されたプロージャ名、関数名の取得
Visual Basic(VBA)
-
VBA レジストリの値の読み方について教えてください
Visual Basic(VBA)
-
-
4
Vba 実数および実数タイプの変数について教えてください
Visual Basic(VBA)
-
5
VBAに詳しい方教えてください。
Visual Basic(VBA)
-
6
Sub 要具ライフ() ActiveSheet.Cells.Find(what:=TOPゴム")."
Visual Basic(VBA)
-
7
Vba SelStart、SelLen教えてください教えてください
Visual Basic(VBA)
-
8
VBAのコードを教えてください
Visual Basic(VBA)
-
9
以下のコードを実行しても、オブジェクト変数または、withブロック変数が設定されていませんとエラーが
Visual Basic(VBA)
-
10
VBのWPFとはなんでしょうか?
Visual Basic(VBA)
-
11
エクセルVBAにて =A1=B1とすれば A1とB1のセル内容が一緒だった場合 TRUE 違っていれ
Visual Basic(VBA)
-
12
現在のブックを閉じないで、マクロ抜きの(現在のブックの)コピーを作成したい
Visual Basic(VBA)
-
13
VBA SaveChanges 上書きされない
Visual Basic(VBA)
-
14
エクセルVBAについて
Visual Basic(VBA)
-
15
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
16
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
17
VBEを開くのにコマンド名が「Visual Basic」な理由はなぜ?
Visual Basic(VBA)
-
18
Cellsのコードが打てません
Visual Basic(VBA)
-
19
ExcelVBAのFindFirstエラーについて
Visual Basic(VBA)
-
20
引数に数値、文字列の混在
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
VB6で16進のXOR演算
-
マンセル⇔XYZ,RGB変換式或いは...
-
線対称の角度を求める
-
Excel-VBAのmsgBox()の不思議
-
英単語をカタカナに変換するス...
-
10進数を2進数に変換するプログ...
-
3のつく数字と3の倍数のみを表...
-
10進数をBCDに変換する方法
-
FortranをC++(VC++)へ変換
-
EUCからUTF-8へのコード変換
-
MATLAB用のプログラムをScilab...
-
画像ファイルの変換
-
visual c++の文字コード判別
-
SJIS⇔UTF-8の文字コード...
-
VBAを使って二進法計算
-
分を時間に変換するプログラム
-
ImageMagickでPSDを変換するには。
-
C#で漢字→ローマ字を変換
-
数値英単語変換プログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Excel-VBAのmsgBox()の不思議
-
Mac 乗数の入力方法
-
家電製品の電力周波数を変える機械
-
3のつく数字と3の倍数のみを表...
-
bmp→jpgに、jpg→bmpに
-
10進数をBCDに変換する方法
-
【EXCEL】カナ、ひらがなを英字...
-
StrConvの使い方について教えて...
-
分を時間に変換するプログラム
-
画像ファイル変換(Tiff→PDF)
-
マンセル⇔XYZ,RGB変換式或いは...
-
C/C++→JAVAに変換するツール
-
VB6からVB2010への変換について
-
c++でmatからvectorへの変換の...
-
DOSコマンドでの文字コード変換...
-
VB.NETをJavaに変換するツール...
-
SJIS⇔UTF-8の文字コード...
-
なぜ通信には16進数文字列が使...
-
C#でのpngからbmpへの変換について
おすすめ情報