例文を使って繰り返し業務を時短

【GAS】シート間で複数データでマッチングしたデータを転記する

【GAS】シート間で複数データでマッチングしたデータを転記する GAS

複数のデータでマッチングして新規シートに転記する

function myfanction() {
var objDIC = {}; //辞書オブジェクトを作成
var myKey;
var i;

//アクティブシート:キーとアイテム取得
var sheet1 = SpreadsheetApp.getActiveSheet();
var range1 = sheet1.getDataRange();
var data1 = range1.getValues();
for (i = 1; i < data1.length; i++) {
objDIC[data1[i][0]] = data1[i][1] + "," + data1[i][4] + "," + data1[i][19];
}

//アクティブシートの右隣のシート:キーとアイテム取得
var sheet2 = sheet1.getNextSibling();
var range2 = sheet2.getDataRange();
var data2 = range2.getValues();
for (i = 1; i < data2.length; i++) {
objDIC[data2[i][0]] = data2[i][2] + "," + data2[i][4] + "," + data2[i][6];
}

//「objDIC」からkeyを、配列変数(一次)に取り出す
myKey = Object.keys(objDIC);

//新規シートへ出力
var newSheet = SpreadsheetApp.getActive().insertSheet();
newSheet.setName(sheet1.getName() + "_" + Utilities.formatDate(new Date(), "JST", "h時mm分ss秒"));

for (i = 0; i < myKey.length; i++) {
newSheet.getRange(i + 2, 1).setValue(myKey[i]);
var items = objDIC[myKey[i]].split(",");
newSheet.getRange(i + 2, 2, 1, 3).setValues([items]);
}

SpreadsheetApp.flush();
Browser.msgBox("完了");
}

解説

  • アクティブシート:キーとアイテム取得の箇所の解説
    • 最初に、 getActiveSheet() メソッドを使用して、現在アクティブなシートのオブジェクトを sheet1 という変数に格納しています。
    • その後、 getDataRange() メソッドを使用してシート内のすべてのセル範囲を取得し、 getValues() メソッドを使用してその範囲内のデータを取得しています。これらのデータは data1 という二次元配列に格納されます。
    • 次に、for ループを使用して、data1 配列の各行に対して、キーとアイテムを objDIC という辞書オブジェクトに追加します。具体的には、objDIC[data1[i][0]]data1[i][1],data1[i][4],data1[i][19] を結合した文字列を格納しています。data1[i][0] は、現在処理中の行の最初の列の値であり、これが objDIC のキーになります。data1[i][1]data1[i][4]data1[i][19] は、それぞれ現在処理中の行の2番目、5番目、20番目の列の値であり、これらが objDIC のアイテムになります。
  • 新規シートへ出力のfor~の解説
    先ほど取得した辞書オブジェクト objDIC の中からキーを一つずつ取り出し、新規に作成したシートに書き込む処理を行っています。
    • まず for ループの条件式 i < myKey.length は、配列 myKey の要素数分だけループを回します。ここで myKey は、先ほど Object.keys() メソッドを使って objDIC のキーの一覧を取得したものです。
    • newSheet.getRange(i + 2, 1).setValue(myKey[i])
      : newSheet の指定したセルに、辞書オブジェクトのキーを書き込みます。ここでは i2 を加えているのは、先頭行に列名があるためです。
    • var items = objDIC[myKey[i]].split(“,”)
      : 辞書オブジェクトのキーを使用して、対応するアイテムを取得し、カンマ区切りで分割して items に代入します。
    • newSheet.getRange(i + 2, 2, 1, 3).setValues([items])
      : newSheet の指定したセルに、アイテムを書き込みます。ここでは i2 を加えているのは、先頭行に列名があるためです。また、setValues() メソッドには配列を引数として渡していますが、[items] とすることで一次元配列を二次元配列に変換しています。そして、第1引数で指定したセルに対して、第2引数で指定した大きさのセル範囲を作成し、そこにアイテムを書き込んでいます。

コメント

タイトルとURLをコピーしました