「権限の重みを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進数の動き・意味 |
|---|---|---|---|---|
| 0 | 1 | =BITLSHIFT(12, 0) | 12 | 1100 → 1100(そのまま) |
| 1 | 2 | =BITLSHIFT(5, 1) | 10 | 101 → 1010 |
| 2 | 4 | =BITLSHIFT(3, 2) | 12 | 11 → 1100 |
| 3 | 8 | =BITLSHIFT(5, 3) | 40 | 101 → 101000 |
| 4 | 16 | =BITLSHIFT(7, 4) | 112 | 111 → 1110000 |
| 10 | 1,024 | =BITLSHIFT(1, 10) | 1,024 | 1KB=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進数 |
|---|---|---|---|
| 閲覧 | 0 | 1 | 1 |
| 編集 | 1 | 2 | 10 |
| 削除 | 2 | 4 | 100 |
| 管理 | 3 | 8 | 1000 |
| エクスポート | 4 | 16 | 10000 |
| インポート | 5 | 32 | 100000 |
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はそのまま | 0 | 0 |
| 合計 | =BITLSHIFT(255, 16)+BITLSHIFT(128, 8)+0 | 16,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) | 2 | TRUEは1 |
| =BITLSHIFT(空白セル, 1) | 0 | 空白は0 |
| =BITLSHIFT(“abc”, 1) | #VALUE! | 数値にできない文字列 |
続いて、第2引数「シフト数」と、ずらした結果の上限です。
| 式 | 結果 | ポイント |
|---|---|---|
| =BITLSHIFT(1, 47) | 140737488355328 | 2^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/BIN2DEC | 10進数と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とセットで覚えると、ビット関数の使いどころがぐっと広がります。
