2016-04-27 7 views
2

私はおそらく簡単な質問をしていますが、それは私の心を吹いています。私はそれを少しリファクタリングするためにいくつかのコードを持っていますが、何を意味するかもし* Then *そして条件

If (j > 0) Then greatThanPrec = greatThanPrec And (signalAmplArray(i) > signalAmplArray(j)) 

は私がどのように基本的なIf Then else作品を知っていると思う。この文で著者は考えているかを把握カントが、その後、後A = Aのようなものである理由実現カント、そしてありますAND C/C++のような短い状態かもしれませんか?

+1

だろう

greatThanPrec = greatThanPrec And True 'greatThanPrec does not change its value 
greatThanPrec = greatThanPrec And False 'greatThanPrec becomes false 

AND:2つのオプションを取得します。そして、条件が満たされれば、Aの値をAとBに変更します。 –

+0

'And'、' Or'はブール演算子(True/False)です。 'greatThanPrec'はここではブール型です。 – PatricK

+2

@PatricK VBAでは、 'And'と' Or'はビット単位です。論理的なコンテキストではうまく動作しますが、VB.NETの 'AndAlso'や' OrElse'とは​​対照的に、本質的にビット単位です。 – GSerg

答えて

9

この特定のAndは、If Thenとは関係ありません。

Then以降のコードは、signalAmplArray(i) > signalAmplArray(j)に応じてgreatThanPrecを更新するだけです。 greatThanPrecgreatThanPrecsignalAmplArray(i) > signalAmplArray(j)の両方がTrueの場合はTrueのままです。それ以外の場合はFalseになります。

よく見るには、signalAmplArray(i) > signalAmplArray(j)を可能な値に置き換えてください。いいえ、それは**論理**(ビット単位)ですあなたはそれをリファクタリングしたい場合は、それが

If (j > 0) Then 
    If Not (signalAmplArray(i) > signalAmplArray(j)) Then 
    greatThanPrec = False 
    End If 
End If 
+0

ここでANDは論理コネクターですか、それともThenの後に2つのラインをConnetしますか? – Moosli

+2

'And'は2行を決してつなぎません。 VBAで ':'を使用すると、複数の文を1行にまとめることができます。つまり、副作用のあるブーリアン関数を持つコードを書くことができ、 '= CauseEffects()And CauseMoreEffects()'のように1行で呼び出すことができますが、これはここで起こっていることではなく、悪いコードです特にVBAを理解していない人(短絡していない人)のためのものです(http://stackoverflow.com/q/3242560/11683)。 – GSerg

+0

@Moosli theそしてここには論理的な結合yesがあります。 –

関連する問題