スプレッドシートのBITRSHIFT関数の使い方|右シフト=INT(値/2^n)とnビット目の取り出し

スポンサーリンク

「権限フラグの数値から、編集できるかどうかだけ知りたい」「カラーコードの数値から緑の成分を取り出したい」。スプレッドシートで管理表を作っていると、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進数の動き・意味
12=BITRSHIFT(13, 1)61101 → 110
24=BITRSHIFT(13, 2)31101 → 11
38=BITRSHIFT(13, 3)11101 → 1
416=BITRSHIFT(13, 4)01101 → 0(全桁が落ちる)
8256=BITRSHIFT(16744448, 8)65408下位8桁を捨てる
101,024=BITRSHIFT(1024, 10)1バイト → KB
201,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)1101
鈴木7(0111)1110
高橋8(1000)0001
田中13(1101)1011

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,0241100
1,500,0001,4641,46511
5,000,0004,8824,88345
2,147,483,6482,097,1522,097,1522,0482,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)1TRUEは1
=BITRSHIFT(空白セル, 1)0空白は0
=BITRSHIFT(“abc”, 1)#VALUE!数値にできない文字列

続いて第2引数「シフト数」の結果です。

式結果ポイント
=BITRSHIFT(8, 0)80なら値はそのまま
=BITRSHIFT(1, 53)053までは使える
=BITRSHIFT(1, 54)#NUM!54以上はエラー
=BITRSHIFT(3, -2)12負のシフト数は左シフト
=BITRSHIFT(1, -47)1407374883553282^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/BIN2DEC10進数と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とセットで覚えると、ビット関数の使いどころが一気に広がります。

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