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

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

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

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

Q&A

1回答

350閲覧

gasでデータを貼り付けた後に、実行日時をA列に自動記入させたい

ogumogu

総合スコア7

Google Apps Script

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

0グッド

0クリップ

投稿2018/03/07 10:42

編集2018/03/07 10:45

Google Apps Scriptで質問があります。
宜しくお願い致します。

現在、以下の2がうまく動きません。

1.sheet1の特定範囲のデータをsheet2の最終行のB列に貼り付ける。(毎週)
2.さらに貼り付けた日時をA列に残したい。

1は下記URLを参照になんとか動くようになったのですが、
2の部分が1を実行しても、更新されません。
2はsheet2の方に書いており、トリガーは、スプレッドシートの値の変更にしています。

1の参照URL
https://teratail.com/questions/112154
https://teratail.com/questions/106446

2の参照URL
http://bonheur.hatenablog.jp/entry/2017/06/30/130437
https://qiita.com/Yamotty/items/888ae6f93a05a8cfc16f

初心者で表現がわかりづらいかもしれませんが、どなたかアドバイスをいただけないでしょうか。何卒よろしくお願いいたします。

2のコード

gas

1function insertLastUpdated() { 2 var ss = SpreadsheetApp.getActiveSheet(); 3 var currentRow = ss.getActiveCell().getRow(); 4 var currentCell = ss.getActiveCell().getValue(); 5 var updateRange = ss.getRange('A' + currentRow) 6 Logger.log(updateRange); 7 8 if(currentRow>1){ 9 if(currentCell) { 10 updateRange.setValue(new Date()); 11 } 12 } 13}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/07 14:01

とりあえずの回答はしておきましたが、1の処理も提示していただければもっと問題点が明確になると思いますよ。
guest

回答1

0

意図があって処理を分割したのか、よくわからないけど分割して構築したか、ということも気になりますが、無駄が多いので、ロジックとしては以下のように一連の流れとして行うほうが良いと思いますよ。
特定範囲が複数行である前提です。

  1. sheet1から特定範囲のデータを取得するgetRange({特定範囲}).getValues()
  2. 取得データは二次元配列なので、ループでそれぞれ先頭に本日の日付をunshift()する
  3. sheet2の最終行以下に成形データをセットするsetValues({成形データ})

一応、追記・修正依頼もしておきますが、1の処理も提示していただければもっと問題点が明確になると思いますよ。

投稿2018/03/07 14:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ogumogu

2018/03/08 00:59

アドバイスありがとうございます。stshishoさんのご指摘通り、無駄が非常に多いかと思います。。 sheet1のコードは以下のとおりです。 (sheet1は複数シートあり、A1~EZ199までのデータを毎週、sheet2の最終行のB列にセットする。Sheet1のデータは、1~199まで全てにデータがあるわけではなく、空白セルや空白行も存在しています) function copy() { var ss_copyFrom = SpreadsheetApp.getActiveSpreadsheet(); var ss_copyTo = SpreadsheetApp.openById('sheet2'); var sheet_copyFrom = ss_copyFrom.getSheetByName('sheet1のファイル名'); var lr = sheet_copyFrom.getLastRow(); var lc = sheet_copyFrom.getLastColumn(); var copyRange = sheet_copyFrom.getRange(1,1,199,156); var sheet_copyTo = ss_copyTo.getSheetByName('sheet2のファイル名'); var lastRow = sheet_copyTo.getLastRow(); var lastRow1 = lastRow + 1; var copyValues = copyRange.getValues(); sheet_copyTo.getRange(lastRow1,2,199,156).setValues(copyValues); }
退会済みユーザー

退会済みユーザー

2018/03/08 01:43

結論から申しますと、最初に提示された2のコードは不要です。 1のコードを当方が提示したロジックに沿って修正されれば良いかと思います。 具体的には以下の部分になりますが、空行を削除する必要がある場合はcopyValues.filter({空行削除処理})を挟みます。 //1. sheet1から特定範囲のデータを取得する var copyValues = copyRange.getValues(); //1.5 必要ならば空行削除処理 //2. copyValuesに対しループでそれぞれ先頭に本日の日付をunshift()する var today = new Date(); /* ループ処理 */ //3. sheet2の最終行以下に成形データをセットする sheet_copyTo.getRange(lastRow1,1,{配列の長さ},{列数}).setValues(copyValues); 動作確認はしておりませんので、参考までに。 頑張ってみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問