Googleスプレッドシートで、IPv4アドレスを並べ替える方法についてです。具体的には第nオクテットを第nのキーとして並べ替えます。
「テキストを列に分割」メニューを使って4列に分割すれば間違いなくできますが、ここでは関数で並べ替える例を試してみます。
「テキストを列に分割」メニューを使って4列に分割すれば間違いなくできますが、ここでは関数で並べ替える例を試してみます。
- QUERY関数を使ってIPアドレスを並べ替えることができます。
- SORT関数を使う方法もあります。
手順
B列にIPアドレスが並んでいます。
単純にソートしようとするとオクテット(0~255)ごとの区切りが考慮されないのでおかしな結果になります。
そこで関数を使って並べ替えをしてみます。
QUERY関数を使う方法
D3セルに次のように入力します。
D3セル
=QUERY({B3:B14,ARRAYFORMULA(SPLIT(B3:B14,"."))},"SELECT Col1 ORDER BY Col2,Col3,Col4,Col5")
QUERY関数の第1引数により「もとのIPアドレスと、そのIPアドレスを『.』で区切った4列」の計5列の行列を生成します(詳しくは下記参照)。
そして第2引数のORDER BY 句により2列目以降の4つの列を基準に昇順で並べ替え、SELECT句により1列目だけを表示させます。
ちなみに見出し(B2セル)を参照に含めるとSPLITで分割した列数が一致せずうまくいかないような気もしますが、実は問題ありませんので参考まで。
確定した様子です。
なお、上記の式の第1引数の内容だけを表示するとこのようになります。SPLIT関数で分割された値は数値になっているのがわかります。
QUERY関数を使うことで、この行列の2列目以降を並べ替えに使いつつ、1列目の値だけを表示させているというわけです。
D3セル
={B3:B14,ARRAYFORMULA(SPLIT(B3:B14,"."))}
SORT関数を使う方法
並べ替え専門の関数であるSORT関数を使う方法です。
D3セルに次のような式を入力し、上記例と全く同じ結果を得ています。
D3セル
=INDEX(SORT({B3:B14,ARRAYFORMULA(SPLIT(B3:B14,"."))},2,TRUE,3,TRUE,4,TRUE,5,TRUE),,1)
QUERY関数の例の最後の画像と同じ行列を生成し、SORT関数により2列目~5列目を基準にしてソートし、INDEX関数で1列目だけ取り出しています。
つくりはやや複雑な感じがしますが、式は若干短いです。