1. HOME
  2. Google
  3. 備忘録:IPアドレス分割&並び替え(Apps Script)

これはワタクシの備忘録。

ウェブサイトを安全・安心・安定の「3定」に取り組むべくw、明らかに不正な接続元のIPアドレスをGoogleスプレッドシートに記録している。

これらのIPアドレスは、例えば、htaccess ファイルにIPアドレスを書き込んで接続を断つようにする訳だが、その際に、スプレッドシート上で IPアドレスを「昇順」に並べ替えしてから、IPアドレスをコピーして書き込むようにしたい願望がでてきた。(^^ゞ

そこで、GoogleスプレッドシートのApps Scriptで書いたコードをバックアップの意味で控えておく。

A列にIPアドレス、B〜E列に分解した文字列を記録、最後にB〜E列の順で並べ替え設定を実行するコード。

function splitIPsToMultipleColumns() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const startRow = 2;
  const columnA = 1;
  const columnB = 2;
  const columnC = 3;
  const columnD = 4;
  const columnE = 5;

  const lastRow = sheet.getLastRow();

  const ipAddresses = sheet.getRange(startRow, columnA, lastRow - startRow + 1, 1).getValues().flat();

  const results = ipAddresses.map(ip => {
    const octets = ip.split('.').filter(octet => octet !== '');
    // 4列に収まるように、足りない部分は空文字列で埋める
    while (octets.length < 4) {
      octets.push('');
    }
    return octets.map(octet => [octet]);
  });

  sheet.getRange(startRow, columnB, results.length, 4).setValues(results);

  // 並べ替え対象範囲を取得
  const range = sheet.getRange(startRow, columnA, results.length, 5);

  // B, C, D, E列を複合キーとして昇順にソート
  range.sort([{ column: columnB, ascending: true },
               { column: columnC, ascending: true },
               { column: columnD, ascending: true },
               { column: columnE, ascending: true }]);
}

IPアドレスを調べたりしてリスト化する時に参考になるかも。

誰かのお役に立てれば幸いです。