Excelで2つの数値をビット単位で比較したいけれど、やり方がわからない…そんな経験はありませんか?
ビット演算は「なんだか難しそう」と敬遠されがちですよね。でも、アクセス権のチェックやフラグ管理、複数条件の一括判定など、実務で役立つ場面は意外と多いんです。
この記事では、ExcelのBITAND関数の使い方を基本から丁寧に解説します。構文や引数はもちろん、実務での具体的な活用例、よくあるエラーの対処法、関連関数との使い分けまで網羅しているので、最後まで読んでみてくださいね。
ExcelのBITAND関数とは?
BITAND関数(ビットアンド関数)は、Excelで2つの数値のビット単位のAND演算(論理積)を行うための関数です。
「ビット単位のAND演算」とは、2つの数値を2進数に変換して比較する計算です。同じ位置のビットがどちらも1のときだけ1を返し、それ以外は0になります。
たとえば、5と12のビットANDを求める場合を見てみましょう。
- 5 を2進数にすると → 0101
- 12 を2進数にすると → 1100
- AND演算の結果 → 0100(= 10進数の4)
両方のビットが1になっている桁だけが残る、というイメージですね。
BITAND関数はExcel 2013以降で利用できます。お使いのバージョンが対応しているか、確認しておきましょう。
BITAND関数の構文と引数
基本構文
=BITAND(数値1, 数値2)
引数は2つとも必須です。省略するとエラーになります。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 数値1 | 必須 | AND演算を行う1つ目の数値(0以上の整数) |
| 数値2 | 必須 | AND演算を行う2つ目の数値(0以上の整数) |
どちらの引数にも、0以上かつ(2^48)-1以下の整数を指定します。この範囲を超えると#NUM!エラーになるので注意してくださいね。
48ビットというと大きく感じますが、10進数では281,474,976,710,655(約281兆)まで扱えるという意味です。実務でフラグ管理に使う範囲なら、まず気にしなくて大丈夫ですよ。
BITAND関数の基本的な使い方
まずはシンプルな使い方から見ていきましょう。
数値を直接指定する方法
セルに次のように入力します。
=BITAND(5, 12)
結果は 4 になります。
この計算を2進数で確認すると、次のとおりです。
- 5 = 0101(2進数)
- 12 = 1100(2進数)
- AND = 0100(2進数)= 4(10進数)
セル参照で指定する方法
A1セルに「13」、B1セルに「11」が入っている場合は、次のように書きます。
=BITAND(A1, B1)
結果は 9 です。
- 13 = 1101(2進数)
- 11 = 1011(2進数)
- AND = 1001(2進数)= 9(10進数)
DEC2BIN関数(10進数を2進数に変換する関数)を使うと、途中の2進数変換も確認できますよ。
=DEC2BIN(A1) → "1101"
=DEC2BIN(B1) → "1011"
慣れないうちは、計算用シートにDEC2BIN関数で2進数表記の列を並べておくと、結果を目で追いやすくなります。
BITAND関数の実務活用例
「ビット演算って実務で使うの?」と思った方もいるかもしれません。実は、フラグ管理やアクセス権チェック、複数条件の一括判定などで活躍するんです。ここでは具体的な4つの例を見ていきましょう。
活用例1: アクセス権限のチェック
たとえば、システムの権限をビットフラグで管理しているケースを考えてみましょう。
| ビット位置 | 権限 | 値 |
|---|---|---|
| 1桁目 | 閲覧 | 1 |
| 2桁目 | 編集 | 2 |
| 3桁目 | 削除 | 4 |
| 4桁目 | 管理 | 8 |
ユーザーの権限値が「7」の場合、2進数では「0111」です。つまり閲覧・編集・削除の権限を持っています。
このユーザーが「編集権限(= 2)」を持っているかを調べるには、次の数式を使います。
=BITAND(7, 2)
結果は 2 です。0より大きいので、編集権限があると判定できますね。
IF関数と組み合わせると、もっと分かりやすくなります。
=IF(BITAND(A2, 2) > 0, "編集可", "編集不可")
A2セルにユーザーの権限値を入れておけば、編集権限の有無を自動判定できますよ。
複数のユーザーの権限を一覧でチェックしたい場合は、こんな表を組み立てるのがおすすめです。
| ユーザー | 権限値 | 閲覧 | 編集 | 削除 | 管理 |
|---|---|---|---|---|---|
| 山田 | 15 | ○ | ○ | ○ | ○ |
| 佐藤 | 3 | ○ | ○ | – | – |
| 鈴木 | 5 | ○ | – | ○ | – |
各セルには =IF(BITAND($B2,1)>0,"○","-") のように書きます。数値部分はビット位置に合わせて 1, 2, 4, 8 と切り替えてくださいね。アカウント管理表をExcelで運用しているチームでは、このパターンがけっこう重宝しますよ。
活用例2: 複数フラグの一括チェック
商品の属性をビットフラグで管理している場合にも使えます。
| ビット | 属性 | 値 |
|---|---|---|
| 1桁目 | セール対象 | 1 |
| 2桁目 | 送料無料 | 2 |
| 3桁目 | 新商品 | 4 |
| 4桁目 | 限定商品 | 8 |
商品コード「5」(= 0101)は「セール対象」かつ「新商品」です。
「セール対象かつ送料無料」(= 3)の商品を抽出するには、次のように書きます。
=IF(BITAND(A2, 3) = 3, "対象", "対象外")
BITAND関数の結果がチェック値と一致すれば、すべてのフラグが立っていると判定できます。
ポイントは「> 0」と「= チェック値」の使い分けです。
BITAND(A2, 3) > 0→ セール対象 または 送料無料のどちらかが立っていればTRUEBITAND(A2, 3) = 3→ セール対象 かつ 送料無料の両方が立っていればTRUE
「いずれか1つでも該当」と「すべて該当」では条件が大きく変わるので、目的に合わせて選んでくださいね。
活用例3: データフィルタリングと件数集計
BITAND関数はSUMPRODUCT関数やSUM関数と組み合わせると、条件に合うデータの件数集計にも使えます。
たとえばA2:A100に商品の属性値が入っているとしましょう。「セール対象かつ新商品」(= 5)の商品件数を数える場合は、次のように書きます。
=SUMPRODUCT((BITAND(A2:A100, 5) = 5) * 1)
スピル対応のExcel(Microsoft 365、Excel 2021以降)なら、BITAND関数も配列に対応していて上の数式が自然に動きます。古いバージョンを使っている場合は、Ctrl+Shift+Enterで配列数式として確定してくださいね。
「特定の権限を持つユーザー数」「フラグが立っている案件件数」を出したい場面でも、同じ考え方で集計できますよ。
活用例4: 偶数・奇数の判定
ちょっとした応用ですが、BITAND関数を使うと数値が偶数か奇数かを判定できます。最下位ビット(1の位)が1なら奇数、0なら偶数というルールを使うわけですね。
=IF(BITAND(A2, 1) = 1, "奇数", "偶数")
ISODD関数(奇数判定)やMOD関数でも同じことはできます。それでも、BITAND関数の発想に慣れる練習として知っておくと便利ですよ。「ビットの1の位だけ取り出す」イメージをつかむのに役立ちます。
BITAND関数のよくあるエラーと対処法
BITAND関数で発生しやすいエラーをまとめました。実務で困ったときの早見表として活用してください。
#NUM! エラー
次のいずれかに該当すると#NUM!エラーになります。
- 引数に負の数を指定した場合
- 引数に(2^48)-1(= 281,474,976,710,655)を超える値を指定した場合
- 引数に小数を指定した場合
対処法: 引数には0以上の整数を指定してください。小数が入る可能性がある場合は、INT関数(小数点以下を切り捨てる関数)で整数に変換しましょう。
=BITAND(INT(A1), INT(B1))
外部システムからCSVで取り込んだデータでは、見た目は整数でも内部で小数になっているケースがあります。エラーが出たらまずINT関数でくるんで試してみてくださいね。
#VALUE! エラー
引数に文字列を指定すると#VALUE!エラーになります。空白セル参照や、見出し行を一緒に範囲指定してしまった場合に起きやすいエラーです。
対処法: セル参照の場合は、参照先が数値であることを確認しましょう。VALUE関数(文字列を数値に変換する関数)で数値に変換する方法もあります。
=BITAND(VALUE(A1), VALUE(B1))
数値のはずなのに#VALUE!が出る場合は、セル左上の緑の三角マークもチェックしてみてください。これは「文字列として保存された数値」の警告マークです。
#NAME? エラー
関数名のスペルミスや、Excel 2010以前のバージョンで使ったときに#NAME?エラーになります。
対処法: 関数名が「BITAND」と正しく入力されているか確認してください。古いバージョンで使う必要がある場合は、AND関数(論理AND)と混同していないかも見直しましょう。BITAND関数はExcel 2013以降の機能です。
結果がうまく合わないとき
エラーは出ないけれど期待した結果にならない、という場合は次の3点をチェックしてみてください。
- 引数の値を本当に2進数でイメージできているか(DEC2BIN関数で確認すると確実)
- 比較対象の値が「すべて立っているか(= チェック値)」と「いずれか1つ以上立っているか(> 0)」のどちらを判定したいのか
- ビット位置と桁の対応(1桁目=1、2桁目=2、3桁目=4、4桁目=8…)が合っているか
特に3つ目は、フラグ管理の表を作るときに混乱しがちなポイントです。「ビット位置 → 値」の早見表を別シートに用意しておくと安心ですよ。
他のビット演算関数との使い分け
Excelにはビット演算関数がいくつか用意されています。場面に応じて使い分けましょう。
| 関数 | 演算 | 説明 | 使いどころ |
|---|---|---|---|
| BITAND | AND(論理積) | 両方1のビットだけ残す | 権限チェック・フラグ抽出 |
| BITOR | OR(論理和) | どちらか1のビットを残す | 権限の付与・フラグ追加 |
| BITXOR | XOR(排他的論理和) | 異なるビットだけ残す | フラグの切り替え(トグル) |
| BITLSHIFT | 左シフト | ビットを左にずらす | 値の2倍・4倍計算 |
| BITRSHIFT | 右シフト | ビットを右にずらす | 値の半分計算 |
BITAND と BITOR の使い分け
BITANDは「両方立っているか確認する」、BITORは「どちらかを立てる(追加する)」のが基本の考え方です。
たとえば、ユーザー権限値が「3(閲覧+編集)」のときに「削除権限(=4)」を追加したいなら、BITORで合成します。
=BITOR(3, 4) → 7(閲覧+編集+削除)
そのうえで「削除権限を持っているか」を確認するときにBITANDが活躍する、という流れですね。「足し算がBITOR、確認がBITAND」と覚えておくと混乱しません。
BITAND と BITXOR の使い分け
BITXORは「同じ位置のビットが違っていれば1、同じなら0」を返す関数です。フラグのON/OFFを切り替える(トグルする)ときに便利です。
=BITXOR(7, 2) → 5(編集権限のビットだけ反転)
「権限を一時的に剥奪する」「設定を切り替える」用途ならBITXOR、「権限が立っているか確認する」用途ならBITAND、と使い分けましょう。
BITAND と AND関数の違い
名前が似ている AND関数 と混同しないように注意してください。AND関数は引数の論理値(TRUE/FALSE)がすべてTRUEならTRUEを返すもので、ビット単位の演算は行いません。
=AND(TRUE, FALSE)→ FALSE(論理値の判定)=BITAND(5, 12)→ 4(ビットごとの計算)
「ビット単位で扱いたいときがBITAND、条件式の組み合わせを判定したいときがAND」と覚えておきましょう。
まとめ
この記事では、ExcelのBITAND関数の使い方を解説しました。
- BITAND関数は2つの数値のビット単位のAND演算(論理積)を行う関数
- 引数は2つとも必須で、0以上(2^48)-1以下の整数を指定する
- アクセス権チェック・フラグ管理・データ集計・偶数奇数判定など、実務でも幅広く活用できる
- #NUM!や#VALUE!エラーが出たら、INT関数やVALUE関数で型を整えるのがコツ
- BITOR(フラグ追加)やBITXOR(フラグ切替)と組み合わせると、フラグ管理が一気に強力になる
ビット演算は一見むずかしそうに見えますが、BITAND関数を使えばExcelで手軽に計算できます。まずは権限チェックや偶数・奇数判定など、身近な使い方から試してみてくださいね。
