具体的には条件分岐の代用とか。探したところ、研究員の津田氏のブログ「津田の開発な日記」にて条件分岐を使わずにmax/min関数を実現する方法というものが公開されていた。b));}これをVBAで書くとこうなる。FunctionこのC言語の例では比較演算の真値が1となるため正負反転を行っているが、VBでは真値が-1となる(偽はいずれも0)ので、正負の反転は必要ない。なり、ちゃんとmax関数としての機能を果たしている。min関数は、このmax関数のコードの不等号を反転するか、あるいは最初のaをbにするだけでいい。Functionちなみに先のブログによれば、不等号の部分は条件分岐になっていない(アセンブラコード上では分岐命令を使用していない)、とのこと。C言語での話なので、VBでどうなってるかは不明。分岐命令を使っているとしたら動作は遅くなるかもしれない。最初の予想に反してXORだけで条件分岐の代わりをすることは難しいが、他の演算と組み合わせて条件分岐の代わりになる、ということは分かった。要は偶数回出現した値は消えて奇数回出現した値は残るんだから、以下の計算で中央値が求められるはずだ。medianA・B・C・最大値・最小値の5つをXORすることで、最大値と最小値はそれぞれ2回(偶数回)、中央値は1回(奇数回)だけ演算することになり、中央値のみが残る。Functionできた。これでもちゃんと動くが、冗長すぎる。演算の優先順位を下げても演算結果に影響しないことに気付いた(結合法則)。括弧の外に出しても演算結果は変わらない。何度もXORされていることになる。tmpMin))としても演算結果は同じである。ところで先に述べたとおり、同じ値を奇数回XORすると元の値に戻る。3回も繰り返す必要はない。tmpMin))A・B・C・3値の最大値・3値の最小値をXORするはずだったのに、2行目と3行目の内容が変わってしまった。それでも演算結果は変わらない。XORする」、ということだ。