Photoruction工事中!

Photoructionの開発ブログです!

スプレッドシートのセルを編集する度に、自動で該当のセル内に連番を振る方法

QAエンジニアの山本です。

この記事では、GAS(Google Apps Script)を使用して、スプレッドシートを編集する度に、自動で該当のセル内に連番を振る方法を紹介します。

※昨年も同様(https://kojichu.photoruction.com/entry/adcale20221203)の記事を書きましたが、もっと簡単に連番を振る方法を見つけたので、今回はその方法をご紹介します!

完成イメージ

まずは完成イメージからご覧下さい。

背景

私は新しいテストケースを作成する度に、100個以上の連番を振っています。より効率的にテストケースを作成するために、私は連番を振る作業を自動化しようと決意しました。

自動で連番を振る方法

  • GAS(Google Apps Script)を使用します。
  • ユーザーが対象のセルの値を変更した時に、トリガーの機能を使用してGASの関数を実行します。
  • 実行する関数は、現在のセルの値を取得し、改行ごとに文頭に連番を振り、該当のセルに出力します。

具体的な設定手順

手順1.連番を振りたいスプレッドシート上のシートを開く

手順2.連番を振りたいシート名にコピーする

※(例)完成イメージのGIF画像では「テスト実施シート」

手順3.連番を振りたい列を下記の要領で数値変換する

連番を振りたい列:数値

A列:1

B列:2

C列:3

(以下省略)

手順4.以下のコードの「テスト実施シート」を手順2で取得した値に、「4」を手順3で取得した値に置き換える

//「テスト実施シート」以外のシートorD列以外のセルor空文字の時は処理を終了
if(cell.getSheet().getName() !== "テスト実施シート" || cell.getColumnIndex() !== 4 || !cell.getValue()){
    return;
}

手順5.スプレッドシート拡張機能>Apps Scriptをクリックする

手順6.コードを下記コードに置き換えた後に、保存する

※6~8行目は手順4で作成したコード

function giveConsecutiveNumber() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const cell = sheet.getCurrentCell();

  //「テスト実施シート」以外のシートorD列以外のセルor空文字の時は処理を終了
  if(cell.getSheet().getName() !== "テスト実施シート" || cell.getColumnIndex() !== 4 || !cell.getValue()){
    return;
  }
  const lines = String(cell.getValue()).split("\n");
  let nonNumericLine;
  let output = "";
  for (let i = 0; i < lines.length; i++) {
    nonNumericLine = lines[i].replace(/^[0-90-9]+\.|^\./,"");
    // 最終行以外は改行を文末につける
    if(i < lines.length - 1){
      output += (i + 1) + "." + nonNumericLine + "\n";
    }else{
      output += (i + 1) + "." + nonNumericLine;
    }
  }
  cell.setValue(output);
}

手順7.サイドメニューのトリガーをクリック

手順8.「トリガーを追加」をクリック

手順9.下記の設定でトリガーを追加する

手順10.「保存」をクリック

手順11.アクセス権に関するモーダルを確認し、問題がなければ承認する

完成!

まとめ

上記の設定により、セルを編集する度に、自動で連番が振られるようになりました。

テストケース作成が完了したら、トリガーは不要なので、削除してくださいね。

最後まで、ご覧頂きありがとうございました。

おまけ(コードの解説)

function giveConsecutiveNumber() {
//中略
}

連番を振る関数です。

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const cell = sheet.getCurrentCell();

定数sheetに、スプレッドシートのUIに表示されているシートを代入します。

定数cellに、現在のセルを代入します。

  //「テスト実施シート」以外のシートorD列以外のセルor空文字の時は処理を終了
  if(cell.getSheet().getName() !== "テスト実施シート" || cell.getColumnIndex() !== 4 || !cell.getValue()){
    return;
  }

もし「現在のセルのシート名が「テスト実施シート」以外」or「現在のセルがD列以外」or「現在のセルが空」の時は、関数の実行を終了します。

  const lines = String(cell.getValue()).split("\n");
  let nonNumericLine;
  let output = "";

定数linesに、現在のセルを改行ごとに分割した配列を代入します。

変数nonNumericLineを宣言します。

変数outputに、空文字を代入します。

  for (let i = 0; i < lines.length; i++) {
    nonNumericLine = lines[i].replace(/^[0-90-9]+\.|^\./,"");
    // 最終行以外は改行を文末につける
    if(i < lines.length - 1){
      output += (i + 1) + "." + nonNumericLine + "\n";
    }else{
      output += (i + 1) + "." + nonNumericLine;
    }
  }

定数linesの既存の行番号を取り除き、新しく行番号を振った後に、変数outputに代入します。

  cell.setValue(output);

現在のセルに、変数outputを出力します。

株式会社フォトラクションでは一緒に働く仲間を募集しています