重複するデータがあるスプレッドシートのフィールドから、実数(重複を除いた数)を調べる方法。
姓 | 名 | 性別 |
田中 | 花子 | 女性 |
鈴木 | 太郎 | 男性 |
田中 | 花子 | 女性 |
鈴木 | 治郎 | 男性 |
鈴木 | 太郎 | 男性 |
佐藤 | よしこ | 女性 |
上記のようなシートがあって、重複を除いた実数(この表だと4人)を調べるとする。
以下のコードの流れとしては、二次元配列にこの表のデータ(先頭行を除く)を入れて、姓+名+性別を結合した検索元データ(entryName)を作り、それと同じように結合した複数の検索先データ(checkName)を、それぞれ照らし合わせていき、重複している場合は、姓を空白にする。次からは姓が空白の場合はチェック済みなので飛ばす。
以上を繰り返しすることで1処理完了ごとに回数を1カウントしていき、重複を除いた実数が(tmpCounter)に入っていく。
//重複を除いた人数を計算する
var itemData= [[]];//リスト格納用配列の宣言
var StartRow = 2;//リストの開始行を宣言して代入
var dlastRow = sta1.getLastRow();//データの入っている最終行数の取得
itemData = sta1.getRange(StartRow,1,dlastRow-1,2).getValues()//配列itemDataにセル値を押し込む
var tmpCounter = 0; //アイテム発生数カウンタ変数宣言と代入
for (var i = 0; i<itemData.length ; i++){
if (itemData[i][0] == ""){continue}//カウント済のアイテムで空白が既にセットされていればスルー
for (var j = i+1 ;j<itemData.length; j++){
var entryName = itemData[i][0] + itemData[i][1] + itemData[i][2];
var checkName = itemData[j][0] + itemData[j][1] + itemData[j][2];
if (entryName == checkName){ //同じアイテムが後方に見つかったら
itemData[j][0]=""; //同じアイテムの2個目以降のデータを空白にする
}
}
tmpCounter += 1; //アイテム発生数カウンターに1加える