Excelのvbaにおいて2つの動的配列を同時に初期化(redimされているか)どうか判定するときに sgn関数を使うとおかしな現象が起こります。 a,bの動的配列を2つ宣言して、redimを行う前あるいはeraseで開放した後に sgn(a)=0とsgn(b)=0の結果を評価すると共にTrueが返ってきますが (Sgn(a) = 0) And (Sgn(b) = 0) を評価すると なぜかFALSEが返ってきます。 (True And True = FALSEとかいう矛盾した結果が返ってくる) sgn(a)=0、sgn(b)=0の結果をそれぞれAbool,Bboolというbool型変数に格納してから Abool And Bboolとすれば、正しい評価は可能なのですが、 (Sgn(a) = 0) And (Sgn(b) = 0) がFALSEになる理由がわかりません。 この現象が起こる理由を押して下さい。 この現象が発生しているパソコンは2台あります。 OSはWindows 7の32bitと64bit Excel 2013 32bit (2台とも) 以下はサンプルコードです。 Public Sub test() Dim a() As Integer Dim b() As Integer If Sgn(a) = 0 Then MsgBox "配列aは初期化されていません。" If Sgn(b) = 0 Then MsgBox "配列bは初期化されていません。" If (Sgn(a) = 0) And (Sgn(b) = 0) Then MsgBox "配列a,bは両方共初期化されていません。" Else MsgBox "配列a,bはいずれかが初期化されています。" End If End Sub
↧