スプレッドシートのBITLSHIFT関数の使い方|左シフト=値×2^nとフラグ値・RGBの作り方

スポンサーリンク

「権限の重みを1、2、4、8…と手で打ち込んでいる」「R・G・Bの3つの数値を1つの色コードにまとめたい」。スプレッドシートで管理表を作っていると、こんな場面がありますよね。

そこで役立つのがBITLSHIFT関数です。ただ、公式ヘルプの例は =BITLSHIFT(2, 2) → 8 の1つだけ。何に使うのか、どこでエラーになるのかが見えにくいのが難点でしょう。

実は、BITLSHIFT(値, n) は 値×2^n、つまり「2のn乗を掛ける」のと同じ計算 です。この記事では、Googleスプレッドシートでの使い方を次の3点に絞って解説します。

  • 「値×2^nと同じ」という考え方と構文
  • ビット番号からフラグ値を作る式と、複数の値を1つに詰める式
  • 実機で確かめた境界値(結果の上限・小数・負のシフト数・文字列)

スプレッドシートのBITLSHIFT関数とは?構文と「値×2^nと同じ」という考え方

BITLSHIFT関数は、数値を2進数で見たときの各桁を左へずらす関数です。読み方は「ビット・レフト・シフト」で、bit left shift(ビットを左にずらす)の略。ずらして空いた右側には0が入ります。

結果は10進数の数値で返るので、そのまま次の計算に使えます。2進数に詳しくなくても、「2の累乗を掛ける関数」と捉えれば十分ですよ。

構文と引数(値・シフト数)

=BITLSHIFT(値, シフト数)
引数内容使える範囲(スプレッドシートで実測)
値左へずらす対象の数値0以上、2^48-1(281,474,976,710,655)以下の整数
シフト数左へずらす桁数-53〜53。負にすると右シフト、小数は0の方向へ切り捨て

引数は2つとも必須です。公式ヘルプの説明は、値が「負でない数値」、シフト数が「-53以上53以下」だけ。表の範囲は、実機で試した結果です。

もう1つ、ずらした結果が2^48以上になると #NUM! という条件もあります。詳しくは境界値の章で見ていきましょう。

左シフトn=2^nを掛ける(対応表)

まずは12を2桁左へずらしてみましょう。比較のため、2^nを掛けた式も並べます。

=BITLSHIFT(12, 2)    → 48
=12 * 2^2            → 48

12は2進数で「1100」。左へ2桁ずらすと右端に「00」が足され、「110000」=48になります。=BITLSHIFT(12, 2)=12*2^2 を入れると、実機でもTRUEが返りました。

シフト数ごとの対応は、次のとおりです。

シフト数 n掛ける数(2^n)式の例結果2進数の動き・意味
01=BITLSHIFT(12, 0)121100 → 1100(そのまま)
12=BITLSHIFT(5, 1)10101 → 1010
24=BITLSHIFT(3, 2)1211 → 1100
38=BITLSHIFT(5, 3)40101 → 101000
416=BITLSHIFT(7, 4)112111 → 1110000
101,024=BITLSHIFT(1, 10)1,0241KB=1,024バイト

シフト数が1増えるたびに、結果は2倍。途中の2進数を目で確かめたいなら、DEC2BIN関数を横に置くと便利です(=DEC2BIN(BITLSHIFT(5, 3)) → 101000)。

ARRAYFORMULAでまとめてシフトする

列全体を一度にずらしたいなら、ARRAYFORMULAで包みます。

=ARRAYFORMULA(BITLSHIFT(A2:A10, 2))

A2:A10の各値を4倍した結果が、下の行へ順に並びます。実機で {1;2;3} を渡すと3行に展開され、合計は24(4+8+12)でした。

シフト数の側に範囲を渡しても、同じように展開されます。ビット番号を縦に並べた列から、フラグ値を一気に作る形がこちら。

=ARRAYFORMULA(BITLSHIFT(1, B2:B10))

B列に0〜3が入っていれば、1、2、4、8が並びます。注意点は、空白のシフト数が0扱いになること(単独セルで確認)。範囲に空行があると1が出る計算なので、IFで除いておくと安心です。

=ARRAYFORMULA(IF(B2:B10="", "", BITLSHIFT(1, B2:B10)))

実務での使い方:フラグ値の生成と値の詰め込み

BITLSHIFTの出番は、フラグ値を「作る」場面と、複数の値を1つに「詰める」場面の2つ。順に見ていきましょう。

ビット番号からフラグ値(1,2,4,8…)を作る

権限やチェック項目を1つの数値で管理する表では、項目ごとに1、2、4、8…という「重み」を割り当てます。この重みを手で打たず、ビット番号から計算で出すのがBITLSHIFTの定番の使い方です。

ビット番号は、2進数の右端を0として数えた桁の番号のこと。ビット番号3なら、右から数えて4桁目に1が立った値(2進数で1000、つまり8)になります。

権限名(A)ビット番号(B)フラグ値(C)2進数
閲覧011
編集1210
削除24100
管理381000
エクスポート41610000
インポート532100000

C2に =BITLSHIFT(1, B2) を入れて、下へコピーするだけ。新しく「ダウンロード」を足すときも、ビット番号に6を入れれば64が出ます。重みを打ち間違える心配がなくなりますよ。

なお、BITRSHIFT関数の記事は右端を「1ビット目」と数えます。ここでのビット番号3は、そちらの「4ビット目」です。

作ったフラグ値の合成はBITOR関数、持っているかの判定はBITAND関数の担当。スプレッドシートのBITORは引数が2つまでなので、3つ以上なら =BITOR(BITOR(C2, C3), C4) と入れ子にします。

RGB値・コード値を1つの数値に詰める

色の数値は、赤(R)・緑(G)・青(B)の3つを1つにまとめた代表例です。それぞれ0〜255なので、8桁(8ビット)ずつ場所を分けて並べられます。Rを16桁、Gを8桁左へずらし、Bはそのまま足せば完成。

A2にR、B2にG、C2にBが入っているときは、次の式になります。

=BITLSHIFT(A2, 16) + BITLSHIFT(B2, 8) + C2

R=255、G=128、B=0(オレンジ、#FF8000)で試すと、実機の結果は16,744,448でした。途中経過はこうなります。

ステップ式結果
Rを16桁左へ=BITLSHIFT(255, 16)16,711,680
Gを8桁左へ=BITLSHIFT(128, 8)32,768
Bはそのまま00
合計=BITLSHIFT(255, 16)+BITLSHIFT(128, 8)+016,744,448

3つの値は重ならない桁に入るので、足し算でも混ざりません。

社内コードにも同じ考え方が使えます。部署番号3を上位、連番25を下位8ビットに詰めるなら =BITLSHIFT(3, 8) + 25 で、計算上は793です。ただし下位の連番は0〜255まで。256以上だと部署番号の桁に食い込むので、シフト数を広げてください。

詰めた値の取り出しは、逆向きのBITRSHIFTの担当です。下位8ビットだけ残すならBITANDを使います。

引数の範囲とエラー:実機で確かめた境界値

公式ヘルプには、値の上限も、結果が大きすぎるときの動きも書かれていません。そこで境界になりそうな入力を、実際にGoogleスプレッドシートで試しました(2026年10月時点)。

境界値の実測表

まずは第1引数「値」の結果です。

式結果ポイント
=BITLSHIFT(2^48-1, 0)281474976710655上限ちょうどは通る
=BITLSHIFT(2^48, 0)#NUM!2^48以上はエラー
=BITLSHIFT(12.7, 1)#NUM!小数は切り捨てられずエラー
=BITLSHIFT(-8, 1)#NUM!負の値はエラー
=BITLSHIFT(“3”, 1)6数字の文字列は数値として扱う
=BITLSHIFT(TRUE, 1)2TRUEは1
=BITLSHIFT(空白セル, 1)0空白は0
=BITLSHIFT(“abc”, 1)#VALUE!数値にできない文字列

続いて、第2引数「シフト数」と、ずらした結果の上限です。

式結果ポイント
=BITLSHIFT(1, 47)1407374883553282^47。上限未満なので通る
=BITLSHIFT(1, 48)#NUM!結果が2^48になりエラー
=BITLSHIFT(3, 46)211106232532992値3なら46まで通る
=BITLSHIFT(3, 47)#NUM!結果が2^48を超えてエラー
=BITLSHIFT(2^47, 1)#NUM!1桁でも結果が2^48でエラー
=BITLSHIFT(0, 53)0値0なら53まで通る
=BITLSHIFT(0, 54)#NUM!54以上は値0でもエラー
=BITLSHIFT(1, 53)#NUM!範囲内でも結果が上限超え
=BITLSHIFT(1, 2.9)4小数は0の方向へ切り捨て(2扱い)
=BITLSHIFT(16, -2.5)4-2扱い
=BITLSHIFT(12, -2)3負のシフト数は右シフト
=BITLSHIFT(1, -53)0-53までは使える
=BITLSHIFT(1, -54)#NUM!-54以下はエラー

見落としやすいのが小数の扱いです。値の小数はエラーになるのに、シフト数の小数は切り捨てて計算される。2.9も2扱いで、四捨五入ではありません。

結果が2^48以上になると #NUM!(値は範囲内でも溢れる)

左シフトならではの落とし穴がこれ。BITLSHIFTは値だけでなく、ずらした後の結果にも上限があります。結果が2^48(281,474,976,710,656)以上なら #NUM! です。

値1なら47まで、値3なら46までと、値が大きいほど使えるシフト数は狭まります。「47以下なら安全」と言えるのは値が1のときだけ。2^47の値なら、1桁ずらしただけで #NUM! でした。

値がばらつく表では、上限に縛られない ^ で先に結果を見積もると、原因がひと目で分かります。

=IF(A2 * 2^B2 >= 2^48, "上限超え", BITLSHIFT(A2, B2))

負のシフト数は右シフトになる

シフト数をマイナスにすると、右へずれます。=BITLSHIFT(12, -2) は3で、12(1100)を右へ2桁ずらした「11」です。=BITRSHIFT(12, 2) と同じ動きですね。

はみ出した桁は捨てられ、-53までは通って-54で #NUM! でした。公式ヘルプの「-53以上53以下」どおりです。ただ、右へずらすならBITRSHIFTを使うほうが、式の意図が伝わりやすいでしょう。

#NUM!・#VALUE! の原因とIFERRORの包み方

実測表から、エラーの原因は次のように整理できます。

  • #NUM!:値が小数・負の数・2^48以上のとき。シフト数が-53〜53の外のときと、ずらした結果が2^48以上になるときも該当
  • #VALUE!:”abc” のように数値に変換できない文字列を渡したとき

「文字列だから #VALUE!」とは限りません。”3″・TRUE・空白は、3・1・0として計算されます。

小数が混じりうる列なら、先にINTで整数にしてから渡すのが確実です。

=BITLSHIFT(INT(A2), B2)

エラーを別の表示に置き換えたいときは、IFERRORで包みます。

=IFERROR(BITLSHIFT(A2, B2), "エラー")

ただ、IFERRORで隠すと入力ミスに気づきにくくなります。とくに0への置き換えは、本物のフラグ値0と区別できないので避けましょう。

BITRSHIFT・BITORなど関連関数との使い分け

BITLSHIFTは、ほかのビット関数に渡す値を「作る」側の関数です。役割を表にまとめました。

関数役割BITLSHIFTとの関係
BITLSHIFT左へずらす(2^n倍)フラグ値を作る・値を詰める
BITRSHIFT右へずらす(2^nで割って切り捨て)詰めた値を取り出す・分解する
BITAND両方が1の桁だけ残すフラグの判定、下位ビットの取り出し
BITORどちらかが1の桁を1にする作ったフラグ値を合成する
BITXOR違う桁だけ1にするフラグのオン・オフを切り替える
DEC2BIN/BIN2DEC10進数と2進数の変換結果を2進数で確かめる・2進数から値を作る
POWER/^累乗の計算2^48以上になる計算もできる

迷いやすいのは、^(POWER)との線引きでしょう。値×2^nを出すだけなら、上限のない ^ で十分です。

BITLSHIFTが活きるのは、BITORやBITANDと組んでビットを扱う流れの中。作る・詰めるはBITLSHIFT、取り出すはBITRSHIFTと覚えておけば迷いません。

よくある質問

負の数は扱える?

値(第1引数)に負の数を渡すと #NUM! になります。-8を2倍したいなら、=-8*2 のように普通の掛け算を使いましょう。シフト数(第2引数)のマイナスは使えますが、意味は右シフトに変わります。

POWER(^)とBITLSHIFT、どちらを使えばいい?

0以上の整数で結果が2^48未満なら、どちらも同じ結果です。2^48以上になる計算は、^ やPOWER関数を使ってください。フラグ値を作ってBITORやBITANDに渡すなら、BITLSHIFTが向いています。

シフト数の上限は?

指定できるのは-53〜53で、実機では54と-54が #NUM! でした。ただし左シフトは、結果が2^48未満に収まる範囲だけ。値1なら47、値3なら46までが上限です。

Excelでも同じ式で動く?

Excelにも同名の関数があり、構文は共通です(第2引数の名前はshift_amount)。Excelの公式ヘルプでは、値が2^48-1を超えるときと、shift_amountの絶対値が53を超えるときが #NUM!。数値以外の引数は #VALUE! とされています。

スプレッドシートでは数字の文字列やTRUEも計算されたので、扱いが違うかもしれません。Excelでは確かめていないため、移すときは結果を一度確認しましょう。使い方はExcelのBITLSHIFT関数の記事で解説しています。

まとめ

スプレッドシートのBITLSHIFT関数は、「2のn乗を掛ける」計算をビットの言葉で書いた関数です。最後にポイントを振り返っておきましょう。

  • BITLSHIFT(値, n) は、結果が2^48未満なら 値×2^n と同じ
  • =BITLSHIFT(1, ビット番号) で、フラグ値1、2、4、8…を計算で作れる
  • RGB値やコード値は「左シフトして足す」で1つの数値に詰められる。BITORは2引数なので入れ子で
  • 値の小数・負の数・2^48以上と、結果が2^48以上になるシフトは #NUM!(値1なら47、値3なら46まで)
  • 数字の文字列・TRUE・空白は数値として扱われ、”abc” のような文字列だけが #VALUE!

まずは手元の権限表で、ビット番号の列からフラグ値を作る式を1本試してみてください。取り出す側のBITRSHIFTとセットで覚えると、ビット関数の使いどころがぐっと広がります。

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