#実現したいこと
前回値が0の時だけシートに記入されないようにしたい
https://teratail.com/questions/196217#reply-290859
という質問をこのサイトでさせてただいた話の続きなのですが、0の時値がシートに入らないようにすることができたので、それを踏まえてスプレットシートの中に値が入っていた時はK列を、入っていなかった時はJ列を別のシートの指定した列に表示させるようなものを作りたいです。
##発生している問題・エラーメッセージ
setValuesで値をセットする時に範囲のセルすべてを指定した範囲に当てはめてループをしているためループごとに値が全部変更されていて最後のセルに値が入っているかいないかでどちらかの結果しただせていない?
デバッグでみた所、ループ部分は正常に動くのと、値を正しくとることはできているようです。
## 概要のソースコード
【コードgs】
function copylist() { //コピー元のスプレットシートを取得する var ss = SpreadsheetApp.getActiveSpreadsheet(); var ss_copyFrom = ss.getSheetByName("シート1"); var copyValue = ss_copyFrom.getRange("L2:L299").getValues();//コピー元のシートの中のセルを指定 var copyValue2 = ss_copyFrom.getRange("J2:J299").getValues();//コピー元のシートの中のセルを指定 var copyValue3 = ss_copyFrom.getRange("K2:K299").getValues();//コピー元のシートの中のセルを指定 //コピー先のスプレットシートのidを指定 var ss_copyTo = SpreadsheetApp.openById('×××××××××××××'); var sheet_copyTo = ss_copyTo.getSheetByName('シート2');//コピー先のスプレットシートの中のシート名 //コピー先のシートの中のセルを指定して、コピー実行 for(var i=2;i<=300;i++){ if(ss_copyFrom.getRange(i,11).isBlank()){ sheet_copyTo.getRange("I3:I300").setValues(copyValue3); sheet_copyTo.getRange("O3:O300").setValues(copyValue3); }else{ sheet_copyTo.getRange("I3:I300").setValues(copyValue2); sheet_copyTo.getRange("O3:O300").setValues(copyValue2); } sheet_copyTo.getRange("D3:D300").setValues(copyValue); } }
こちら側の文章であればエラーなどは起きませんが、setValuesで値をセットする時に範囲のセルすべてを指定した範囲に当てはめてループをしているために、ループごとに値が全部変更されていて最後のセルに値が入っているかいないかでどちらかの結果しただせていない?という問題が起きてしまいます。
これをC列に値が入っているかいないかで一つのセルごとに当てはめる方法がございましたらご教授いただけると幸いです。
##試したこと
function copylist() { //コピー元のスプレットシートを取得する var ss = SpreadsheetApp.getActiveSpreadsheet(); var ss_copyFrom = ss.getSheetByName("シート1"); var copyValue = ss_copyFrom.getRange("L2:L299").getValues();//コピー元のシートの中のセルを指定 var copyValue2 = ss_copyFrom.getRange("J2:J299").getValues();//コピー元のシートの中のセルを指定 var copyValue3 = ss_copyFrom.getRange("K2:K299").getValues();//コピー元のシートの中のセルを指定 //コピー先のスプレットシートのidを指定 var ss_copyTo = SpreadsheetApp.openById('×××××××××××××'); var sheet_copyTo = ss_copyTo.getSheetByName('シート2');//コピー先のスプレットシートの中のシート名 var endrow = Number(sheet_copyTo.getLastRow()) + 1; //最終行の位置を取得 var lastColumn = array[0].length; //カラムの数を取得する var lastRow = array.length; //行の数を取得する sheet_copyTo.getRange(endrow,1,lastRow,lastColumn).setValues(array); for(var i=2;i<=300;i++){ if(ss_copyFrom.getRange(i,11).isBlank()){ sheet_copyTo.getRange(i,9).appendRow(copyValue3); sheet_copyTo.getRange(i,15).appendRow(copyValue3); }else{ sheet_copyTo.getRange(i,9).appendRow(copyValue2); sheet_copyTo.getRange(i,15).appendRow(copyValue2); } sheet_copyTo.getRange(i,4).setValues(copyValue); } }
この状態だと
ReferenceError: 「array」が定義されていません
と表示されてしまいます。

回答1件
あなたの回答
tips
プレビュー