スプレッドシートのBITRSHIFT関数の使い方|ビット右シフトで2分の1計算とフラグ抽出

スポンサーリンク

「バイト単位のファイルサイズをKBやMBに換算したい…」「パッキングされた数値からRGB各色を取り出したい…」

スプレッドシートでデータ容量の換算表を作ったり、ビットフラグから個別の値を読み取ったりしていると、「2のN乗で割る計算をシンプルに書きたい」と感じる場面が出てきますよね。=INT(値/POWER(2, n)) でも書けますが、ビット演算の文脈ではもう少し読みやすい方法がほしくなります。

そんなときに便利なのがGoogleスプレッドシートのBITRSHIFT関数です。指定した数値のビットを右にずらすだけで、「値を半分・4分の1・8分の1にする」「上位ビットを抽出する」といった処理を一発でこなせますよ。

しかも結果は数値型で返るので、BITANDやBITORと組み合わせてパッキングされた値の分解や容量換算をスマートに書けます。Excelとも互換性があるため、ファイルをやり取りする現場でも安心して使えますね。

この記事では、スプレッドシートのBITRSHIFT関数の基本から2分の1系列の計算・データ容量の単位換算・RGB値のアンパックまで解説します。BITLSHIFT・BITAND・BITORとの使い分けやエラー対処法にも触れていきますよ。

スプレッドシートのBITRSHIFT関数とは?

スプレッドシートのBITRSHIFT関数(ビットライトシフト関数)は、指定した数値のビットを右方向に指定した桁数だけずらす関数です。結果は10進数の数値で返ります。

「ビットを右にずらす」とは、数値を2進数に変換して各ビットを右に移動させる計算のことです。右にあふれたビットは消え、空いた左側には0が入ります。1桁右にずらすたびに値が半分になるのが大きな特徴ですよ。

たとえば、20を2桁右にシフトする場合を見てみましょう。

  • 20 を2進数にすると → 00010100
  • 2桁右にシフト → 00000101(= 10進数の5)

20 ÷ 2 ÷ 2 = 5 という計算になっていますね。「右に1桁シフト = 2分の1」と覚えると感覚がつかみやすいですよ。

GoogleスプレッドシートのBITRSHIFT関数は、ExcelのBITRSHIFT関数と同じ構文で使えます。データ容量の換算やパッキングされた値の分解など、ビット演算を扱う業務で活躍する関数ですね。

BITRSHIFT関数の書き方(構文と引数)

基本構文

=BITRSHIFT(値, シフト量)

引数は2つとも必須です。省略するとエラーになります。

引数の詳細

引数必須/任意説明
必須右シフトする対象の数値(0以上の整数)
シフト量必須右にずらすビット数(-53〜53の整数)

第1引数の「値」には、0以上かつ(2^48)-1(= 281,474,976,710,655)以下の整数を指定します。

第2引数の「シフト量」は通常は正の整数を指定して右シフトしますが、負の値を指定すると左シフト(BITLSHIFTと同じ動き)になります。シフト量の絶対値は53以下である必要がありますよ。

TIP

BITRSHIFT関数はExcelとの互換性があるため、ExcelファイルをGoogleスプレッドシートで開いてもそのまま動作します。逆もまた然りです。バージョン違いで挙動が変わる心配はいりませんよ。

ビット右シフトのイメージ表

BITRSHIFT関数の動きをイメージしやすいように、よく使う組み合わせを表にまとめました。

シフト量値(2進)シフト後(2進)結果(10進)倍率
80100010008×1
81100001004×1/2
82100000102×1/4
83100000011×1/8
122110000113×1/4
4031010000001015×1/8
1124111000000001117×1/16

「シフト量が1増えるたびに結果が半分になる」というルールが見えてきますね。BITRSHIFT(値, n)INT(値 / 2^n) と同じ結果を返します。

このルールから、BITRSHIFTには次の2つの代表的な使い道が生まれます。

  • 2のN乗で割る高速計算: バイト→KB→MBのような単位換算を1024ずつ割る代わりにシフト量で表現できる
  • ビット位置の抽出: パッキングされた値から「特定ビット位置以降」を取り出せる(RGB値の分解など)

この特徴を活かすと、容量換算表やパッキングデータの読み取りがぐっと楽になりますよ。

BITRSHIFT関数の基本的な使い方

数値を直接指定する

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

=BITRSHIFT(20, 2)

結果は「5」です。先ほどの説明のとおり、20を2桁右にシフトすると 00000101(= 5)になります。20 ÷ 4 = 5 と同じ結果ですね。

=BITRSHIFT(8, 3)

結果は「1」です。8を3桁右にシフトすると 0001(= 1)になります。8 ÷ 8 = 1 と同じ意味ですよ。

セル参照で指定する

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

=BITRSHIFT(A2, B2)

結果は「3」です。12を2桁右にシフトすると 0011(= 3)になります。12 ÷ 4 = 3 と同じですね。

途中の2進数表現を確認したいときは、DEC2BIN関数(10進数を2進数の文字列に変換する関数)を組み合わせると分かりやすいですよ。

=DEC2BIN(A2)               → "1100"
=DEC2BIN(BITRSHIFT(A2, B2)) → "11"

ARRAYFORMULAで一括シフトする

スプレッドシートならではの強みが、ARRAYFORMULA関数との組み合わせです。

=ARRAYFORMULA(BITRSHIFT(1024, A2:A10))

A列に並んだシフト量に応じて、1024を順番に右シフトした結果を一括で取得できます。

A列: シフト量結果(BITRSHIFT)
01024
1512
2256
3128
464
532
616
78

2の累乗で割っていく一覧が、1つの数式で完成しますよ。半減期テーブルや段階的な値の減少をシミュレーションしたいときにも便利ですね。

実務活用例1:データ容量のバイト→KB→MB→GB換算

BITRSHIFT関数のもっとも代表的な活用が、データ容量の単位換算です。

容量換算は「10ビット右シフト = ÷1024」

データ容量は基本的に2の10乗(= 1024)ごとに単位が変わります。1KB = 1024バイト、1MB = 1024KB、1GB = 1024MB のように、各単位は前の単位を1024で割った値ですよ。

これを BITRSHIFT で表すと、「10ビット右シフト = 1024で割る」になります。

=BITRSHIFT(A2, 10)  → KB単位(バイトを1024で割る)
=BITRSHIFT(A2, 20)  → MB単位(バイトを1024×1024で割る)
=BITRSHIFT(A2, 30)  → GB単位(バイトを1024×1024×1024で割る)
=BITRSHIFT(A2, 40)  → TB単位(バイトを1024×1024×1024×1024で割る)

シフト量を10ずつ増やすだけで、KB→MB→GB→TBの段階が自動で出てきますね。換算表を作るときに便利な書き方です。

バイト数を一覧で換算する

A2に「2147483648」(= 2GB相当のバイト数)が入っているとします。

数式結果意味
=BITRSHIFT(A2, 10)2097152KB
=BITRSHIFT(A2, 20)2048MB
=BITRSHIFT(A2, 30)2GB

シンプルに「÷1024」「÷1024×1024」を表現できますね。POWER(2, 10) を使った書き方より直感的で、容量計算の意図が読み手に伝わりやすいですよ。

NOTE

BITRSHIFTは整数除算(小数点以下を切り捨てる割り算)と同じ動きをします。BITRSHIFT(1025, 10) の結果は「1」になり、小数点以下は保持されません。小数まで欲しい場合は =A2 / 1024 のように通常の割り算を使ってくださいね。

BITLSHIFTとセットで覚える

逆方向の単位換算(KB→MB→GB ではなく KB→バイト など)には、BITLSHIFT関数(左シフト関数)を使います。

=BITLSHIFT(1, 10)  → 1024(1KB = 1024B)
=BITLSHIFT(1, 20)  → 1048576(1MB = 1024KB)

「単位を上げるときはBITRSHIFT、単位を下げるときはBITLSHIFT」とペアで覚えておくと混乱しませんね。詳しくはBITLSHIFT関数の記事も合わせて読んでみてください。

実務活用例2:パッキングされたRGB値を分解する

BITRSHIFTを使うと、複数の小さな数値を1つの大きな数値にパッキングしたデータから、各値を取り出せます。色コード(RGB値)や日付の年月日コードなど、「複数の情報が1つの値に詰め込まれている」場面で活躍しますよ。

10進数のカラーコードからRGB各値を取り出す

色を表すRGB値は、それぞれ赤・緑・青を0〜255の数値で持ちます。HTMLでいう #FF8040 のような色は、10進数では「16744512」という1つの整数で表せますよ。

この値からRGB各値を取り出すには、BITRSHIFTとBITANDを組み合わせます。

=BITRSHIFT(A2, 16)              → 赤の値(上位8ビットを取り出す)
=BITAND(BITRSHIFT(A2, 8), 255)  → 緑の値(中位8ビットを取り出す)
=BITAND(A2, 255)                 → 青の値(下位8ビットを取り出す)

A2に「16744512」が入っているとします。

ステップ数式結果
16ビット右シフトで赤を最下位に持ってくるBITRSHIFT(16744512, 16)255
8ビット右シフト後にBITANDで下位8ビットだけ残すBITAND(BITRSHIFT(16744512, 8), 255)128
BITANDで下位8ビットだけ残すBITAND(16744512, 255)64

結果は赤=255、緑=128、青=64で、#FF8040 相当の色情報が取り出せましたね。1セルに保存した色コードから、シェーディングやスタイル設定に使える各色値を分離できますよ。

「右シフト → BITANDでマスク」の定石パターン

パッキングされたデータから特定ビット位置の値を取り出す手順は、次の2ステップで覚えると応用しやすいですよ。

  1. BITRSHIFTで取り出したい位置を一番下に持ってくるBITRSHIFT(値, シフト量)
  2. BITANDで必要なビット数だけマスクするBITAND(結果, 2^ビット数 - 1)

たとえば「中位8ビットだけ取り出したい」なら、8ビット右シフトしてからBITAND(255)(= 2^8 – 1)でマスクする、という流れですね。詳しい仕組みはBITAND関数の記事も合わせて確認してみてくださいね。

実務活用例3:ビットフラグから権限の有無を効率的に判定する

権限管理をビットフラグで行っている場合、BITRSHIFTを使うと「nビット目が立っているか?」を1つの数式で判定できます。

権限フラグの設計例

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

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

ユーザーAの権限値が「11」(= 0001 + 0010 + 1000 = 閲覧+編集+管理)だったとします。

BITRSHIFTで特定ビットを判定する

「nビット目が立っているか?」を調べるには、対象の値をnビット右シフトしてから、最下位ビットだけを残します。

=BITAND(BITRSHIFT(A2, 0), 1)  → 0桁目(閲覧)が立っているか
=BITAND(BITRSHIFT(A2, 1), 1)  → 1桁目(編集)が立っているか
=BITAND(BITRSHIFT(A2, 2), 1)  → 2桁目(削除)が立っているか
=BITAND(BITRSHIFT(A2, 3), 1)  → 3桁目(管理)が立っているか

A2が「11」(2進数で 1011)の場合、結果は順に「1, 1, 0, 1」となります。閲覧・編集・管理が「1」(権限あり)、削除だけが「0」(権限なし)と判定できますね。

一覧表で権限マトリクスを作る

ARRAYFORMULAと組み合わせると、複数ユーザー × 複数権限のマトリクスを一気に作れます。

ユーザー権限値閲覧編集削除管理
A111101
B71110
C80001

各ユーザーの権限値を「BITRSHIFT → BITAND(1)」で各ビットに分解するだけで、権限マトリクスが完成しますよ。=IF(BITAND(BITRSHIFT($B2, ビット位置), 1)=1, "○", "×") のように○×に変換しても見やすいですね。

NOTE

BITRSHIFTで「位置を取り出す」、BITAND/BITORで「合成・抽出」、BITLSHIFTで「位置を作る」、BITXORで「トグル」と覚えておくと、ビット演算4兄弟の役割分担がスッキリします。BITRSHIFTは「読み取り・分解」のフェーズで活躍しますよ。

BITRSHIFTとBITLSHIFTの関係

BITRSHIFT(右シフト)とBITLSHIFT(左シフト)は、シフト方向が逆のペア関数です。第2引数の符号で動きが切り替わります。

関数動作値の変化同等の演算
BITRSHIFT(値, n)右にnビットシフトn回ぶん半分INT(値 / 2^n)
BITLSHIFT(値, n)左にnビットシフトn回ぶん2倍値 × 2^n

実は、BITRSHIFTの第2引数に負の値を渡すと、BITLSHIFTと同じ結果になります。

=BITRSHIFT(5, -3)   → 40(5を3ビット左シフト)
=BITLSHIFT(5, 3)    → 40(同じ結果)

ただし、可読性のためには「右シフトはBITRSHIFT、左シフトはBITLSHIFT」と分けて書く方がおすすめですよ。読み手が数式の意図をすぐに把握できますね。

BITRSHIFT関数とExcelの互換性

GoogleスプレッドシートのBITRSHIFT関数は、ExcelのBITRSHIFT関数と仕様が同じです。構文・引数・有効範囲・エラー条件のすべてが一致しています。

ExcelファイルをGoogleスプレッドシートで開いた場合でも、BITRSHIFT関数はそのまま動作します。逆にスプレッドシートで作成した数式をExcelで開いても問題ありませんよ。

ExcelのBITRSHIFT関数はExcel 2013以降で利用できます。古いバージョンのExcelファイルを扱うときは、互換性に注意してくださいね。

エラーの種類と対処法

#NUM! エラー

次のいずれかに当てはまると #NUM! エラーになります。

  • 第1引数(値)に負の数を指定した
  • 第1引数が (2^48)-1(= 281,474,976,710,655)を超えている
  • 第1引数に小数を指定した
  • 第2引数(シフト量)の絶対値が53を超えている
=BITRSHIFT(-1, 2)             → #NUM!(負の数は不可)
=BITRSHIFT(2.5, 2)            → #NUM!(小数は不可)
=BITRSHIFT(1024, 60)          → #NUM!(シフト量が大きすぎる)

対処法は、INT関数(小数を切り捨てて整数化する関数)で値を整数化し、シフト量も適切な範囲に収めることです。

=BITRSHIFT(INT(A1), MIN(B1, 47))

#VALUE! エラー

引数に文字列を指定すると #VALUE! エラーになります。テキストとして取り込んだ数値をそのまま渡すと発生しがちです。

対処法はVALUE関数(文字列を数値に変換する関数)で数値化することです。

=BITRSHIFT(VALUE(A1), VALUE(B1))

#N/A エラー

引数が不足している場合は #N/A エラーになります。BITRSHIFTは引数2つが必須なので、片方しか渡していないと発生しますよ。

=BITRSHIFT(20)                → #N/A(引数不足)

エラー対処:IFERRORで包む

入力データが信頼できない場合は、IFERRORで包んでおくと安心です。

=IFERROR(BITRSHIFT(A2, B2), 0)

エラー時に0を返すようにしておけば、後続の集計が止まらずに済みますよ。

他のビット演算関数との使い分け

スプレッドシートにはBITRSHIFT以外にもビット演算関数が用意されています。場面に応じて使い分けましょう。

関数演算説明使いどころ
BITRSHIFT右シフトビットを右にずらす値の半分計算、データのアンパック、容量単位の換算
BITLSHIFT左シフトビットを左にずらす値の2倍・4倍計算、フラグ位置の生成、データパッキング
BITANDAND(論理積)両方1のビットだけ残す権限チェック・フラグ抽出
BITOROR(論理和)どちらか1のビットを残す権限の付与・フラグの合成
BITXORXOR(排他的論理和)異なるビットだけ残すフラグの切り替え(トグル)・差分検出

BITRSHIFTは「パッキングされたデータから特定の位置を読み取りたい」「2のN乗で割る計算をしたい」ときに使います。設計したフラグを実際に運用する場面では、BITAND(BITAND関数の記事)でチェック、BITOR(BITOR関数の記事)で合成、BITXOR(BITXOR関数の記事)でトグルという役割分担になりますね。

「パッキングはBITLSHIFT、アンパックはBITRSHIFT、運用はAND/OR/XOR」という流れを覚えておくと、業務でビット演算を使うときの全体像が見えやすくなりますよ。

まとめ

GoogleスプレッドシートのBITRSHIFT関数は、指定した数値のビットを右方向にずらす関数です。データ容量の単位換算やパッキングされた値の分解、ビットフラグの読み取りなど、ビット演算の「読み取り」面で活躍してくれますよ。

  • 構文は =BITRSHIFT(値, シフト量)、両引数とも必須
  • 「右に1桁シフト = 2分の1」のルールで値が減っていく
  • BITRSHIFT(値, 10) でバイト→KB、BITRSHIFT(値, 20) でバイト→MB の換算ができる
  • ARRAYFORMULAと組み合わせて2のN乗で割る一覧を一発で作れる
  • 「BITRSHIFT → BITAND」の組み合わせでパッキングされたRGB値を分解できる
  • 権限フラグから「nビット目が立っているか」を効率的に判定できる
  • ExcelのBITRSHIFT関数と完全互換(Excel 2013以降)

ビット演算は最初こそ難しく見えますが、BITRSHIFT関数を使えば容量換算やパッキングデータの分解がシンプルな数式で書けるようになります。まずは「BITRSHIFT(バイト数, 10)」の容量換算パターンから試してみてくださいね。

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