こんにちは、ぬいぐるみです。
今回はGAS(Google Apps Script)で正規表現を使ってIF文の判定を行う方法について書いていきます。
正規表現で判定できるものならIPアドレス以外にも使えます。
自分でも苦労したので備忘録がてら……。
テストでこんな感じのシートを用意しておきます。
A列に入力されている値を確認して、IPアドレスだったらB列に○を入れるサンプルスクリプトを作っていきます。
ソースコード
- //IPアドレスの正規表現
- let regex = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/;
- function myFunction() {
- const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- let range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
- // 値を取得する
- const values = range.getValues();
- //配列に入れた値をfor文で繰り返す
- for (let i = 0; i < values.length; i++) {
- //1行目の正規表現を使って判定
- if(values[i].toString().match(regex) != null ){
- sheet.getRange(i+1, 2).setValue("○");
- }
- }
- }
ポイント
values(シートの範囲を配列に入れたもの)は配列なので0から始まります。
つまりvalues[0]にはセルA1の値が入っています。
values[0]……セルA1
values[1]……セルA2
values[2]……セルA3
そのため、15行目ではiに1プラスしてシート側に合わせています。
15行目では「regex内の正規表現を判定して、nullじゃなかったら(正規表現と一致してたら)丸つけてね」というif文です。
valuesは型がobjectであり、matchはString型にしか使えないので、toStringを使ってobject型からString型に変更してあげています。
余談ですが、ここでtoStringをつけないと「TypeError: values[i].match is not a function」というエラーが出ます。お気をつけて。(3敗)
無事にIPアドレスのみに丸がつけられました。