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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

1882閲覧

【GAS】チェックボックスにチェックが入っている場合のみ、データを反映させる

shirogohan

総合スコア14

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/11/18 02:58

前提

GAS初心者です。
今回作成したい同様のコードが調べても見つからず、初心者なりに作成していますが、行き詰っています。お助けいただけますと幸いです。

実現したいこと

チェックボックスにチェックが入っている場合のみ、特定のセルのデータを別シートの特定のセルに反映させたい。

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

チェックボックスにチェックを入れても、何も反映されない。

該当のソースコード

function myfunction(){ //スプレッドシートの取得 const ss = SpreadsheetApp.getActiveSpreadsheet(); const copyFrom = ss.getSheetByName("ファイル一覧"); const copyTo = ss.getSheetByName("宛先リスト"); //チェックボックスの場所 const checkBox = copyTo.getRange('O2:O').getValues; //元データの取得 const copyValue1 = copyFrom.getRange('A2').getValues(); const copyValue2 = copyFrom.getRange('A3').getValues(); const copyValue3 = copyFrom.getRange('A4').getValues(); const copyValue4 = copyFrom.getRange('A5').getValues(); const copyValue5 = copyFrom.getRange('A6').getValues(); const copyValue6 = copyFrom.getRange('A7').getValues(); const copyValue7 = copyFrom.getRange('A8').getValues(); const copyValue8 = copyFrom.getRange('A9').getValues(); const copyValue9 = copyFrom.getRange('A10').getValues(); const copyValue10 = copyFrom.getRange('A11').getValues(); //チェックボックスの判定 if (checkBox=="true"){ //データの反映 copyTo.getRange('P2:P').setValue(copyValue1); copyTo.getRange('Q2:Q').setValue(copyValue2); copyTo.getRange('R2:R').setValue(copyValue3); copyTo.getRange('S2:S').setValue(copyValue4); copyTo.getRange('T2:T').setValue(copyValue5); copyTo.getRange('U2:U').setValue(copyValue6); copyTo.getRange('V2:V').setValue(copyValue7); copyTo.getRange('W2:W').setValue(copyValue8); copyTo.getRange('X2:X').setValue(copyValue9); copyTo.getRange('Y2:Y').setValue(copyValue10); } }

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

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

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

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

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

bebebe_

2022/11/18 04:19

コピーが実行された場合コピー元のA2の値をコピー先のP列に1000行目まで並べる形になりますがそこは想定通りですか?
shirogohan

2022/11/18 04:51

コメントありがとうございます! 例えば、 O2にチェックが入っている場合:別シートA2の値をP2に反映 O3にチェックが入っている場合:別シートA2の値をP3に反映…… させたいのですが、今のコードだと、チェックを入れると、P1000まで入ってしまうようになってしまっていますよね…?
guest

回答1

0

ベストアンサー

これでどうでしょうか
チェックボックスの取得が[O2:O]の場合1000行目まで配列に格納するため範囲が決まっているなら指定したほうがいいと思います。

function myfunction(){ //スプレッドシートの取得 const ss = SpreadsheetApp.getActiveSpreadsheet(); const copyFrom = ss.getSheetByName("シート1"); const copyTo = ss.getSheetByName("シート2"); // 行・列を入れ替える関数 const transpose = a=> a[0].map((_, c) => a.map(r => r[c])); //チェックボックスの場所 const checkBox = copyTo.getRange('O2:O11').getValues(); for(let i=0; i<checkBox.length; i++){ if(checkBox[i] == "true"){ copyTo.getRange(i+2,16,1,11).setValues(transpose(copyFrom.getRange(2,1,11,1).getValues())); } } }

投稿2022/11/18 05:30

編集2022/11/21 00:06
bebebe_

総合スコア504

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

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

shirogohan

2022/11/18 08:42

ありがとうございます!ただこの場合、別シートA3の値がP3、別シートA4の値がP4に入ってしまいました。 P列には別シートA2の値、Q列には別シートA3の値、R列には別シートA4の値……を入れたいです。よろしくお願いいたします。
bebebe_

2022/11/21 00:07

動作を変更しました。求めているのはこういう事ですか?
shirogohan

2022/11/21 05:25

大変助かりました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問