tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル数値の1と文字列の"1"が同じになる理由
記事No16597
投稿日: 2020/12/06(Sun) 19:08
投稿者ヘンリー
私は、VB4.0、5.0、6.0を少し経験したことがございます。

しばらくプログラミングから離れていて、
最近ExcelのVBAを少しやっています。

自分の勉強のために、
とあるVBAの掲示板の投稿に対して、
回答をして差し上げようと思い、
解説用に簡単なコードを作成ていました。
そこで、どうしても納得のいかないことが発生しました。

現在は、VB4.0、5.0、6.0の環境がないので
試すことができず、こちらのVBの掲示板に
質問をさせていただいた次第です。
もし、VB6.0なら「数値の1と文字の列が等しくない」と
判定されるのでしょうか。


私の中では、VBもVBAも以下のコードなら
変わらないと思っているのですが、
どうしても、数値の1と文字列の"1"が
等しく扱われる理由がわかりません。


お分かりの方がいらっしゃいましたら、
ご享受して頂けないでしょうか。
※VB6.0や、VB2005以降だと数値と文字が違うと
判断するかどうかだけでも、構いませんので、
教えていただけるとありがたいです。

何卒宜しくお願い致します。

Sub Sample()
    Dim a As String
    Dim b As Integer
    
    a = "1"
    b = 1
    
  '↓本来、If CStr(b) = a Thenの様に
  ' 型を合わせてから比較、と書くべきとは思うのですが…
    If b = a Then  
    'If文の判定結果がTrueになる理由がどうしてもわかりません
        Debug.Print True 
    Else
        Debug.Print False
    End If
    
    'ここまでのコードで、数値1と文字列"1"が等しく扱われているので、
    '以下のコードを追加したところ、変数aは文字列演算(a+"1"="11")、
    '変数bは数値演算(b+1=2)されています。
    a = a + "1"
    b = b + 1
    
    Debug.Print a
    Debug.Print b

End Sub

[ツリー表示へ]
タイトルRe: 数値の1と文字列の"1"が同じになる理由
記事No16599
投稿日: 2020/12/06(Sun) 19:14
投稿者ヘンリー
大変申し訳ございません。

誤字の修正をしていたつもりが、
誤って投稿されており、2重投稿となってしまいました。

[ツリー表示へ]
タイトルRe: 数値の1と文字列の"1"が同じになる理由
記事No16600
投稿日: 2020/12/07(Mon) 09:53
投稿者みい
「暗黙の型変換」「暗黙的な型変換」と呼ばれているものですね。
型が異なっていたら自動的に型変換が行われます。

VB.NETでは「Option Strict」をOnに設定することで暗黙の型変換を禁止できます。

[ツリー表示へ]
タイトルRe^2: 数値の1と文字列の"1"が同じになる理由
記事No16603
投稿日: 2020/12/14(Mon) 11:02
投稿者ヘンリー
> 「暗黙の型変換」「暗黙的な型変換」と呼ばれているものですね。
> 型が異なっていたら自動的に型変換が行われます。
>
> VB.NETでは「Option Strict」をOnに設定することで暗黙の型変換を禁止できます。

返信が遅くなり申し訳ありません。
暗黙の型変換、Option Strictについても、
魔界の仮面弁士さんと合わせて、
勉強させて頂きました。

ありがとうございます。

[ツリー表示へ]