ショボ短歌会

スプレッドシート
GASの繰り返し処理について
例えばB1~C4の範囲で表があり、A1に好きな数字を入力するようにして、A1に入れた数だけD列以降にB1~C4の表をコピペすることって可能ですか?
forで考えていたのですが、今のところ下のようなイメージで、iを列で考えて行は固定で良いと思ってるのですが、条件式のところはどうしたら良いでしょうか?
for(let i=4; ???; i+2)

伝わりにくかったらすみません。GAS初心者です。分かりにくいところを聞いていただけると助かります。

質問者からの補足コメント

  • エラーでなぜかお礼が送れなかったのでこちらで
    回答ありがとうございます
    D1からまずアクティブにしてそこにコピペで貼り付けたいので、iは初め4にしたく、Range(1,i)のような形でそこから数を2ずつ増やして(表の列数が2なので)いきたいのでA1の数そのままだとおかしくなってしまうかと思ってます。

      補足日時:2021/08/26 17:01

A 回答 (2件)

No1です。



No1の回答は、Rangeで表をまとめてコピペできることを踏まえて、制御変数「i」はコピーの回数(=ループの繰り返し回数)を意味するものとして回答しています。
(多分、これが一般的な考え方だと思います)

>iは初め4にしたく、~~
desitinationの列番号(左端)を制御変数にしたいってことでしょうか?
スクリプトは好きに書けばよいのでそれでもかまいませんけれど、その場合は、終了値は最後の列番号ってことになりますよね?

2列ずつ増加してゆくものとして、1回なら4、2回なら6・・・ってことになるので、終了値(=列番号)は「4+繰り返し数*2 - 2」となるはずと思います。
これを計算すれば、「繰り返し数 * 2 + 2」ということになるのではないでしょうか?
上記は最後の列番号を示しているので、ループの条件は「<=」になります。
    • good
    • 0
この回答へのお礼

助かりました

なるほどです。
iはループの回数と考えると、、、その先どうすれば良いかちょっと思いつきません難しいです。

「繰り返し数 * 2 + 2」
こちらで出来ました!

お礼日時:2021/08/26 18:45

こんにちは



GASはまったく存じませんけれど・・・

ドキュメントを見ると、RangeにはCopyメソッドがあるようなので、A1の値の回数だけ表全体のCopyを繰り返せば済むのではないでしょうか?
https://developers.google.com/apps-script/refere …

なので繰り返しは、
 repeat = sheet.getRange("A1").getValue();
 for ( i = 0; i < repeat; i++ )
みたいな感じになるのでは?

※ 実際には、A1の値が有効な数値であることのチェック等が必要になると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
D4からまずアクティブにしてそこにコピペで貼り付けたいので、行は固定で列のiは初め4にしたく、Range(1,i)のような形でそこから数を2ずつ増やして(表の列数が2なので)いきたいのでA1の数そのままだとおかしくなってしまうかと思ってます。

お礼日時:2021/08/26 16:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!