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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2335閲覧

GAS 動作しているコードを繰り返し処理等を利用し書き換えたい。

yuiu

総合スコア17

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/09/25 04:07

編集2018/09/25 13:50

前提・実現したいこと

初投稿のため、分り難いところが多々あるかと思われますが宜しくお願い致します。

ここに質問の内容を詳しく書いてください。
やっていること:
①ファイルを指定
②[集計]シートを指定
③指定した[集計]シートのH列の値を取得
④取得した時間を別のシートに配列で書きだす

やりたいこと:
記載したコードの①~③(3~30行目)を繰り返し処理等ににしたい。
現状:一つ一つkey入力 → ファイルのシート指定 → 最終行のH列の値を取得となっていて手入力に手間がかかっている。
手作業と然程時間が変わらない状態になってしまっている。

補足:
取得するファイルの数は変動します。
(必ず5つのファイルを取得するわけではない。1つの場合もあれば、20個くらいの場合もある)

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

複数のファイルid(key)を配列で持たせ、
△△△△△△の部分に格納したがエラーになってしまう。
var s1 = SpreadsheetApp.openById('△△△△△△');
初心者であるため、繰り返し処理をどう書けば良いのかわからない。

該当のソースコード

GAS

1function last_retu(lr){ 2 //テストフォルダ内のファイルを取得 3var s1 = SpreadsheetApp.openById('196hx3G3vDoeaBzAdI0ByOnafZubXrsDnT_qzWWDF6L0'); 4var s2 = SpreadsheetApp.openById('1OPMUHsbJNG8SIxGzjmGhsbE1O-DfD4VKtRM2d_EtVmM'); 5var s3 = SpreadsheetApp.openById('1aMS5nGzI--VbuhtkLfACpebCaHxT2gudnOfur_h8gmw'); 6var s4 = SpreadsheetApp.openById('1cTBHqgWCS62mc2guMmhD2UEMOo2VNSscbWgVbJdphz4'); 7var s5 = SpreadsheetApp.openById('1rfN28O8NWp-3wMQmyViQdoC5atyzXyYiPbDT7I2AlEw'); 8 9 //特定のシート名(集計)を指定する 10var sht1 = s1.getSheetByName('集計'); 11var sht2 = s2.getSheetByName('集計'); 12var sht3 = s3.getSheetByName('集計'); 13var sht4 = s4.getSheetByName('集計'); 14var sht5 = s5.getSheetByName('集計'); 15 16 //H列の最終行を取得 17var lr = sht1.getRange("H:H").getLastRow(); 18var range1 = sht1.getRange(lr, 8).getValue();//取得した最終行の(最終行, 列の番号) 19 20var lr = sht2.getRange("H:H").getLastRow(); 21var range2 = sht2.getRange(lr, 8).getValue();//取得した最終行の(最終行, 列の番号) 22 23var lr = sht3.getRange("H:H").getLastRow(); 24var range3 = sht3.getRange(lr, 8).getValue();//取得した最終行の(最終行, 列の番号) 25 26var lr = sht4.getRange("H:H").getLastRow(); 27var range4 = sht4.getRange(lr, 8).getValue();//取得した最終行の(最終行, 列の番号) 28 29var lr = sht5.getRange("H:H").getLastRow(); 30var range5= sht5.getRange(lr, 8).getValue();//取得した最終行の(最終行, 列の番号) 31 32 //上記(3~30行目の処理)で取得した時間(range1~5)を配列にまとめただけ。 33var gettotaltimes = [range1,range2,range3,range4,range5]; 34 35 //取得した時間の書き出すシート 36var spreadsheet = SpreadsheetApp.openById('1wyhhUB5GhFihJ9GdMpyUKgdiph5CqpzawomT-D4GFU4'); 37var sheet = spreadsheet.getSheetByName('取得した時間を書き込む'); 38 39 //配列でtestcodeファイル内の「取得した時間を書き込む」シートに書きこむ 40 var ary = [[]]; 41 for (var i=0; i<gettotaltimes.length; i++) { 42 ary[0].push(gettotaltimes[i]); 43 } 44 sheet.getRange(1,1,1,ary[0].length).setValues(ary); 45 46} 47 48

試したこと

まだ初心者のためどうすれば良いのか見当がついていないレベルです。
すいません。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

何個か分からないシートも、テストフォルダのように、特定のフォルダに入ると思っていいのでしょうか?
(サインインを求められたので、実際にはテストしていません。あくまで参考として)

javascript

1//特定フォルダからスプレッドシートのidを取り出してくる 2function getFiles(folderId) { 3 var files = DriveApp.getFolderById(folderId).getFilesByType(MimeType.GOOGLE_SHEETS); 4 var ret = []; 5 while(files.hasNext()) { 6 ret.push(files.next().getId()); 7 } 8 return ret; 9} 10 11//実作業 12function last_retu() { 13 const folderId = "1ZjdNiax9PKRegRA8yfmOoTo4MmYMzyoC"; // テストフォルダのid 14 const sheetName = "集計"; 15 const targetRange = "H:H"; 16 var files = getFiles(folderId); 17 var totals = []; //結果が入るやつ 18 files.forEach(function(element, index, array) { //シートidを繰り返しで処理 19 var sh = SpreadsheetApp.openById(element).getSheetByName(sheetName); 20 //H列の最終行を取得 21 var lr = sh.getRange(targetRange).getLastRow(); 22 totals.push(sht.getRange(lr, 8).getValue());//取得した最終行の(最終行, 列の番号) 23 }); 24 25 //以下、質問のまま 26 //取得した時間の書き出すシート 27 var spreadsheet = SpreadsheetApp.openById('1wyhhUB5GhFihJ9GdMpyUKgdiph5CqpzawomT-D4GFU4'); 28 var sheet = spreadsheet.getSheetByName('取得した時間を書き込む'); 29 30 //配列でtestcodeファイル内の「取得した時間を書き込む」シートに書きこむ 31 var ary = [[]]; 32 for (var i=0; i<totals.length; i++) { 33 ary[0].push(totals[i]); 34 } 35 sheet.getRange(1,1,1,ary[0].length).setValues(ary); 36}

投稿2018/09/25 09:17

papinianus

総合スコア12705

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

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

yuiu

2018/09/25 12:01

上記コードを実行したら期待通りの処理をしていました。 とても助かりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問