ExcelのBITLSHIFT関数の使い方|ビット左シフトの基本と実用例

スポンサーリンク

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進数元の値との比
元の値00113× 1
左に1シフト01106× 2
左に2シフト110012× 4
左に3シフト1100024× 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))
01
416
8256
101,024
1665,536
201,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)
閲覧01
編集12
承認24
管理38

ある社員に「閲覧 + 編集 + 承認」の権限を持たせたい場合は、それぞれの値を 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
BITAND2つの数値のビット単位AND(論理積)=BITAND(5, 3) → 1
BITOR2つの数値のビット単位OR(論理和)=BITOR(5, 3) → 7
BITXOR2つの数値のビット単位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」になります。では、どう使い分ければよいのでしょうか。

観点BITLSHIFTPOWER
計算対象整数のビット演算一般的なべき乗(小数・負数OK)
上限2^48 − 1Excelの数値上限(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 と組み合わせたフラグ管理にチャレンジしてみてくださいね。

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