GASでシートAからシートBへ値をコピー

コメントないし、長くてごメソ

やりたいこと

コピー元のシートのA行と、コピー先のA行を比較する、そして同じ値を探す。コピー元のシートのA行の、どこかしらの値が、コピー先のA行のどこかしらの行の中にあればtrueとする。コピー元のシートのB行の値を、コピー先の一致したb行へ追加する。下記の画像を見てもらえれば早い。

注意点

コピー元のシート、コピー先のシート、いずれもシートのIDを指定している。また、下記のスクリプトを使用する際は、getSheetsやgetRange関数を使うときの、指定位置を示す番号の取り扱いに注意しよう。

実装

var hashColor2 = {};

function ring() 
{  
  var sheet = SpreadsheetApp.openById('17FNDl3iKQHusFI6K3IFmjUibsuhgN3CRbSnGUQnqK14');
  var sheet_To = sheet.getSheets()[0];
  var lastRow = sheet_To.getLastRow();

  for(var i = 1; i <= lastRow; i++) 
  {
      if(sheet_To.getRange(i, 1).getValues() != "")
      {   
        hashColor2[sheet_To.getRange(i, 1).getValues()] = sheet_To.getRange(i, 2).getValues();
      }
  }

until1(hashColor2);
}

function until1(arrayname)
{
    var ss_copyTo = SpreadsheetApp.openById('1DtH6QACaBynUJrrAG9qvP3CqYohX6px7rpDIh3m7Vi4');
    var sheet_copyTo = ss_copyTo.getSheets()[0];
    var lastRow = sheet_copyTo.getLastRow();
    for(var i = 1; i <= lastRow; i++) 
    {
        //コピー元の連想配列分だけループ
        for (var key in hashColor2) 
        { 
            if(    String(key) === String(sheet_copyTo.getRange(i, 1).getValues())    )
            {
              sheet_copyTo.getRange(i, 2).setValue( hashColor2[key] );
            }
        }
    }
}

 

コピー元のシート

コピー先のシート

 

整形前の実装

var hashColor2 = {};
/*
*
*
*
*1個目の関数
*
*
*/
function ring() 
{  
  var sheet = SpreadsheetApp.openById('17FNDl3iKQHusFI6K3IFmjUibsuhgN3CRbSnGUQnqK14');
  ///コピー先のスプレットシートの中のシート名
  var sheet_To = sheet.getSheets()[0];
  var lastRow = sheet_To.getLastRow();
  // 配列の初期化
  for(var i = 1; i <= lastRow; i++) 
  {
      if(sheet_To.getRange(i, 1).getValues() != "")
      {   
        //配列のkeyに対し値を設定する
        hashColor2[sheet_To.getRange(i, 1).getValues()] = sheet_To.getRange(i, 2).getValues();
//        Logger.log("配列のキー");
//        Logger.log(sheet_To.getRange(i, 1).getValues());
//        Logger.log("配列の値");
//        Logger.log(sheet_To.getRange(i, 2).getValues());
      }
  }

//作った連想排列
Logger.log(hashColor2);
//作った連想排列を関数の引数へ渡す
until1(hashColor2);
}
/*
*
*
*
*2個目の関数
*
*
*/
function until1(arrayname)
{
    //コピー先
    var ss_copyTo = SpreadsheetApp.openById('1DtH6QACaBynUJrrAG9qvP3CqYohX6px7rpDIh3m7Vi4');
    ///コピー先のスプレットシートの中のシート名
    var sheet_copyTo = ss_copyTo.getSheets()[0];
    ///コピー先のスプレットシートの最後の行を取得する
    var lastRow = sheet_copyTo.getLastRow();
    //コピー先のシートの行の分だけループする
    for(var i = 1; i <= lastRow; i++) 
    {
        //コピー元の連想配列分だけループ
        for (var key in hashColor2) 
        { 
//            Logger.log(      String(key)                                                                           );
            Logger.log(      String(sheet_copyTo.getRange(i, 1).getValues())    );

            if(    String(key) === String(sheet_copyTo.getRange(i, 1).getValues())    )
            {

              Logger.log("正解");
//              Logger.log(     sheet_copyTo.getRange(i, 2).getValues()    )
//              sheet_copyTo.getRange(i, 1).setValue(hashColor2[key]);
              sheet_copyTo.getRange(i, 2).setValue( hashColor2[key] );
            }
        }
    }
}

 

藤沢瞭介(Ryosuke Hujisawa)
  • りょすけと申します。18歳からプログラミングをはじめ、今はフロントエンドでReactを書いたり、AIの勉強を頑張っています。off.tokyoでは、ハイテクやガジェット、それからプログラミングに関する情報まで、エンジニアに役立つ情報を日々発信しています!

未整理記事