Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

列にある値を6分割して別シートに転記していく

解決したいこと

TemplateというシートB列にある値を格納し、上から6つの値を2列×3行でPage1というシートに,また続きの6つの値をPage2というシートに, Page3に, ... とシートを自動作成しながら転記していくスクリプトを書きました。

chatgptに書いてもらったのですがどうもB列の値の格納がうまくいっていないようで、Page2から格納すべき値が飛んでしまいます。
初歩的な質問で恐縮ですがどうしたらよいでしょうか。

発生している問題・エラー

function transferData2() {
  var sheetName = "Template";  // データを取得するシートの名前
  var columnNumber = 2;  // データを取得する列の番号(B列の場合は2)
  var dataRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName).getDataRange().getValues();
  
  var rowsPerPage = 3;  // 1ページあたりの行数
  var columnsPerPage = 2;  // 1ページあたりの列数
  var dataPerPage = rowsPerPage * columnsPerPage;
  
  var totalPages = Math.ceil(dataRange.length / dataPerPage);  // データを転記する必要があるページ数
  
  for (var page = 1; page <= totalPages; page++) {
    var pageName = "Page" + page;
    var pageValues = [];
    
    var startRow = (page - 1) * rowsPerPage;

    var endRow = Math.min(startRow + rowsPerPage, dataRange.length);
    
    for (var row = startRow; row < endRow; row++) {
      var rowData = [];
      for (var column = (page - 1) * columnsPerPage; column < page * columnsPerPage; column++) {
        var dataIndex = row * columnsPerPage + column;
        if (dataIndex < dataRange.length) {
          rowData.push(dataRange[dataIndex][columnNumber - 1]);
        } else {
          rowData.push("");
        }
      }
      pageValues.push(rowData);
    }
    
    var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(pageName);
    newSheet.setColumnWidth(1, 450); // A列の幅を318に設定
    newSheet.setColumnWidth(2, 318); // B列の幅を318に設定
    for (var i = 1; i <= rowsPerPage; i++) {
      newSheet.setRowHeight(i, 325); // 行の高さを325に設定
      newSheet.getRange(i, 1, 1, columnsPerPage).setVerticalAlignment("top"); // A列とB列を上付きにする
    }
    newSheet.getRange(1, 1, pageValues.length, pageValues[0].length).setValues(pageValues);
  }
}
0

1Answer

forループ内でcolumnのインデックスを計算する方法が間違っていそうですね。

該当部分

for (var column = (page - 1) * columnsPerPage; column < page * columnsPerPage; column++) {

修正するとしたらこのような感じで挙動はどうでしょうか?

for (var column = 0; column < columnsPerPage; column++) {
1Like

Comments

  1. うまくいきました! 早速ありがとうございました。
  2. 良かったです(^^)いいね貰えると喜びます!

Your answer might help someone💌