Excelでビット演算を使いたいけれど、どの関数を使えばいいのかわからない。そんな経験はありませんか?
ビットシフトの仕組みがわからないと、データの変換作業を手計算で進めることになり、時間もかかって大変ですよね。
この記事では、BITLSHIFT関数の基本的な使い方から、2のべき乗計算・フラグ管理・データ圧縮の考え方まで、わかりやすく解説していきます。読み終えるころには、ビット左シフトをExcelでサッと処理できるようになりますよ。
ExcelのBITLSHIFT関数とは?
BITLSHIFT関数は、数値を2進数(ビット)に変換し、指定したビット数だけ左にシフトした結果を10進数で返す関数です。
読み方は「ビット レフト シフト」です。
ビットの左シフトとは、2進数の各桁を左方向にずらす操作のことです。左に1ビットシフトすると、元の値が2倍になります。2ビットなら4倍、3ビットなら8倍です。
たとえば、10進数の「5」は2進数で「101」です。これを左に2ビットシフトすると「10100」になり、10進数では「20」になります。つまり 5 × 4 = 20 ですね。
このように、BITLSHIFT関数を使えば、ビット単位のデータ操作をExcel上でかんたんに行えますよ。
対応バージョンは Excel 2013 以降および Microsoft 365 です。Excel 2010 以前では使用できないので、お使いのバージョンを確認しておきましょう。
なぜ「左に1ビットシフト = 2倍」になるのか
10進数で「左に1桁シフトすると10倍」になるのと同じ理屈です。10進数は基数が10なので桁を1つずらすと10倍ですが、2進数は基数が2なので桁を1つずらすと2倍になります。
| 操作 | 2進数 | 10進数 | 元の値との比 |
|---|---|---|---|
| 元の値 | 0011 | 3 | × 1 |
| 左に1シフト | 0110 | 6 | × 2 |
| 左に2シフト | 1100 | 12 | × 4 |
| 左に3シフト | 11000 | 24 | × 8 |
このルールさえつかんでおけば、暗算でも結果を予測できますよ。
BITLSHIFT関数の書き方(構文と引数)
基本構文
=BITLSHIFT(数値, シフト量)
引数は2つで、どちらも必須です。
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 数値 | 必須 | ビットを左にシフトしたい10進数の整数を指定します。0 以上 281,474,976,710,655(2の48乗 − 1)以下の範囲で指定します。 |
| シフト量 | 必須 | 左にシフトするビット数を整数で指定します。絶対値が53以下である必要があります。 |
数値に小数を指定した場合は、小数部分が切り捨てられます。たとえば「5.8」を指定すると「5」として扱われますよ。
シフト量に負の値を指定すると、右シフトになります。=BITLSHIFT(数値, -2) は =BITRSHIFT(数値, 2) と同じ結果です。覚えておくと便利ですね。
上限値「2の48乗 − 1」の意味
BITLSHIFT関数で扱える最大値は 281,474,976,710,655 です。これは2進数の48桁すべてが「1」になった状態(111…1 が48個)と同じで、Excelのビット系関数で共通の上限です。
シフト後の結果がこの値を超えると #NUM! エラーになります。たとえば =BITLSHIFT(1, 48) はギリギリ計算できますが、=BITLSHIFT(1, 48) の答えは 281,474,976,710,656 で上限超過のためエラーです。実際には =BITLSHIFT(1, 47) までが安全圏と考えるとよいでしょう。
BITLSHIFT関数の基本的な使い方
ここでは、実際にBITLSHIFT関数を入力して結果を確認してみましょう。
値を直接指定する方法
セルに次の数式を入力してみてください。
=BITLSHIFT(5, 2)
結果は「20」になります。5(2進数: 101)を左に2ビットシフトすると 10100(10進数: 20)になるためです。
もうひとつ試してみましょう。
=BITLSHIFT(1, 3)
結果は「8」です。1(2進数: 1)を左に3ビットシフトすると 1000(10進数: 8)になります。左シフト3回は「2の3乗 = 8倍」に相当しますよ。
セル参照を使う方法
A1セルに数値「10」、B1セルにシフト量「3」が入っている場合、次のように入力します。
=BITLSHIFT(A1, B1)
結果は「80」です。10 × 8(2の3乗)= 80 ですね。セル参照を使えば、数値やシフト量を変えるだけで結果が自動更新されます。
結果を2進数で見たいとき
BITLSHIFTの結果は10進数で返るので、シフトの動きを確認したいときはDEC2BIN関数と組み合わせると便利です。
=DEC2BIN(BITLSHIFT(5, 2))
結果は「10100」と表示され、ビットがどう動いたかを目で確認できます。学習中はこの組み合わせで挙動をつかんでおくと、ビット演算への理解が深まりますよ。
BITLSHIFT関数の実践的な活用例
例1: 2のべき乗を一覧で計算する
BITLSHIFT関数を使うと、2のべき乗の値をかんたんに求められます。
=BITLSHIFT(1, 10)
結果は「1024」です。1を左に10ビットシフトすると、2の10乗 = 1024 が得られます。
A列に 0、1、2、3 …と数値を並べて、B列に =BITLSHIFT(1, A1) を入れれば、2のべき乗の一覧表がすぐに作れますよ。
| A列(n) | B列(=BITLSHIFT(1, An)) |
|---|---|
| 0 | 1 |
| 4 | 16 |
| 8 | 256 |
| 10 | 1,024 |
| 16 | 65,536 |
| 20 | 1,048,576 |
メモリ容量・解像度・通信速度などITの世界は2のべき乗だらけなので、ちょっとした単位変換にも役立ちます。
例2: KB・MB・GBの換算
「3KBは何バイト?」のような単位変換も、左シフトで一発です。1KB = 2の10乗バイト、1MB = 2の20乗バイト、1GB = 2の30乗バイトなので、シフト量を変えるだけで換算できます。
=3 * BITLSHIFT(1, 10)
結果は「3,072」(バイト)です。同じ要領で MB → バイト なら =2 BITLSHIFT(1, 20)、GB → バイト なら =1 BITLSHIFT(1, 30) のように使えます。
例3: フラグ管理(権限ビットの設定)
社員ごとの権限を「閲覧・編集・承認・管理」の4つで管理したいとき、各権限を1ビットずつに割り当てると、1セルで複数の権限を表現できます。
| 権限 | ビット位置 | =BITLSHIFT(1, n) |
|---|---|---|
| 閲覧 | 0 | 1 |
| 編集 | 1 | 2 |
| 承認 | 2 | 4 |
| 管理 | 3 | 8 |
ある社員に「閲覧 + 編集 + 承認」の権限を持たせたい場合は、それぞれの値を BITOR で合算します。
=BITOR(BITLSHIFT(1, 0), BITLSHIFT(1, 1), BITLSHIFT(1, 2))
結果は「7」(2進数: 0111)。この1つの数値で「閲覧・編集・承認OK/管理NG」を表現できます。データベースの権限管理で見かけるビットマスクの考え方と同じですよ。
例4: 特定のビットだけ立てる・確認する
BITLSHIFT関数は、BITAND関数やBITOR関数と組み合わせて使うこともできます。
特定のビット位置にフラグを立てたい場合は、次のようにします。
=BITOR(A1, BITLSHIFT(1, 3))
この数式は、A1の値の第3ビット(右から数えて4番目)を「1」に設定します。A1が「5」(2進数: 0101)なら、結果は「13」(2進数: 1101)です。
反対に、特定のビット位置の値を確認したい場合は、BITAND関数と組み合わせます。
=BITAND(A1, BITLSHIFT(1, 2))
A1が「13」(2進数: 1101)なら、結果は「4」(2進数: 0100)です。第2ビットが「1」であることがわかりますね。0が返ってくれば「立っていない」、0以外が返ってくれば「立っている」と判定できます。
=IF(BITAND(A1, BITLSHIFT(1, 2))>0, "承認権あり", "承認権なし")
このように IF と組み合わせると、権限チェック表をそのまま運用に使えますよ。
例5: データ圧縮の考え方(複数値を1セルに詰める)
「年(4ビット)+ 月(4ビット)+ 日(5ビット)」のように、小さな値を1つの数値にまとめることもできます。
=BITOR(BITLSHIFT(年, 9), BITLSHIFT(月, 5), 日)
たとえば 年=12(2024年からの差分)、月=4、日=29 の場合は =BITOR(BITLSHIFT(12, 9), BITLSHIFT(4, 5), 29) で「6301」になります。これを「2024年4月29日」に復元するには BITAND と BITRSHIFT を使います。
| 取り出し | 数式 | 結果 |
|---|---|---|
| 年 | =BITRSHIFT(6301, 9) | 12 |
| 月 | =BITAND(BITRSHIFT(6301, 5), 15) | 4 |
| 日 | =BITAND(6301, 31) | 29 |
実務でここまでやる場面は多くありませんが、データベースのID設計・通信プロトコル・組み込み機器のレジスタ操作などでよく出てくる考え方です。「BITLSHIFTで詰めて、BITRSHIFTとBITANDで取り出す」がワンセットだと覚えておくと、ほかのツールに触れたときも応用が利きますよ。
よくあるエラーと対処法
BITLSHIFT関数で表示されるエラーと、その原因・対処法をまとめました。
#NUM! エラー
| 原因 | 対処法 |
|---|---|
| 数値が0未満 | 0以上の整数を指定してください |
| 数値が 2^48 − 1 より大きい | 281,474,976,710,655 以下の値を指定してください |
| シフト量の絶対値が53を超えている | −53 から 53 の範囲で指定してください |
| シフト結果が 2^48 − 1 を超える | シフト量を小さくするか、元の数値を小さくしてください |
特に多いのは「シフト結果がオーバーフローする」ケースです。=BITLSHIFT(1000000, 30) のように元の値が大きいときはシフト量を控えめにしましょう。
#VALUE! エラー
数値やシフト量に文字列を指定すると発生します。たとえば =BITLSHIFT("abc", 2) や、空白文字が混じったセルを参照しているときに起こります。セル参照先が数値かどうかを確認してみてください。文字列に見える数値はVALUE関数で数値に変換できますよ。
#NAME? エラー
関数名のスペルミスで発生します。「BITSHIFT」「BIT_LSHIFT」など似た名前で書いていないかチェックしてみてください。正しくは BITLSHIFT(ビットエルシフト)です。
BITRSHIFT関数やほかのビット演算関数との違い
Excelにはビット演算に関連する関数がいくつかあります。それぞれの役割を整理しておきましょう。
| 関数名 | 機能 | 使用例 |
|---|---|---|
| BITLSHIFT | ビットを左にシフト(値が大きくなる) | =BITLSHIFT(5, 2) → 20 |
| BITRSHIFT | ビットを右にシフト(値が小さくなる) | =BITRSHIFT(20, 2) → 5 |
| BITAND | 2つの数値のビット単位AND(論理積) | =BITAND(5, 3) → 1 |
| BITOR | 2つの数値のビット単位OR(論理和) | =BITOR(5, 3) → 7 |
| BITXOR | 2つの数値のビット単位XOR(排他的論理和) | =BITXOR(5, 3) → 6 |
BITLSHIFT と BITRSHIFT は逆の操作です。左シフトは値を大きく、右シフトは値を小さくします。覚え方は「Left(左)で Large(大きく)」ですね。
BITAND・BITOR・BITXOR は2つの数値のビットを比較する関数です。BITLSHIFTとは用途が異なりますが、組み合わせて使うことで柔軟なビット操作が可能になりますよ。
用途別の使い分けチャート
「やりたいこと」から逆引きできるよう整理しました。
| やりたいこと | 使う関数 |
|---|---|
| 値を2倍・4倍・8倍したい | BITLSHIFT |
| 値を1/2・1/4・1/8したい | BITRSHIFT |
| 特定のビットを立てたい | BITLSHIFT + BITOR |
| 特定のビットを確認したい | BITLSHIFT + BITAND |
| 特定のビットを反転したい | BITLSHIFT + BITXOR |
| 複数の値を1セルにまとめたい | BITLSHIFT + BITOR |
| まとめた値を取り出したい | BITRSHIFT + BITAND |
このチャートを見れば、「どの関数を組み合わせればよいか」が直感的にわかりますね。
POWER関数と何が違う?
=BITLSHIFT(1, 10) と =POWER(2, 10) はどちらも結果が「1024」になります。では、どう使い分ければよいのでしょうか。
| 観点 | BITLSHIFT | POWER |
|---|---|---|
| 計算対象 | 整数のビット演算 | 一般的なべき乗(小数・負数OK) |
| 上限 | 2^48 − 1 | Excelの数値上限(2^1023付近) |
| 速度 | ビット演算なので軽量 | 浮動小数点演算 |
| 用途 | ビットマスク・フラグ管理 | 通常の計算・指数増加 |
ビットを意識した処理(フラグ・マスク・データ圧縮)には BITLSHIFT、純粋なべき乗計算(金利・指数関数など)には POWER、と覚えておけば迷いません。
まとめ
この記事では、ExcelのBITLSHIFT関数について解説しました。
- BITLSHIFT関数は、数値を指定ビット数だけ左にシフトする関数
- 左に1ビットシフトするごとに値が2倍になる
- シフト量に負の値を指定すると右シフトになる
- 数値は 0 以上 2^48 − 1 以下、シフト量の絶対値は53以下
- 2のべき乗の一覧、KB・MB・GB の換算、フラグ管理、データ圧縮などに活用できる
- BITAND・BITOR・BITRSHIFT と組み合わせれば、特定ビットの操作や復元が可能
ビット演算はなじみが薄いかもしれませんが、仕組みさえ理解すればシンプルです。まずは =BITLSHIFT(1, 3) のようなかんたんな数式から試して、慣れてきたら BITOR と組み合わせたフラグ管理にチャレンジしてみてくださいね。
