いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)IPアドレスが指定範囲内かどうか判定する

 Googleスプレッドシートで、あるIPアドレス(IPv4アドレス)が指定した範囲内にあるかどうを判定する方法についてです。
 範囲の指定については単純に、最小値と最大値をそれぞれIPアドレスで指定するものとします。

  • IPアドレスを1つの数値に換算することで大小を比較し、範囲内にあるかどうかを判定することができます。

手順

 B列に判定対象となるIPアドレスが、C列とD列にはそれぞれ範囲のうち最小のアドレスと最大のアドレスが入力されています。
 これに対し、E3セルに式を入力して下方にコピーし、B列のIPアドレスが範囲内に収まっているか判定しています。
 結果は単純に範囲内ならTRUE、範囲外ならFALSEを表示するようにしています。

 E3セル

=ISBETWEEN(
MMULT(SPLIT(B3,"."),{2^32;2^24;2^8;1}),
MMULT(SPLIT(C3,"."),{2^32;2^24;2^8;1}),
MMULT(SPLIT(D3,"."),{2^32;2^24;2^8;1})
)

 SPLIT関数を使ってアドレスを4つのオクテットに分割し、MMULT関数により配列「{2^32;2^24;2^8;1}」との積和を計算しています。SUMPRODUCTでもいいですがMMULTの方が短いためこちらを使っています。この値は0~4294967295(=2^32-1)の整数となり、これを比較することで範囲内かどうかの判定を行っています。比較にはGoogleスプレッドシートオリジナルのISBETWEEN関数を使っています。
 備考ですが、SPLITした4つの数値をTEXT関数で3桁固定にして連結して比較する方法も考えられます。単純ですが式がかえって長くなることもあり、積和をとる方法を用いています。いずれ、1つの値に換算する考え方はIPアドレスのソートにも応用でき、分割して4つの列をキーにしてソートするよりもソート自体は簡単になります。一方で文字列操作を要するため一長一短といったところです。


 参考までに、同じ式による他の判定結果の例を示します。