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

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

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

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

Q&A

2回答

904閲覧

GASを用いた座席表の表示

island23

総合スコア6

Google Apps Script

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

0グッド

0クリップ

投稿2017/09/07 01:53

###前提・実現したいこと

弊社の座席配置は日ごとに変わります。
現状は毎朝、私がオフィスにきて用意してある座席表を張り出しておるのですが、
先輩からGASを用いて、スプレッドシート上に日ごとに画像を表示するようにすれば
いいじゃないかと言われました。

GASについて、この機会に初めて知ったレベルで全くの素人です。

そこで皆さまのお力をお借りしたいのですが、
スプレッドシートにアクセスし、表示ボタンを押すと
14種類の画像をランダムに日ごとに表示するための、
コードを教えていただけませんでしょうか。
(同日に表示ボタンを何度押しても同じ画像が表示される想定です)

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

手がこみ過ぎている感がありますが、最初に思いついた方法を実装してみました。
14枚のうちから1枚をランダムに選択するので二日連続で同じになってしまう可能性があり、まだ改良が必要の予知があります…。

準備

スプレッドシート「シート1」のA1~A14に =IMAGE("http://xxxx") の形式で画像を14種類用意しておきます。
※この場合、画像をアップロードする必要があるため以下手順でURLを取得します

  1. 画像をGoogleドライブにアップロードする
  2. 「ファイル右クリック > 共有可能なリンクを取得」でリンクを取得
  3. リンクから画像を開き、「右クリック > 画像アドレスをコピー」で画像のURLを取得
  4. 上記を画像14枚分行う

プログラム実行

以下コードを実行すると「シート2」のA1に、画像14種類のうちいずれか1枚が表示されます。
(同日に実行した場合、同じ画像が表示されます)

/** * "シート1"のA1~A14に =IMAGE() 関数で画像を14種類用意しておく * "シート2"のA1にランダムにA1~A14のいずれかの画像をランダムに表示する */ function main(){ // 乱数を発生させる var randomNumber = makeRandomNumber(new Date()); // 表示する画像を変更する var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2"); var imageFormula = sheet1.getRange(randomNumber, 1).getFormula(); sheet2.getRange("A1").setFormula(imageFormula); } function makeRandomNumber(date) { // 日付を年月日文字列に変換 var dateStr = Utilities.formatDate(date, "JST", "yyyyMMdd") // 乱数が生成済の場合それを使用する var scriptProperties = PropertiesService.getScriptProperties(); var property = scriptProperties.getProperty(dateStr); if (property != null) { return property; } // 1~14 の範囲で乱数生成 var min = 1, max = 14; var randomNumber = Math.floor( Math.random() * (max + 1 - min) ) + min; // 乱数を登録する scriptProperties.deleteAllProperties(); scriptProperties.setProperty(dateStr, randomNumber) return randomNumber; }

投稿2017/09/07 14:14

rokuni

総合スコア174

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

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

0

もし、その座席表が数種類しかなく、
動的に画像を生成しなくても良いという前提で回答します。

上記の条件であるならば、アイデアとして、下記のような処理にすれば実現できそうです。

前準備
シート1に月曜日用の画像を張り付け、
シート2に火曜日用の画像を張り付け
というようにすべての画像を1つのシート毎に貼り付ける。

処理1
スプレッドシートを任意のユーザが開いたら、
スクリプトが自動的に実行されるようにする。

処理2
スクリプトでは、今日の日付を取得し、何曜日であるか計算する。

処理3
火曜日であったら、シート2以外を非表示にする。

あとはそれぞれについて詳しく調べていけば良いと思います。
下記は参考になりそうなサイトを貼っておきました。
頑張ってください。

基本的なことは下記でざっくり学べると思います。
http://excel-ubara.com/spreadsheet1/

スプレッドシートを開いたときにスクリプトを実行させたい場合、下記が参考になると思います。
https://usortblog.com/google-apps-script-onopen/

スプレッドシート内の各シートを非表示にしたい場合は下記が参考になると思います。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12154736312?__ysp=R0FTIOOCueODl%2BODrOODg%2BODieOCt%2BODvOODiOOCkumdnuihqOekuuOBq%2BOBmeOCiw%3D%3D

投稿2017/09/07 02:35

kikukiku

総合スコア514

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問