質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Google Apps Script

    1256questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

データ分割処理(GAS、JSに強い方、お知恵をください)

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 437

reotantan

score 251

 データ分割処理をしていますが、メインデータをほかのファイルに書き写す処理のfor文が回っておらず、困っております。

このスクリプトでなぜfor文が処理されていないのか先輩方から教えていただきたく、投稿いたしました。
またコード全体として、アルゴリズムの修正点などありましたら、ご教授ください。

よろしくお願いします。

function myFunction(input) {

  //スプレッドシートの取得
  var ss=SpreadsheetApp.getActive();
  //シートの取得
  var sheet=ss.getSheets()[0];
  //最後の列と分割単位の設定
  var Lastcolumn=sheet.getLastColumn();
  Logger.log("最後の列は"+Lastcolumn);

  var LastRow=sheet.getLastRow();
  Logger.log("最後の行は"+LastRow);

  var Columnnumber=(Lastcolumn-1)/input;
  Logger.log("分割単位"+Lastcolumn);

//ヘッダの取得
  var header=sheet.getRange(1,1,1,Lastcolumn).getValues();
  Logger.log("header"+header);
//メインデータの取得
  var mainData=sheet.getRange(2, 1,LastRow-1,Lastcolumn).getValues();
  Logger.log("mainData"+mainData[0][0]);
  Logger.log("mainData"+mainData[0][1]);
  Logger.log("mainData"+mainData[1][0]);
  Logger.log("mainData"+mainData[1][1]);

 //データの論理スイッチ
  var Switch=0;

//  シートを作成 注意点:シートの数がいくつになるかはinputで決まるのでinputと同じ配列を用意してやる
  for(var i = 1; i <= 2; i++){
    //新しいファイルを作成
     var s=SpreadsheetApp.create("分割ファイル"+i);
     var newSheet=s.getSheets()[0];

    //ヘッダーの値を入れる(for分で書き換える)
      newSheet.getRange(1,1).setValue(header[0][0]);
      newSheet.getRange(1,2).setValue(header[0][1]);

//データは入る      newSheet.getRange(2,1).setValue(mainData[0][0]);


//ここまではOK

    //メインデータを入れる
    if(Switch===0){
    for(var j=2;j<=Columnnumber+1;j++){
      for(var k=1;k<=Lastcolumn;k++){

        newSheet.getRange(j,k).setValue(mainData[j-2][k-1]);
        Logger.log("最初の処理");

        }
      Switch++;
    }
    }else{

      for(var j=2;j<=Columnnumber+1;j++){
        for(var k=1;k<=Lastcolumn;k++){
          newSheet.getRange(j,k).setValue(mainData[j][k-1]);
          Logger.log("最後の処理");
        }

        }
      }

    }

 }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • reotantan

    2018/10/09 21:36

    関数を実行で実施しています。inputに値を渡す方法として、シートに=関数(インプット)を入力したのですが、うまくいきませんでした。

    キャンセル

  • papinianus

    2018/10/10 08:25

    上手くいかないとは具体的にはどうなりますか?そのときログは?

    キャンセル

  • papinianus

    2018/10/10 17:03

    シートに`=myFunction(2)`とするとcreateを呼び出す権限がないというエラーになるため、{の直後くらいで、input=2;とかを挿入したところ正常に動作しました。このようにしてテストしていただけませんか?

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • Google Apps Script

    1256questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。