いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)IPアドレスを並べ替える

 Googleスプレッドシートで、IPアドレスを並べ替える方法についてです。
 「テキストを列に分割」メニューを使って4列に分割すれば間違いなくできますが、ここでは関数で並べ替える例を試してみます。

  • QUERY関数を使ってIPアドレスを並べ替えることができます。

手順

f:id:accs2014:20210213120401p:plain:right:w350

 B列にIPアドレスが並んでいます。
 単純にソートしようとするとオクテット(0~255)ごとの区切りが考慮されないのでおかしな結果になります。
 
 そこで関数を使って並べ替えをしてみます。

 

 D3セルに次のように入力します。

f:id:accs2014:20210213120405p:plain:w780

 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で分割した列数が一致せずうまくいかないような気もしますが、実は問題ありませんので参考まで。

 
 確定した様子です。

f:id:accs2014:20210213120409p:plain:w780

 

f:id:accs2014:20210213120413p:plain:right:w500

 なお、上記の式の第1引数の内容だけを表示するとこのようになります。SPLIT関数で分割された値は数値になっているのがわかります。
 QUERY関数を使うことで、この行列の2列目以降を並べ替えに使いつつ、1列目の値だけを表示させているというわけです。

 D3セル

={B3:B14,ARRAYFORMULA(SPLIT(B3:B14,"."))}