アクセス数
健康情報 ⇒ どこへ向かって・・・ ⇒ VBAトップ ⇒ 計算あれこれ
条件によって計算を単純化するには
例えば、a = 1, b = 2 であるとき、
a = a は真
a = b は偽
b = a + 1 は真
といったようなことになります。
真(True)は「-1」
偽(False)は「0」
と、VBAでは決まっていますので、これを計算式に利用することができます。
b = b - (a = 1)
この式では、a = 1であればbの値が1つ増えます。
b = b - (-1) ⇒ b = b + 1
a = 1以外であればbの値は変化しません。
スイッチを使って状態を把握・制御するには(ビット演算)
状態を把握、制御するためには、一定の場所にその状態を記憶しておかなければなりません。
数字を0か1に分けてスイッチの役割を持たせます。
たった4つのビットで16種類とれます
10進数⇔2進数⇔16進数
0⇔0000⇔ 0
1⇔0001⇔ 1
2⇔0010⇔ 2
3⇔0011⇔ 3
4⇔0100⇔ 4
5⇔0101⇔ 5
6⇔0110⇔ 6
7⇔0111⇔ 7
8⇔1000⇔ 8
9⇔1001⇔ 9
10⇔1010⇔ a
11⇔1011⇔ b
12⇔1100⇔ c
13⇔1101⇔ d
14⇔1110⇔ e
15⇔1111⇔ f
16進数は Hex([十進数])関数で分かります。
&HF のように、先頭に「&H」を付けると、それが16進数であると認識されます。
4ビットで16通り、Byte型変数(8ビット)を使えば、一つの事柄に対して256通りの状態を記憶できます。
違う事柄に対して一つ一つオン、オフの関係を持たせると、8ビットで8種類です。
例えば
&HFFは、2進数で11111111 と、1が8個並んだ状態です。
そのうち、右から3番目の1を0に変更したい場合、
結果は11111011 となります。⇔&HFB
知りたいのは&HFBではなく、右から3番目のスイッチが任意のタイミングでオンかオフかということとすると、使い方としては、
まず、各ビットを16進数に直します。
1(&H80)1(&H40)1(&H20)1(&H10)1(&H8)1(&H4)1(&H2)1(&H1)
となり、右から3番目(&H4)をまずオフにします。
X = &HFF xor &H4
Xor(排他的論理和)を使うことによって、特定のビットの状態を入れ替えることができます。戻すときも同じ操作です。
後で、他のビット(例えば7番目とか5番目とか)の状態に関わらず、
Result = Not(X) And &h4
とすると、右から3番目のビットが1の場合には0、0の場合には4がResultに入ります。
Not()で判定したいものを反転させた後、And(論理輪)を使います。
※ビットの組み合わせにより、更に複雑な判定もできます。
※VBAでは、シフト演算 (ビットを全体的に横にずらす:01001001⇒10010010←左に1桁ずらした。2倍、4倍、8倍などの計算を高速化)など高度な機能は備えていません。 普通に計算しましょう。