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

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

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

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

解決済

GASで各スプレッドシートよりセルの情報を集める

amnoskanae
amnoskanae

総合スコア13

Google Apps Script

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

1回答

0評価

0クリップ

217閲覧

投稿2019/02/04 02:08

前提・実現したいこと

#### 前提
わたしはプログラミング初心者で、毎日ググりながら、問題を解決を考える程度のスペックの持ち主です。
本当に初心者なので、全くいいプログラミングの書き方ではないのは百も承知ですが、だからこそ皆さんのお力をお借りできればと思います。

#### 現状
現在社内の業務効率化に向けてスプレッドシートの改良を行っています。
社員が毎月各スプレッドシートで勤務時間を記入するシートがあり、各々から数値を確認し、確からしいかチェックした後に、一括管理するスプレッドシートにコピペをします。

そのコピペの作業が面倒なので、一括管理するスプレッドシートからボタン一つで各スプレッドシートの特定のセルにある情報を吸い上げて、一覧にそのまま数値を反映させたいと思います。

数値を吸い上げるまではかなったのですが、それらを一括管理するスプレッドシートに反映させるのに困っています。

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

エラーは出ていませんが、吸い上げたデータを配列に格納したいのですが、どうすればいいのかわかりません。

該当のソースコード

以下で、各社員のスプレッドシートが保存されているファイルを先月の月末の数字で名付けてあり、各社員のファイルは、作業月報_社員の苗字_月末の数字という名付け方です。

Google

function paidHolidaySet(){ //社員を配列データとして格納 var users = [ 'akito','fujisawa','inoue']; var file_names = users.map(function(element) { //月末lmld=lastmonthlastday var dt = new Date(); var lmld = new Date(dt.getFullYear(), dt.getMonth(), 0) // YYYYMMDD形式に変換 var year_str = lmld.getFullYear(); var month_str = lmld.getMonth()+ 1; // monthはなんと0-11 var day_str = lmld.getDate(); var month_str = ('0' + month_str).slice(-2); var day_str = ('0' + day_str).slice(-2); var format_str = 'YYYYMMDD'; format_str = format_str.replace(/YYYY/g, year_str); format_str = format_str.replace(/MM/g, month_str); format_str = format_str.replace(/DD/g, day_str);   return "作業月報_" + element + "_" + format_str;   }); Logger.log(file_names); //フォルダーの中にある各ファイルにアクセスし、IDを取得 var fileIDs = file_names.map(function(element){ //ファイル名をユーザー名・月末で指定する //月末lmld=lastmonthlastday var dt = new Date(); var lmld = new Date(dt.getFullYear(), dt.getMonth(), 0) // YYYYMMDD形式に変換 var year_str = lmld.getFullYear(); var month_str = lmld.getMonth()+ 1; // monthはなんと0-11 var day_str = lmld.getDate(); var month_str = ('0' + month_str).slice(-2); var day_str = ('0' + day_str).slice(-2); var format_str = 'YYYYMMDD'; format_str = format_str.replace(/YYYY/g, year_str); format_str = format_str.replace(/MM/g, month_str); format_str = format_str.replace(/DD/g, day_str); //フォルダーの名前を指定 var folderName = format_str ; folderName = folderName.toString(); //フォルダー名をドライブから検索し、IDを取得 var folderID = DriveApp.getFoldersByName(folderName).next().getId(); // Logger.log(folderID); return DriveApp.getFolderById(folderID).getFilesByName(element).next().getId(); });  Logger.log(fileIDs); //スプレッドシートアプリから取得したIDのスプレッドシートを起動し、アクティブシート取得 var sheet = fileIDs.map(function(element){ var sht= SpreadsheetApp.openById(element); var st = sht.getActiveSheet(); var array = []; var latestPaidHour = st.getRange( 1,1 ).getValues(); latestPaidHour = latestPaidHour.toString(); for ( var i = 0; i < latestPaidHour.length; i++ ){   return array.push(latestPaidHour); } Logger.log(latestPaidHour); }); Logger.log(sheet); }

試したこと

最初は配列一つで、その中で作業が完結されるような書き方をしたかったのですが、何度やっても失敗したので、配列の数値を、

1.ファイル名の指定
2.ファイルIDの指定
3.各ファイルにアクセスして、指定のセルから数値を取得し、配列に格納

という順序で更新していくような形にしてみました。
最後の段階で、指定のセルから数値を取得し、Logger.logには各値を反映できていますが、それを配列に格納できません。
もしくは配列でなくとも、そのまま数値を現在開いている一括管理するスプレッドシートの指定の位置にそのままsetValueできれば問題はないです。

しかし、いろいろと調べては試してみるも、何が合っていて、間違っているのか区別がつかず、途方に暮れています。

また動作が少し遅いのでもっとシンプルな文にならないかなと思いながらも、どう改良できるかわかりません。

わからないことだらけで、申し訳ございませんが、どうぞよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Apps Script

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