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を出力します。
株式会社フォトラクションでは一緒に働く仲間を募集しています