「権限フラグの数値から、編集できるかどうかだけ知りたい」「カラーコードの数値から緑の成分を取り出したい」。スプレッドシートで管理表を作っていると、1つの数値に詰め込まれた情報を分けたくなる場面がありますよね。
そこで役立つのがBITRSHIFT関数です。ただ、公式ヘルプの例は1つだけ。「右シフト」の意味も、小数や負の値を入れたときの結果も分かりにくいのが難点です。
実は、BITRSHIFT(値, n) は INT(値/2^n)、つまり「2のn乗で割って切り捨て」と同じ計算 です。この記事では、Googleスプレッドシートでの使い方を次の3点に絞って解説します。
- 「INT(値/2^n)と同じ」という考え方と構文
- nビット目を取り出す1本の式と、詰めた値の分解
- 実機で確かめた境界値(小数・負の値・上限・負のシフト数)
スプレッドシートのBITRSHIFT関数とは?構文と「INT(値/2^n)と同じ」という考え方
BITRSHIFT関数は、数値を2進数で見たときの各桁を右へずらす関数です。読み方は「ビット・ライト・シフト」で、bit right shift(ビットを右にずらす)の略。右へはみ出した桁は捨てられ、空いた左側には0が入ります。
結果は10進数の数値で返るので、そのまま次の計算に使えます。2進数に詳しくなくても、「割り算して切り捨てる関数」と捉えれば十分に使いこなせますよ。
構文と引数(値・シフト数)
=BITRSHIFT(値, シフト数)
| 引数 | 内容 | 使える範囲(スプレッドシートで実測) |
|---|---|---|
| 値 | 右へずらす対象の数値 | 0以上、2^48-1(281,474,976,710,655)以下の整数 |
| シフト数 | 右へずらす桁数 | 正は53まで。負にすると左シフト(結果が上限以内のとき) |
引数は2つとも指定します。公式ヘルプには、値は「負でない数値」、シフト数は「-52〜53」とだけ書かれています。表の「使える範囲」は、実際にGoogleスプレッドシートで試した結果です。
右シフトn = 2^nで割って切り捨て
まずは13を2桁右へずらしてみましょう。比較のため、INTで割り算を切り捨てた式も並べます。
=BITRSHIFT(13, 2) → 3
=INT(13 / 2^2) → 3
13は2進数で「1101」です。右へ2桁ずらすと末尾の「01」が落ちて「11」、10進数の3になります。一方、13÷4=3.25を切り捨てても3で、同じ答えになるのがポイントです。
シフト数ごとの「割る数」と結果を1つの表にまとめました。
| シフト数 n | 割る数(2^n) | 式の例 | 結果 | 2進数の動き・意味 |
|---|---|---|---|---|
| 1 | 2 | =BITRSHIFT(13, 1) | 6 | 1101 → 110 |
| 2 | 4 | =BITRSHIFT(13, 2) | 3 | 1101 → 11 |
| 3 | 8 | =BITRSHIFT(13, 3) | 1 | 1101 → 1 |
| 4 | 16 | =BITRSHIFT(13, 4) | 0 | 1101 → 0(全桁が落ちる) |
| 8 | 256 | =BITRSHIFT(16744448, 8) | 65408 | 下位8桁を捨てる |
| 10 | 1,024 | =BITRSHIFT(1024, 10) | 1 | バイト → KB |
| 20 | 1,048,576 | =BITRSHIFT(5000000, 20) | 4 | バイト → MB(約4.77を切り捨て) |
シフト数10なら1,024で割るのでKB、20なら1,048,576で割るのでMBへの換算になります。
割り算の切り捨てだけなら、INT関数やQUOTIENT関数でも書けます(=QUOTIENT(13, 4) も3)。ただし一致するのは値が0以上の整数のときだけ。12.7のような小数を入れると、BITRSHIFTは #NUM! を返します。
途中の2進数を目で確かめたいときは、DEC2BIN関数を横に置くと便利です。
=DEC2BIN(13) → 1101
=DEC2BIN(BITRSHIFT(13, 2)) → 11
ARRAYFORMULAでまとめてシフトする
列全体を一度にずらしたいなら、ARRAYFORMULAで包みます。
=ARRAYFORMULA(BITRSHIFT(A2:A10, 2))
A2:A10の各値を2桁右へずらした結果が、下の行へ順に並びます。配列定数を渡してもかまいません。=ARRAYFORMULA(BITRSHIFT({8,16,32}, 2)) なら、横に2、4、8が並びます。
空白セルは0として扱われるため、データのない行には0が表示されます。気になる場合は、IFで空白のまま残しましょう。
=ARRAYFORMULA(IF(A2:A10="", "", BITRSHIFT(A2:A10, 2)))
実務での使い方:nビット目の取り出しと詰めた値の分解
BITRSHIFTが本領を発揮するのは、1つの数値に詰め込まれた情報を読み出すときです。ここでは権限フラグ・RGB値・バイト数の3つを順に見ていきます。
権限フラグのnビット目を判定する
閲覧=1、編集=2、削除=4、管理=8の権限を、足し算で1つの数値にまとめた表を考えます。たとえば13は「1+4+8」なので、閲覧・削除・管理の3つを持つ人です。
nビット目が1かどうかは、次の1本の式で判定できます。
=BITAND(BITRSHIFT(値, n-1), 1)
BITRSHIFTでnビット目を右端まで運び、BITAND(…, 1)で右端の1桁だけを残す仕組みです。結果が1なら権限あり、0なら権限なし。たとえば =BITAND(BITRSHIFT(13, 1), 1) は0なので、13の人に編集権限はありません。
A列に担当者、B列に権限値を入れ、C〜F列に権限ごとの判定を置いた例がこちら。
| 担当者(A) | 権限値(B) | 閲覧(C) | 編集(D) | 削除(E) | 管理(F) |
|---|---|---|---|---|---|
| 佐藤 | 11(1011) | 1 | 1 | 0 | 1 |
| 鈴木 | 7(0111) | 1 | 1 | 1 | 0 |
| 高橋 | 8(1000) | 0 | 0 | 0 | 1 |
| 田中 | 13(1101) | 1 | 0 | 1 | 1 |
C2〜F2には、シフト数だけを変えた式を入れて下へコピーします。権限値の後ろのかっこ内は、説明用に添えた2進数です。
C2: =BITAND(BITRSHIFT($B2, 0), 1) ← 閲覧(1ビット目)
D2: =BITAND(BITRSHIFT($B2, 1), 1) ← 編集(2ビット目)
E2: =BITAND(BITRSHIFT($B2, 2), 1) ← 削除(3ビット目)
F2: =BITAND(BITRSHIFT($B2, 3), 1) ← 管理(4ビット目)
1列分をまとめて出すなら、ARRAYFORMULAが便利です。
=ARRAYFORMULA(BITAND(BITRSHIFT(B2:B5, 3), 1))
管理列の1、0、1、1が一度に並びます。判定は0と1なので、=SUM(F2:F5) で管理権限を持つ人数(3人)も数えられますよ。
ビットの残し方(マスク)の考え方は、BITAND関数の記事で詳しく扱っています。
RGB値・コード値を分解する
色の数値も、1つの数に3つの情報が詰まった代表例です。オレンジ(#FF8000)を10進数にすると16,744,448。上位8ビットが赤(R)、中央の8ビットが緑(G)、下位8ビットが青(B)を表します。
A2に16744448が入っているとき、各成分はこう取り出せます。
R: =BITAND(BITRSHIFT(A2, 16), 255) → 255
G: =BITAND(BITRSHIFT(A2, 8), 255) → 128
B: =BITAND(A2, 255) → 0
これが「右シフト → BITANDでマスク」の定石です。欲しい部分を右端まで運び、255(2進数で11111111)で下位8桁だけを残します。
Gの途中経過を見ると、BITRSHIFT(A2, 8) は65,408。まだRの分(255×256)が上に乗った状態で、BITAND(…, 255) を通すと128だけが残ります。
社内コードのような値にも、同じ考え方が使えます。例は、部署番号を上位に、連番を下位8ビットに詰めたコード793(3×256+25)。=BITRSHIFT(793, 8) で部署3、=BITAND(793, 255) で連番25が取り出せます。下位は =MOD(793, 256) でも同じ25なので、MOD関数に慣れた人はそちらでも構いません。
逆に、RGB値やフラグ値を組み立てる側の手順は、BITLSHIFT関数の記事にまとめています。分解はBITRSHIFT、組み立てはBITLSHIFTと覚えておきましょう。
バイト数をKB・MBに切り捨て換算する
シフト数10は÷1,024、20は÷1,048,576なので、バイト数のKB・MB換算がそのまま書けます。
KB(切り捨て): =BITRSHIFT(A2, 10)
MB(切り捨て): =BITRSHIFT(A2, 20)
四捨五入した値と並べると、違いがはっきりします。
| バイト数 | KB切り捨て BITRSHIFT(値,10) | KB四捨五入 ROUND(値/1024) | MB切り捨て BITRSHIFT(値,20) | MB四捨五入 ROUND(値/1048576) |
|---|---|---|---|---|
| 1,024 | 1 | 1 | 0 | 0 |
| 1,500,000 | 1,464 | 1,465 | 1 | 1 |
| 5,000,000 | 4,882 | 4,883 | 4 | 5 |
| 2,147,483,648 | 2,097,152 | 2,097,152 | 2,048 | 2,048 |
1,500,000バイトは1,024で割ると1,464.84…なので、BITRSHIFTでは1,464、ROUNDでは1,465です。5,000,000バイトをMBにすると約4.77で、4と5に分かれます。
「埋まり切った単位がいくつあるか」を数えたいなら切り捨てのBITRSHIFT。報告用に実際の値へ近い数字を出したいなら ROUND(値/1024) を使う、という使い分けがおすすめです。
引数の範囲とエラー:実機で確かめた境界値
Googleスプレッドシートの公式ヘルプには、値の上限や、小数・文字列を入れたときの結果が書かれていません。そこで境界になりそうな入力を、実際にスプレッドシートで試しました(2026年10月時点)。
境界値の実測表
まずは第1引数「値」の結果です。
| 式 | 結果 | ポイント |
|---|---|---|
| =BITRSHIFT(12.7, 1) | #NUM! | 小数は切り捨てられずエラー |
| =BITRSHIFT(12.0, 1) | 6 | 整数の値なら通る |
| =BITRSHIFT(INT(12.7), 1) | 6 | 先にINTで整数にすれば使える |
| =BITRSHIFT(-8, 1) | #NUM! | 負の値はエラー |
| =BITRSHIFT(2^48-1, 0) | 281474976710655 | 上限ちょうどは通る |
| =BITRSHIFT(2^48, 0) | #NUM! | 2^48以上はエラー |
| =BITRSHIFT(2^48-1, 47) | 1 | |
| =BITRSHIFT(2^48-1, 48) | 0 | |
| =BITRSHIFT(“8”, 1) | 4 | 数字の文字列は数値として扱う |
| =BITRSHIFT(TRUE, 0) | 1 | TRUEは1 |
| =BITRSHIFT(空白セル, 1) | 0 | 空白は0 |
| =BITRSHIFT(“abc”, 1) | #VALUE! | 数値にできない文字列 |
続いて第2引数「シフト数」の結果です。
| 式 | 結果 | ポイント |
|---|---|---|
| =BITRSHIFT(8, 0) | 8 | 0なら値はそのまま |
| =BITRSHIFT(1, 53) | 0 | 53までは使える |
| =BITRSHIFT(1, 54) | #NUM! | 54以上はエラー |
| =BITRSHIFT(3, -2) | 12 | 負のシフト数は左シフト |
| =BITRSHIFT(1, -47) | 140737488355328 | 2^47。上限以内なので通る |
| =BITRSHIFT(1, -48) | #NUM! | 結果が2^48になりエラー |
| =BITRSHIFT(0, -60) | #NUM! | 値が0でもエラー |
| =BITRSHIFT(8, 1.9) | 4 | 小数は0の方向へ切り捨て(1扱い) |
| =BITRSHIFT(8, -1.9) | 16 | -1扱い |
見落としやすいのが小数の扱いです。値の小数はエラーになるのに、シフト数の小数は切り捨てて計算される。引数によって振る舞いが違う点は、覚えておくと安心でしょう。
負のシフト数は左シフトになる
シフト数をマイナスにすると、右ではなく左へずれます。=BITRSHIFT(3, -2) は12で、=BITLSHIFT(3, 2) と同じ結果です。3(2進数で11)を左へ2桁ずらすと「1100」、つまり12になるわけです。
注意したいのは、左へずらした結果が2^48-1を超えると #NUM! になる点。値が1なら-47までは通り、-48でエラーでした。-52や-53も #NUM! だったので、公式ヘルプの範囲(-52〜53)の端までは使えません。
左へずらしたいなら、BITRSHIFTにマイナスを渡すよりBITLSHIFTを使うほうが、式の意図も伝わりやすいはずです。
#NUM!・#VALUE! の原因とIFERRORの包み方
実測表から、エラーの原因は次のように整理できます。
- #NUM!:値が小数・負の数・2^48以上のとき。シフト数が54以上のときと、左シフトの結果が上限を超えるときも該当
- #VALUE!:”abc” のように数値に変換できない文字列を渡したとき
小数が混じる可能性がある列なら、先にINTで整数にしてから渡すのが確実です。
=BITRSHIFT(INT(A2), 2)
エラーを別の表示に置き換えたいときは、IFERRORで包みます。=IFERROR(BITRSHIFT(-8, 1), "エラー") は「エラー」と表示されました。
=IFERROR(BITRSHIFT(A2, 2), "エラー")
ただ、IFERRORで隠すと入力ミスに気づきにくくなります。原因を見分けたいなら、条件ごとに表示を分けてみてください。
=IF(A2<0, "負の値", BITRSHIFT(INT(A2), 2))
BITLSHIFT・BITANDなど関連関数との使い分け
BITRSHIFTは単独よりも、ほかのビット関数と組んで使う場面が多い関数です。役割を表にまとめました。
| 関数 | 役割 | BITRSHIFTとの関係 |
|---|---|---|
| BITLSHIFT | 左へずらす(2^n倍) | 逆向きのシフト。値を組み立てる側 |
| BITAND | 両方が1の桁だけ残す | 右シフト後のマスクに使う |
| BITOR | どちらかが1の桁を1にする | フラグの合成に使う |
| BITXOR | 違う桁だけ1にする | フラグのオン・オフ切り替えに使う |
| DEC2BIN/BIN2DEC | 10進数と2進数の変換 | シフト前後の2進数を確認する |
| INT/QUOTIENT | 割り算の切り捨て | 単純な÷2^nなら代わりに使える |
迷いやすいのはINTとの線引きでしょう。÷2^nして切り捨てるだけなら、INTで十分です。INTは小数や負の値を渡してもエラーにならないので、入力が荒れがちな表ではむしろ扱いやすい場面もあります。
BITRSHIFTを選ぶ意味があるのは、BITANDと組んで「何ビット目か」を読むとき。BITAND(BITRSHIFT(値, n-1), 1) と書けば、ビットを読んでいる意図が式からそのまま伝わります。
なお、Excelにも同じ構文のBITRSHIFT関数があります。Excelでの使い方はExcelのBITRSHIFT関数の記事を参照してください。
よくある質問
負の数は扱える?
値(第1引数)に負の数を渡すと #NUM! になります。負の値を2で割って切り捨てたいなら、=INT(-8/2)(結果は-4)のようにINTを使いましょう。シフト数(第2引数)のマイナスは使えますが、意味は左シフトに変わります。
INTとBITRSHIFT、どちらを使えばいい?
割り算の切り捨てが目的ならINT、ビットを読み出すのが目的ならBITRSHIFT、と考えると迷いません。0以上の整数なら結果は同じなので、表を読む人に伝わりやすいほうを選べば大丈夫です。
シフト数の上限は?
スプレッドシートで試した範囲では、正の側は53まで使え、54で #NUM! でした。負の側は左シフトになり、値が1のときは-47まで通って-48でエラーでした。結果が2^48-1を超えると #NUM! になる仕組みです。
Excelでも同じ式で動く?
Excelも同じ2つの引数を取る構文なので、基本の式はそのまま書けます。Excelの公式ヘルプによると、#NUM! になるのは値が2^48-1を超えるときと、シフト数の絶対値が53を超えるときです。小数や数字の文字列の扱いはExcelでは確かめていないので、移すときは結果を一度確かめておきましょう。
まとめ
スプレッドシートのBITRSHIFT関数は、「2のn乗で割って切り捨てる」計算をビットの言葉で書いた関数です。最後にポイントを振り返っておきましょう。
BITRSHIFT(値, n)は、0以上の整数ならINT(値/2^n)と同じ結果- nビット目の判定は
=BITAND(BITRSHIFT(値, n-1), 1)の1本で書ける - RGB値やコード値は「右シフト → BITANDでマスク」で分解できる
- シフト数10でKB、20でMBへの切り捨て換算。四捨五入なら
ROUND(値/1024) - 値の小数・負の数・2^48以上は
#NUM!。小数はINTで整数にしてから渡す - シフト数は正の側が53まで。負にすると左シフトになる
まずは手元の権限表やカラーコードで、nビット目を取り出す式を1本試してみてください。組み立てる側のBITLSHIFTとセットで覚えると、ビット関数の使いどころが一気に広がります。