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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Q&A

解決済

2回答

4756閲覧

スプレッドシート スクリプトエラー【after for-loop】の解決について

otaoma

総合スコア6

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

0グッド

0クリップ

投稿2022/04/12 00:51

簡単な内容

スプレッドシートで、A~S列まであり、2000程の行があります。
列【R】が破棄となった場合に、別シート【破棄】に移動させたく試してみたのですが、
//1行目(見出し)をsprt_arrayに追加
for(let i=0; i<1; i++){
sprt_array.push(sprt_sh_data[i]);
}
上記でエラーが発生し、どこが間違っているか解決できず困っています。
初歩的な質問かもしれませんが、ご教示の程、よろしくお願いいたします。

エラーメッセージ
構文エラー: Missing ; after for-loop initializer. 行: 22 ファイル: 再配列

発生している問題・エラーメッセージ

### 該当のソースコード function archive(){ //スプレッドシート情報 const ss_ID = 'ID入力済み' const sprt_sh_name = '管理' const arch_sh_name = '破棄'     //配列の初期化 const sprt_array = []; const arch_array = []; //ID、シート名を指定してシートを取得 const ss = SpreadsheetApp.openById(ss_ID); const sprt_sh = ss.getSheetByName(sprt_sh_name); //シートの行数をA列で数える const sprt_values = sprt_sh.getRange('A:A').getValues(); //空白の要素を除いた長さを取得 const sprt_lastrow = sprt_values.filter(String).length; //配列で取得(1行目、1列、A列の長さ、取得する列数) const sprt_sh_data = sprt_sh.getRange(1,1,sprt_lastrow,19).getValues(); //1行目(見出し)をsprt_arrayに追加 for(let i=0; i<1; i++){ sprt_array.push(sprt_sh_data[i]); } //2行目から「破棄」かどうかを判定 for (let i=1; i< sprt_lastrow; i++){ //「破棄」の場合はarch_arrayへ追加 if(sprt_sh_data[i][17] == '破棄'){ arch_array.push(sprt_sh_data[i]); //「破棄」以外の場合はsprt_arrayへ追加 }else{ sprt_array.push(sprt_sh_data[i]); } } //シート名「管理」にsprt_arrayを書き込む sprt_sh.clearContents(); //シートを消す const sprt_array_lastcolum = sprt_array[0].length; //カラムの値を取得する const sprt_array_lastrow = sprt_array.length; //対応中シートの行数を取得する sprt_sh.getRange(1,1,sprt_array_lastrow,sprt_array_lastcolum).setValues(sprt_array); //書き込む //シート名「破棄」にarch_arrayを書き込む const arch_sh = ss.getSheetByName(arch_sh_name); const arch_sh_values = arch_sh.getRange('A:A').getValues(); const arch_sh_lastrow = arch_sh_values.filter(String).length; const arch_array_lastcolum = arch_array[0].length; //カラムの値を取得する const arch_array_lastrow = arch_array.length; //行の数を取得する arch_sh.getRange(arch_sh_lastrow+1,1,arch_array_lastrow,arch_array_lastcolum).setValues(arch_array); //書き込む }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

解決策

次のいずれかを試してください。

  • クラシックエディタを使っている場合は、メニューの「実行」から、「Chrome V8を搭載した新しいApps Scriptランタイムを有効にする」を選択してください

イメージ説明

 

  • 新しいエディタを使っている場合は、左側にある歯車のアイコンをクリックし、

「Chrome V8ランタイムを有効にする」にチェックを入れてください。
イメージ説明

原因

ブロックスコープのローカル変数を宣言するための「let」は、一般的に、新しいバージョンのJavaScript(ES2015以降)で有効なキーワードです。

Google Apps Scriptでは、V8エンジンを有効にしていない場合、古いバージョンのJavaScriptに準拠した言語エンジンが使用されます。
すると、letは上述の機能を実現するためのキーワードではなく、単なる変数名として解釈されてしまいます。
V8エンジンが有効でない状態で

for(let i=0; i<1; i++){ }

を実行した場合
「let」という変数を置いた後、「;」を付けずに続けているとみなされ
「構文エラー: Missing ; after for-loop initializer.」が発生します。

投稿2022/04/12 12:37

編集2022/04/12 14:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

for(let i=0; i<1; i++){

この行の i=0 の後に ; がない、というエラーです。i=0; の間になにか目に見えない文字が入ってないでしょうか。

この行を、手で(コピペでなく)打ち直したら直るかもしれないですね。

投稿2022/04/12 04:07

int32_t

総合スコア21929

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otaoma

2022/04/12 04:41

回答していただき、ありがとうございます。 只今、手打ちで入力し直してみましたが、同じエラーとなりました。 何が悪いのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問