🐣

最終行まで順番に数字をつけるが、同じ数字がある場合は同じ番号を割り当てる方法

2023/04/23に公開

背景・概要

次のような列がある場合、この記事のタイトルの通り「最終行まで順番に数字をつけるが、同じ数字がある場合は同じ番号を割り当てる」ということを自動で行うというのが今回のGASです。

 aaa
 bbb
 bbb
 ccc
 ddd
 ddd

この場合は、同じ値がある場合でも、それらに対しては同じ番号が割り当てられます。

1 aaa
2 bbb
2 bbb
3 ccc
4 ddd
4 ddd

ということを行います。

GAS

function preparationCount() {
  // シート「シート1」を取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート1");

  // 最終行を取得
  var lastRow = sheet.getLastRow();
  if (lastRow < 2) {
    // 1行以下の場合は処理を中断
    return;
  }

  // A列に値を設定する
  var bValues = sheet.getRange("B2:B" + lastRow).getValues();
  var aValues = [];
  aValues.push([1]); // A2に1を振る
  var currentValue = bValues[0][0];
  for (var i = 1; i < bValues.length; i++) {
    if (bValues[i][0] === currentValue) {
      aValues.push([aValues[i - 1][0]]);
    } else {
      currentValue = bValues[i][0];
      aValues.push([aValues[i - 1][0] + 1]);
    }
  }
  sheet.getRange("A2:A" + lastRow).setValues(aValues);
}

おわりに

今回は、とあるデータを突合する時の連番部分だけを抜き出したものです。
あまり使う機会はないと思いますが、備忘録として残しておきます。

GitHubで編集を提案

Discussion