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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

Q&A

解決済

2回答

5705閲覧

GASで特定の値が入った行のみを別シートにコピーする方法

mooooo

総合スコア11

Google Apps Script

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

0グッド

3クリップ

投稿2019/02/25 07:02

皆様いつもお世話になっております。
Google Apps Scriptで質問があります。

タイトルの通りなのですが、管理しているシートのステータスが特定の値に変更になった際(例:10列目に●●が入力された場合)にその●●の値がはいった行のみを別シートにコピーしていくスクリプトをご教示いただければと思います。

当方はじめたばかりの初心者で、今までイチから書けるレベルでもないため、ネット検索しても該当のスクリプトがなくわからずです。
GASのコピーペーストの構文とIF関数でできるかと思っていましたが動作せず。

ご教示いただけますと幸いです。

ソースコード

//ステータス特定
if(mySheet.getSheetName()=="シート名" && (myCell.getColumn()==10)) {

var ss_copyFrom = SpreadsheetApp.getActiveSpreadsheet();
var ss_copyTo = SpreadsheetApp.openById('1nF4EKGDdmGbn3g1fVX4hpjSpjzff0XMFZlDah6i8pDU');
var sheet_copyFrom = ss_copyFrom.getSheetByName('コピー元シート名');
var sheet_copyTo = ss_copyTo.getSheetByName('コピー先シート名');

var copyValue = sheet_copyFrom.getRange('A2:R1000').getValues();
sheet_copyTo.getRange('A2:R1000').setValues(copyValue);

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

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

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

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

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

guest

回答2

0

未検証。
がんばってバグ取りしてください

javascript

1function q176354(e) { 2 const srcSheetName = "コピー元シート名"; 3 const dstSheetName = "コピー元シート名"; 4 const allowance = "●●"; 5 const sh = e.range.getSheet(); 6 if(sh.getName() !== srcSheetName) return; 7 if(e.range.getColumn() !== 10) return; 8 if(e.value !== allowance) return; 9 const lastCol = sh.getLastColumn(); 10 const val = e.range.getSheet().getRange(e.range.getRow(), 1, 1, lastCol).getValues(); 11 e.source.getSheetByName(dstSheetName).appendRow(val[0]); 12}

投稿2019/02/26 05:48

編集2019/02/26 05:54
papinianus

総合スコア12705

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

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

0

ベストアンサー

条件が一部あいまいなところがあったので、こちらで前提条件を追加しました。

前提条件
・コピーをする条件:シート"from"のセル(10,1)の値が"●●"の場合
・コピーする値:セル(10,1)~セル(10,3)
・コピーする先:シート"to"の値が入っていない最終行
・コピーを開始する条件:トリガーで時間を設定

コード

GAS

1function valuecopy() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 4 var ss_copyFrom = spreadsheet.getSheetByName('from'); 5 var ss_copyTo = spreadsheet.getSheetByName('to'); 6 7 var checkCellRow = 10;//値が入る行番号 8 var checkCellCol = 1;//値が入る列番号 9 10 var checkCellValue = ss_copyFrom.getRange(checkCellRow,checkCellCol).getValue();//(10,1)のセルの値を取得 11 12 13 //(10,1)のセルの値が●●であれば 14 if(checkCellValue == "●●"){ 15 var copyValue = ss_copyFrom.getRange(checkCellRow,1,1,3).getValues();//checkCellRow(=10)行目の3列目までの値をコピー 16 17 var writeCellRow = ss_copyTo.getLastRow();//コピー先のシートの値が入っている最終行番号をゲット 18 19 Logger.log("writeCellRow"); 20 Logger.log(writeCellRow); 21 22 ss_copyTo.getRange(writeCellRow+1,1,1,3).setValues(copyValue);//コピー先のシートの値が入っている最終行の次の行にcopyValueを書き込み 23 24 25 }//if end 26 27 28}

投稿2019/02/25 16:21

dett

総合スコア115

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

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

mooooo

2019/02/26 00:47

条件の追記ありがとうございます。 条件としては ・コピーをする条件:シート"from"のセル(10,1)の値が"●●"の場合 →レコードを順次追加するため●●の値の行数が入れ替わる。 ・コピーする値:セル(10,1)~セル(10,3) →コピーする値に際限を設けない。 ・コピーする先:シート"to"の値が入っていない最終行 →その通りです。 ・コピーを開始する条件:トリガーで時間を設定 →Fromでのステータス変更時 上記の前提になります。私の理解不足で申し訳ございませんが、レコード追加や際限を設けないあたりでコードが変更になると思いますがわからないでいます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問