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

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

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

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

Q&A

0回答

508閲覧

キーボードの操作を指定した回数再現するGASは可能でしょうか

GAS_GEXT

総合スコア0

Google Apps Script

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

0グッド

3クリップ

投稿2023/02/18 12:12

編集2023/03/08 20:06

実現したいこと

Googleスプレッドシートで100人規模のアルバイトの勤怠管理シートを作成中です。
勤務表を1人1シート準備して、一覧リストを各勤務表シートからimportrange関数で引っ張り毎月の実績(勤務時間と支給額等)を表示させます。

自分でスクリプトを作れる知識はないのですが、Excelの関数を少し使える程度でもかなり
効率化できることがわかり、事務職ですが、スプレッドシートの共有機能などを使って各業務を電子化しているところです。

アルバイトの勤務表は、4月から3月までの各月のシートに、importrange関数を入れていく
作業が発生し、勤務表スプレッドシートのURLをコピーして各セルのimportrange関数に紐づけ(コピペ)する数が100人規模なので、スプレッドシートのマクロ記録を試したのですがコピペが何度やってもうまく再現できず諦めました。
STREAM DECKを持っているので、マルチアクション機能というコマンドで、キー操作を登録して1行分の自動操作(1分30くらいかかる)をボタンに設定したのですが、正確にキーボード操作を再現してくれて感動したのですが、繰り返し設定がないので、それを100人分なら100回、12か月分で1200行分 1200回ボタンを押す必要がありしんどくなってます。

長くなりましたが、GASで、キーボード操作を設定できて、繰り返しの回数を指定できれば
とても楽でやりたいことが実現できるのですが、特定のテキスト(シートのURL)をコピペするだけではなく、セルに事前に入力した
=VLOOKUP($B7,IMPORTRANGE("","データ!$A$2:$x$1018"),17,false)
の式の ("", のダブルコーテーションのあいだに、コピーしたスプレッドシートURLをペーストするので、マクロ記録ではセルに値をただコピペするならできるのですが、一度セルをクリックして 〇文字分横に移動して""のあいだにペースト のようにしたいのです。
RPAなども試そうと思っていますがそういう機能があるのかわかっておらず、できればGASで
キーボード操作をそのまま再現して、回数指定でループさせる が可能なのかどなたか教えていただきたいのです。
この作業が自動化できれば、毎月紙で出勤表を提出させて、担当者がチェックして手作業でエクセルに入力して集計して、それを勤怠システムに登録している現在から、自動集計が可能になりかなりの効率化になるのでなんとか実現したいので
お知恵を貸していただければ幸いです。
よろしくお願いします。
イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/02/19 10:53 編集

あくまでもキーボード操作を自動化できないと駄目でしょうか。 というのはGAS単体で「キーボード操作をそのまま再現して、回数指定でループさせる」ということはかなり難しいです。仮に可能であったとしても正確性が担保できないと思います。 それよりも関数やスクリプトを使った方が、簡単で確実に操作できると思います(こちらならある程度はやり方を示すことはできます)
YellowGreen

2023/03/02 07:50

例えば勤務表がすべて同じフォルダにあるなら、フォルダ内のファイルから順次シートのURLを取得して関数式を文字列としてURLを含めて作成して特定のシートに関数として入力するという作業をフォルダ内のファイル全てに対して実行するというようなスクリプトではダメなのでしょうか。データのセル範囲B7やA2:X1018は皆同じなのですよね。
退会済みユーザー

退会済みユーザー

2023/03/02 14:18

そのアプローチで問題ないと思います。
GAS_GEXT

2023/03/08 14:28

qnoirさん、YellowGreenさん コメントありがとうございます。反応が遅くなりました。 キーボード操作の自動化は難しいことがわかりました。その後持っていたロジクールマウスで同じ操作をマクロで繰り返し設定もできたので、1行15秒で1時間弱自動化できたのですが、PCの処理、ひとつひとつのセルの読み込みが追い付かず?かならず80行くらいで接続が切れてマクロが暴走してみたことないシステムエラー表示が出たり(笑) これは賢いやり方ではないことが分かってきました。 勤務表のスプレッドシートを500人分あれば十分なことがわかったので、500シート(ファイル)は同じフォルダに保存しています。 「フォルダ内のファイルから順次シートのURLを取得して関数式を文字列としてURLを含めて作成して特定のシートに関数として入力するという作業をフォルダ内のファイル全てに対して実行するというようなスクリプト」 →ありがとうございます。まさにそういうことがしたいです。 データのセル範囲B7やA2:X1018は皆同じ です。500シート(ファイル)は同じものをコピーしていて、4月から3月のシートの構成も同じです。スクリプト、が自分で1から作れないのでヒントをいただければありがたいです。 一覧表のスプレッドシートは、一番右のセルに、各勤務表のスプレッドシートのURLを貼り付けていて、そのURLをコピーして、左にセルを移動しながら関数の入った式の""の間にURLをペーストを24回繰り返して1行分です。
退会済みユーザー

退会済みユーザー

2023/03/08 15:17

詳細を伺いたいのですが「24回繰り返して1行分」というのは、具体的にはどういう感じなのでしょうか 24=2列×12か月→各2列のうち1列目は「○月」で、その隣がスプレッドシートへのリンクURL、というイメージでしょうか。 可能であれば、"一覧表"のスプレッドシートのイメージ(キャプチャ画像)と、「どのセルにどういう内容を入れたい」というのをを質問に追加していただけると、スクリプトについてアドバイスできるかもしれません。
GAS_GEXT

2023/03/08 20:18

ありがとうございます。 スプレッドシート(一覧リスト)の中の〇月のシートのキャプチャです。右端に各勤務表スプレッドシートのURLを表示させていて、それをコピーして左に移動しながら25のセルの関数式のダブルコーテーションの間にペーストする作業をマウスのマクロで作業しています。 1行につき、一つのURLをペーストするセルが(24ではなく)25か所(黄色の「職員番号」のセル以外)でした。それで1行(1人分)で、500行(500人分)作っており、×12か月分のシート(4月~3月)があります。
YellowGreen

2023/03/09 07:24

まず、IMPORTRANGE関数ですが、URLではなくファイルIDの方が文字数が短くなると思います。 次に、フォルダ内のファイルを順次取得してファイルIDを蓄積していく作業が第一段階になると思いますが、 アドバイスを受けながらご自身でスクリプトを作成していく考えはありますか。 第1段階は、それほど長いスクリプトになりませんよ。
YellowGreen

2023/03/10 05:12

残念なご報告です。 1)テスト環境としてフォルダの中に従業員0001から従業員0500までのスプレッドシートを作成 2)フォルダごとアクセス権限を付与 3)試験的にそのフォルダの中からフォルダのIDを取得して配列に蓄積 4)蓄積したIDから=COUNTIF($Bで始まる関数式の中にそれぞれファイルIDを入れた関数式の配列を作成 5)関数式の配列をスプレッドシートに挿入(1列分500行のみ) 6)一斉にIMPORTRANGE関数がデータの読込みを開始・・・それ以降は、 しばらくすると「エラー このウェブページの読み込み中に問題が発生しました。」 7)再読み込みで貼り付けた列に各シートのデータが表示されました。・・・その後も 何をするにも待ち時間が発生して「待機」か[ページを離れる」かを選ぶことになり、「待機」を選ぶと表示が戻りますが、カーソルの移動もままならない状況になり、しばらくすると「待機」か「ページを離れる」か問われる始末でほとんど作業が進みません。 8)念のためIDではなくURLでも試してみましtが同じ状況になりました。 残念ながら、少なくとも私の環境では1列500行のデータでこの状況ですから 現実的に使用に耐えるスプレッドシートにならなかったので この質問については回答を諦めます。
YellowGreen

2023/03/10 05:22

一応、500件のIDやURLの取得はスムーズに進み、貼り付けまでは何事もなくスムーズにできました。 なお従業員ファイルはA2からX1018までオードフィルでダミーデータを入れた(1行目は見出し)ものをスクリプトで500件複製して作成していましたが、 最初の読み込みエラー後の再読み込みでは各シートのデータがそれぞれ表示されました。 時間はひどくかかりましたが個別シートの値の変更も反映されました。
GAS_GEXT

2023/03/11 08:01

YellowGreenさん コメント拝見しました。ありがとうございます。自分でマクロを走らせて、しばらくすると「再読み込み中」と毎回なるので、このやり方で行数を増やには限界があることがわかりました。 100行ごとのシートを実際は300人くらいなので3つ作って運用はできそうです。  スプレッドシートのimportrange関数が簡単で便利なので活用しようとしましたが、読み込ませる負荷、というかセルに関数を入れると負荷がその分かかるようなので、例えば、指定フォルダ内に保存した各勤務表(スプレッドシート✖500)の指定のセルの値(最新の値)を一覧表シートに500件コピペするスクリプト を作れれば、スプレッドシートが重くて動かない、ようなことにはならない のかなと思いました。GASを実行するときの制約(6分までなど)はかかると思いますが、負荷の問題はそっちだけになるのかなと思いました。  スクリプトを自分でやりたいことに合わせて作るというのは、正直ハードルが高く、小手先ですが他の人が作った公開されてるサンプルコードなどを使わせてもらって値を置き換えて使ってますが、今回はサンプルがなく詳しい方に教えを乞いました。  年度末突入で、業務効率化に充てる時間があまりなくなってきたので、アドバイスをいただいてスクリプトをつくることをしたいのですがいったん御礼させていただき、また余裕ができたら勉強してみたいと思います。 ありがとうございました。
YellowGreen

2023/03/11 10:17

そうですね。GASで作動させるのならば、importrange関数を使わなくてもその都度データを取得させれば期待どおりのことができると思います。 余裕ができた時にでもご返信ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問