0

以下に、エラーをスローする比較的単純なコードをいくつか示します:「NaNを(クラス)に変換できません」。

私がやりたいのは、いくつかのセルをある場所から別の場所にコピーすることだけです!

このコードの何が問題なのか、誰か教えてください。

よろしくお願いします。

function myFunction() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet 1');   
  var values = sheet.getDataRange().getValues()  

  for( var row = values.length -1; row >= 0; --row )
    if (values[row][5] == 'Here')
     var maxRows = sheet.getMaxRows()
     var startRow = (row)+1
     var numRows = (maxRows)-(row)
     var Range = sheet.getRange(startRow, 3, numRows, 3).getValues()
     sheet.getRange(row, 3, numRows, 3).setValues(Range)     // (row, column, numRows, numColumns)      
  }

したがって、コードがうまくいけば示すように、範囲 C:E のセルをコピーしたいのですが、行 x のみを getMaxRows() にコピーします。ここで、x は、列 F で見つかった「Here」の行番号に 1 を加えたものです。これを同じ列 C:E に貼り付けますが、元の列よりも 1 行高くします (列 F の「ここ」と同じ行に)。

どんな助けでも大歓迎です。ご覧いただきありがとうございます。

編集:エラーはこの行にあります:

var Range = sheet.getRange(startRow, 3, numRows, 3).getValues()

私のシートでは、コピーするセルは、空白のセルや空白の行全体を数えることができました。これが問題の原因になっている可能性はありますか?

4

1 に答える 1

1

コードではなく説明から始めてください(ループと条件で {} を使用しないのはなぜですか?)これを試すことをお勧めします

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet 1');   
  var values = sheet.getDataRange().getValues()  
  var maxRows = sheet.getLastRow()
  var datatoCopy = []   
  for( var row = values.length -1; row >= 0; --row ){
    if (values[row][5] == 'here'){
     var whereToCopy = row+1
     Logger.log(whereToCopy);
     break
     }
     }
   for(row=whereToCopy-1;row<maxRows;++row){
    datatoCopy.push([values[row][2]+'**']);// store column data in an array - remove the ** that I used to see what was copied ;-)
    }
    Logger.log(datatoCopy)
sheet.getRange(whereToCopy, 5, datatoCopy.length, 1).setValues(datatoCopy);// overwrite data to column E
}

あなたのコメントに従って、このバージョンを試してみませんか?

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet 1');   
  var values = sheet.getDataRange().getValues()  
  var maxRows = sheet.getLastRow()
  var datatoCopy = []   
  for( var row = values.length -1; row >= 0; --row ){
    if (values[row][5] == 'here'){
     var whereToCopy = row
     Logger.log(whereToCopy);
     break
     }
     }
   for(row=whereToCopy-1;row<maxRows-1;++row){
    var rowData=[]
    rowData.push(values[row+1][2]+'*C*');// I added these 'indicators' to show what happens... delete them when the result is ok ;-)
    rowData.push(values[row+1][3]+'*D*');//
    rowData.push(values[row+1][4]+'*E*');//
    datatoCopy.push(rowData);// store column data in an array - remove the ** that I used to see what was copied ;-)
    }
    Logger.log(datatoCopy)
sheet.getRange(whereToCopy, 3, datatoCopy.length, datatoCopy[0].length).setValues(datatoCopy);// overwrite data to column E
}
于 2013-02-11T09:35:05.043 に答える