Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


21977 / 76734 ←次へ | 前へ→

【60143】Re:if関数を使った結果の参照について
発言  ichinose  - 09/1/30(金) 6:48 -

引用なし
パスワード
   おはようございます。

>私の挙げた例が良くなかったようです。
そうですね!!最初から、このわかりやすい投稿がほしかったですね

エラーが起きる状態に当該シートのデータを設定した状態
(例 セルB1を""にしておけば、セルA1も数式で""になる)で
以下のコードを実行してみてください。

Sub test()
  Dim i  As Integer  'loop counter
  Dim sum As Integer  'sum
 
  For i = 1 To 5
   
    MsgBox TypeName(Cells(1, (i - 1) * 2 + 1).Value)
    
    sum = sum + Cells(1, (i - 1) * 2 + 1).Value
  Next
  
End Sub

エラーが発生する直前の Msgboxの変数の型は String ですよね?

確かに

sub samp1()
  Dim a As Long
  a = a + ""
end sub

とすれば、「型が一致しない」というエラーが発生します。


次に数式の結果を値に変換してから 変数の型を調べてみると

Sub test2()
  Dim i  As Integer  'loop counter
  Dim sum As Integer  'sum
 
  For i = 1 To 5
    Cells(1, (i - 1) * 2 + 1).Value = Cells(1, (i - 1) * 2 + 1).Value
    
    MsgBox TypeName(Cells(1, (i - 1) * 2 + 1).Value)
    
    sum = sum + Cells(1, (i - 1) * 2 + 1).Value
  Next
  
End Sub

表示される変数の型は「Empty」となって、エラーになりません。

これも簡単コードで検証すると、確かにエラーになりません。

Sub Samp2()
  Dim a As Long
  Dim b As Variant
  b = Empty
  a = a + b
  MsgBox a
End Sub


数式で設定した""と値で設定した""では、セルのValueプロパティの型が
違っていることが エラーになる ならないの原因になっています。

VBAは、型の違う変数や定数の演算に対して親切です。

例1

sub aaa()
 dim b as long
 b=b+"5"
 msgbox b
end sub

sub bbb()
  dim c as string
  c= c & 5
  msgbox c
end sub

↑こんなコードは、型を変換して結果を出してくれます。
私が、VBAをはじめる前に使っていたBasicでは、
「型が一致しない」といずれもエラーになりました。

型変換してくれるとコード記述は楽になりますけど、
やってくれるとものだと思い込んでいるとたまにこういう落とし穴がありますから、
注意してください。


エラーをなくすには、

    sum = sum + Val(Cells(1, (i - 1) * 2 + 1).Value)

このようにしておくとよいでしょう
4 hits

【60138】if関数を使った結果の参照について qunlo 09/1/29(木) 20:17 質問
【60139】Re:if関数を使った結果の参照について ponpon 09/1/29(木) 20:35 発言
【60141】Re:if関数を使った結果の参照について qunlo 09/1/30(金) 4:15 お礼
【60143】Re:if関数を使った結果の参照について ichinose 09/1/30(金) 6:48 発言
【60145】Re:if関数を使った結果の参照について ponpon 09/1/30(金) 10:32 発言
【60151】Re:if関数を使った結果の参照について qunlo 09/1/30(金) 14:23 お礼
【60152】Re:if関数を使った結果の参照について にぃ 09/1/30(金) 14:32 発言
【60168】Re:if関数を使った結果の参照について qunlo 09/2/1(日) 8:10 お礼
【60140】Re:if関数を使った結果の参照について ゆみこん 09/1/29(木) 21:06 発言
【60142】Re:if関数を使った結果の参照について qunlo 09/1/30(金) 4:22 お礼
【60144】Re:if関数を使った結果の参照について ゆみこん 09/1/30(金) 9:10 発言

21977 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free