スプレッドシートのBITOR関数の使い方|ビットORで権限・フラグを付与する

スポンサーリンク

「ユーザーごとに『閲覧』『編集』『削除』の権限を組み合わせて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進)
51001011010111115
120001001000113
420100001001106
7801111000111115
540101010001015
090000100110019

「片方でも1の桁はすべて1になる」というルールが見えてきますね。BITORを使うと、フラグを合成して1つの数値にまとめる処理が一発でできますよ。

BITOR関数の基本的な使い方

数値を直接指定する

もっともシンプルな使い方から見ていきましょう。

=BITOR(5, 10)

結果は「15」です。先ほどの表のとおり、01011010のOR演算で1111(= 15)が返ります。

=BITOR(1, 2)

結果は「3」です。00010010のOR演算で0011(= 3)になります。閲覧(1)と編集(2)の権限を合わせて「3」にする、というイメージですね。

セル参照で指定する

実務では、セルに入っているフラグ値を合成する場面が多いです。A2に「4」、B2に「2」が入っている場合は次のように書きます。

=BITOR(A2, B2)

結果は「6」です。01000010の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)
123
527
415
088
347

権限の追加処理を1つの数式で一気に処理できますよ。

実務活用例1:権限フラグの付与

BITOR関数の代表的な活用が、ビットフラグで管理された権限への新しい権限の付与です。

権限ビットの設計例

たとえば、社内システムの権限を以下のようにビットフラグで管理しているとします。

ビット位置権限値(10進)値(2進)
1桁目閲覧10001
2桁目編集20010
3桁目削除40100
4桁目管理81000

ユーザーの現在の権限値が「1」(閲覧のみ)だとして、ここに「編集(= 2)」を追加したいケースを考えます。

単一権限の付与

「閲覧のみのユーザーに編集権限を追加する」には、次の数式を使います。

=BITOR(A2, 2)

A2に「1」が入っていれば、結果は「3」です。00010010の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進表現意味
1230011セール+送料無料
1010001セールのみ
0220010送料無料のみ
0000000該当なし

このコードを使えば、後から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以外にもビット演算関数が用意されています。場面に応じて使い分けましょう。

関数演算説明使いどころ
BITOROR(論理和)どちらか1のビットを残す権限の付与・フラグの合成
BITANDAND(論理積)両方1のビットだけ残す権限チェック・フラグ抽出
BITXORXOR(排他的論理和)異なるビットだけ残すフラグの切り替え(トグル)
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(現在の権限, 追加したい権限)」のパターンから試してみてくださいね。

タイトルとURLをコピーしました