「ユーザーごとに『閲覧』『編集』『削除』の権限を組み合わせて1つの数値にまとめたい…」
スプレッドシートで権限管理台帳やタグ管理シートを作っていると、複数のフラグを1つの数値に合成したい場面が出てきますよね。フラグの数だけ列を増やしてしまうと、後からシステムに渡しづらくなることもあります。
そんなときに便利なのがGoogleスプレッドシートのBITOR関数です。2つの数値をビット単位でOR演算して、複数のフラグを1つの数値にまとめられますよ。
しかも結果は数値型で返るので、IF関数やARRAYFORMULAと組み合わせて一覧を一括処理できます。Excelとも互換性があるため、ファイルをやり取りする現場でも安心して使えますね。
この記事では、スプレッドシートのBITOR関数の基本から権限の付与・タグの合成・複数列のフラグ集計まで解説します。BITAND・BITXORとの使い分けやエラー対処法にも触れていきますよ。
BITOR関数とは?
スプレッドシートのBITOR関数(ビットオア関数)は、2つの数値をビット単位でOR演算する関数です。結果は10進数の数値で返ります。
「ビット単位のOR演算」とは、2つの数値を2進数に変換し、同じ位置のビットを比べる計算のことです。どちらか一方でも1なら、その桁は1になります。
たとえば、5と10のビットORを求める場合を見てみましょう。
- 5 を2進数にすると →
0101 - 10 を2進数にすると →
1010 - OR演算の結果 →
1111(= 10進数の15)
どちらか片方でも1の桁は、すべて1になるイメージですね。
GoogleスプレッドシートのBITOR関数は、ExcelのBITOR関数と同じ構文で使えます。権限の付与やタグの合成など、フラグをまとめる業務で活躍してくれますよ。
BITOR関数の書き方(構文と引数)
基本構文
=BITOR(値1, 値2)
引数は2つとも必須です。省略するとエラーになります。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値1 | 必須 | OR演算を行う1つ目の数値(0以上の整数) |
| 値2 | 必須 | OR演算を行う2つ目の数値(0以上の整数) |
どちらの引数にも、0以上かつ(2^48)-1(= 281,474,976,710,655)以下の整数を指定します。この範囲を超えると#NUM!エラーになるので注意してくださいね。
TIP
BITOR関数はExcelとの互換性があるため、ExcelファイルをGoogleスプレッドシートで開いてもそのまま動作します。逆もまた然りです。バージョン違いで挙動が変わる心配はいりませんよ。
ビットOR演算のイメージ表
BITOR関数の動きをイメージしやすくするため、よく使われる組み合わせを表にまとめました。
| 値1 | 値2 | 値1(2進) | 値2(2進) | OR結果(2進) | 結果(10進) |
|---|---|---|---|---|---|
| 5 | 10 | 0101 | 1010 | 1111 | 15 |
| 1 | 2 | 0001 | 0010 | 0011 | 3 |
| 4 | 2 | 0100 | 0010 | 0110 | 6 |
| 7 | 8 | 0111 | 1000 | 1111 | 15 |
| 5 | 4 | 0101 | 0100 | 0101 | 5 |
| 0 | 9 | 0000 | 1001 | 1001 | 9 |
「片方でも1の桁はすべて1になる」というルールが見えてきますね。BITORを使うと、フラグを合成して1つの数値にまとめる処理が一発でできますよ。
BITOR関数の基本的な使い方
数値を直接指定する
もっともシンプルな使い方から見ていきましょう。
=BITOR(5, 10)
結果は「15」です。先ほどの表のとおり、0101と1010のOR演算で1111(= 15)が返ります。
=BITOR(1, 2)
結果は「3」です。0001と0010のOR演算で0011(= 3)になります。閲覧(1)と編集(2)の権限を合わせて「3」にする、というイメージですね。
セル参照で指定する
実務では、セルに入っているフラグ値を合成する場面が多いです。A2に「4」、B2に「2」が入っている場合は次のように書きます。
=BITOR(A2, B2)
結果は「6」です。0100と0010のOR演算で0110(= 6)が返ります。
途中の2進数表現を確認したいときは、DEC2BIN関数を組み合わせると分かりやすいですよ。
=DEC2BIN(A2) → "100"
=DEC2BIN(B2) → "10"
ARRAYFORMULAで一括合成する
スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。
=ARRAYFORMULA(BITOR(A2:A10, B2:B10))
A列とB列に並んだフラグ値を、1つの数式でまとめて合成できます。
| A列: 既存権限 | B列: 追加権限 | 結果(BITOR) |
|---|---|---|
| 1 | 2 | 3 |
| 5 | 2 | 7 |
| 4 | 1 | 5 |
| 0 | 8 | 8 |
| 3 | 4 | 7 |
権限の追加処理を1つの数式で一気に処理できますよ。
実務活用例1:権限フラグの付与
BITOR関数の代表的な活用が、ビットフラグで管理された権限への新しい権限の付与です。
権限ビットの設計例
たとえば、社内システムの権限を以下のようにビットフラグで管理しているとします。
| ビット位置 | 権限 | 値(10進) | 値(2進) |
|---|---|---|---|
| 1桁目 | 閲覧 | 1 | 0001 |
| 2桁目 | 編集 | 2 | 0010 |
| 3桁目 | 削除 | 4 | 0100 |
| 4桁目 | 管理 | 8 | 1000 |
ユーザーの現在の権限値が「1」(閲覧のみ)だとして、ここに「編集(= 2)」を追加したいケースを考えます。
単一権限の付与
「閲覧のみのユーザーに編集権限を追加する」には、次の数式を使います。
=BITOR(A2, 2)
A2に「1」が入っていれば、結果は「3」です。0001と0010のORで0011(= 3)になり、閲覧と編集の両方を持つ状態になりますね。
すでに編集権限を持っている場合(A2が「3」など)にこの数式を使っても、結果は変わらず「3」のままです。OR演算の特徴で、同じビットを何度足しても二重計上にならない点が便利ですよ。
複数権限を一気に付与
「閲覧・編集・削除」をまとめて付与したい場合は、合計値(1+2+4 = 7)をマスク値として渡します。
=BITOR(A2, 7)
A2が「8」(管理のみ)なら、結果は「15」(管理+閲覧+編集+削除)になりますよ。
ARRAYFORMULAで一覧に一括付与
ユーザー一覧の全員に「閲覧権限(= 1)」を一括付与したい場合は、次のように書きます。
=ARRAYFORMULA(BITOR(B2:B100, 1))
B列に100人分の権限値が並んでいても、1つの数式で全員に閲覧権限を追加できますよ。すでに閲覧権限を持っている人の権限値は変わらないので、安全に一括処理できますね。
実務活用例2:複数フラグの合成
「セール対象」と「送料無料」のフラグを別々の列で管理している場合に、1つの数値に合成したい場面でもBITOR関数が活躍します。
商品属性のフラグ設計例
| ビット | 属性 | 値(10進) |
|---|---|---|
| 1桁目 | セール対象 | 1 |
| 2桁目 | 送料無料 | 2 |
| 3桁目 | 新商品 | 4 |
| 4桁目 | 限定品 | 8 |
A列に「セール対象(1 or 0)」、B列に「送料無料(2 or 0)」が入っているとします。これを1つの「商品コード」に合成するには、次のように書きます。
=BITOR(A2, B2)
| A列: セール | B列: 送料無料 | BITOR結果 | 2進表現 | 意味 |
|---|---|---|---|---|
| 1 | 2 | 3 | 0011 | セール+送料無料 |
| 1 | 0 | 1 | 0001 | セールのみ |
| 0 | 2 | 2 | 0010 | 送料無料のみ |
| 0 | 0 | 0 | 0000 | 該当なし |
このコードを使えば、後からBITAND関数で「セール対象だけ抽出」といった判定がスムーズになります。「両方を満たす商品だけ抽出」のような複合条件もシンプルに書けますよ。
3つ以上のフラグを合成する
BITOR関数は引数を2つしか取れないので、3つ以上を合成するときはBITORを入れ子にします。
=BITOR(BITOR(A2, B2), C2)
A2(セール=1)、B2(送料無料=2)、C2(新商品=4)がすべて立っていれば、結果は「7」です。
数が多い場合は、合計値が同じになるSUM関数で代用するのも手です。各フラグが0か対応する値だけを取る前提なら、=SUM(A2:D2)でも同じ結果が得られますよ。
実務活用例3:複数列のタグを1つにまとめる
部門・職種・ロケーションなど、複数のタグを1つのコードに集約したい場面でもBITORが便利です。
タグの設計例
| ビット | タグ | 値(10進) |
|---|---|---|
| 1桁目 | 営業部 | 1 |
| 2桁目 | 開発部 | 2 |
| 3桁目 | 東京勤務 | 4 |
| 4桁目 | 大阪勤務 | 8 |
| 5桁目 | リモート可 | 16 |
社員ごとに該当するタグの値を入力しておけば、BITORでまとめて1つの「属性コード」が作れます。
=BITOR(BITOR(BITOR(A2, B2), C2), D2)
この属性コードがあれば、後で「東京勤務かつリモート可の社員を抽出」といった条件もBITAND関数で1発判定できますよ。
複数列のフラグをループ的に集計する
列が多い場合は、REDUCE関数(範囲を畳み込む関数)と組み合わせるとスッキリ書けます。
=REDUCE(0, A2:E2, LAMBDA(acc, val, BITOR(acc, val)))
初期値0から始めて、A2〜E2の各セルとBITORを取り続け、最終的に全フラグの合成値を返します。列を追加してもLAMBDAの中身を変えなくていいので、保守しやすいですよ。
BITOR関数とExcelの互換性
GoogleスプレッドシートのBITOR関数は、ExcelのBITOR関数と仕様が同じです。構文・引数・有効範囲・エラー条件のすべてが一致しています。
ExcelファイルをGoogleスプレッドシートで開いた場合でも、BITOR関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。
ExcelのBITOR関数はExcel 2013以降で利用できます。古いバージョンのExcelファイルを扱うときは、互換性に注意してくださいね。
エラーの種類と対処法
#NUM! エラー
次のいずれかに当てはまると #NUM! エラーになります。
- 引数に負の数を指定した
- 引数が
(2^48)-1(= 281,474,976,710,655)を超えている - 引数に小数を指定した
=BITOR(-1, 2) → #NUM!(負の数は不可)
=BITOR(2.5, 2) → #NUM!(小数は不可)
対処法は、INT関数で整数化してから渡すことです。
=BITOR(INT(A1), INT(B1))
#VALUE! エラー
引数に文字列を指定すると #VALUE! エラーになります。MID関数などで取り出した文字列をそのまま渡すと発生しがちです。
対処法はVALUE関数(文字列を数値に変換する関数)で数値化することです。
=BITOR(VALUE(A1), VALUE(B1))
#N/A エラー
引数が不足している場合は #N/A エラーになります。BITORは引数2つが必須なので、片方しか渡していないと発生しますよ。
=BITOR(5) → #N/A(引数不足)
エラー対処:IFERRORで包む
入力データが信頼できない場合は、IFERRORで包んでおくと安心です。
=IFERROR(BITOR(A2, B2), 0)
エラー時に0を返すようにしておけば、後続の集計が止まらずに済みますよ。
他のビット演算関数との使い分け
スプレッドシートにはBITOR以外にもビット演算関数が用意されています。場面に応じて使い分けましょう。
| 関数 | 演算 | 説明 | 使いどころ |
|---|---|---|---|
| BITOR | OR(論理和) | どちらか1のビットを残す | 権限の付与・フラグの合成 |
| BITAND | AND(論理積) | 両方1のビットだけ残す | 権限チェック・フラグ抽出 |
| BITXOR | XOR(排他的論理和) | 異なるビットだけ残す | フラグの切り替え(トグル) |
| BITLSHIFT | 左シフト | ビットを左にずらす | 値の2倍・4倍計算 |
| BITRSHIFT | 右シフト | ビットを右にずらす | 値の半分計算 |
BITORは「フラグを足し合わせる」とき、BITANDは「特定のフラグが立っているか確認する」ときに使います。詳しくはBITAND関数の記事でも紹介していますよ。付与にBITOR・チェックにBITANDという役割分担を覚えておくと便利ですね。
XORでフラグをON/OFF切り替える操作と組み合わせると、ビット演算の表現の幅がぐっと広がりますね。
まとめ
GoogleスプレッドシートのBITOR関数は、2つの数値をビット単位でOR演算する関数です。複数のフラグを1つの数値に合成する処理で大きな威力を発揮しますよ。
- 構文は
=BITOR(値1, 値2)、引数は0以上の整数 - 「片方でも1のビットは1」になるルールでフラグを合成できる
- 同じビットを何度足しても二重計上にならないので安全に追加できる
- IF・ARRAYFORMULA・REDUCEと組み合わせて一覧を一括合成できる
- 3つ以上のフラグはBITORの入れ子かREDUCEでまとめる
- ExcelのBITOR関数と完全互換(Excel 2013以降)
ビット演算は最初こそ難しく見えますが、BITOR関数を使えば権限の付与やフラグの合成がシンプルな数式で書けるようになります。まずは「BITOR(現在の権限, 追加したい権限)」のパターンから試してみてくださいね。
