アレルギー対策、自宅でできる効果的な方法とは?

GoogleスプレッドシートでTODOリストを作成しています。

たとえばタスクの期限が近づいてきた時に(3時間前など)に指定したメールアドレスにメールを
送る(ハングアウトで通知されるとか、ユーザーに直接連絡が行けばなんでも構いません)
ようなスクリプトや、条件付き書式設定など?

方法はございますでしょうか?

スプレッドシートだけでなくても、GoogleカレンダーやIFTTTなどといった他のサービスとの複合でもアイデアがあればぜひご教授頂きたく存じます。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

独学がてら原理動作を作ってみました。

(添付画像、後記スクリプト)
太字の日時を現在日時の3時間前後に設定し、「期限チェック」ボタンを押すと、期限まで3時間以内なら添付画像のように「警告」表示されメールが送信されました。
注意点は、期限の表示形式を本来の日付や日時にすると判定ができなかったため書式なしテキストとしました。

スプレッドシートを開いたイベントに処理を割り当てるという仕組みは見つけられませんでした。
周期処理も同様のため、自動ではなく上記のようにボタンを押すという手動の実装を行いました。
当然開きっぱなしでは実行されないことになります。

メールについては、下記も参考になります。
https://developers.google.com/apps-script/overvi …

セルの読みは下記が参考になります。
https://developers.google.com/apps-script/guides …

GoogleスクリプトはベースはJavascriptのようなので、Javascriptの仕様も参考になると思います。

あとは、上記等、勉強して補って下さい。
Googleの捨てアカウントがあるなら、原理動作したものを編集者権限(動作させることができる)で共有できます。

ちなみにここまで作って気づきましたが、Googleカレンダーの予定にメールの通知機能があります。
ただ、通知は最短で1日前です。
でも、ポップアップによる通知も設定できるため、もしかしたらこちらは開きっぱで通知されるかもしれません。
とはいえ、1日前にポップアップされてもですが。。。

-----スクリプト
function CheckExpiration() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
expire = new Date(data[1][1]);
now = new Date();
timeExpire = expire.getTime();
timeNow = now.getTime();
judge = sheet.getRange("C2");
judge.setValue("");

if (timeExpire - timeNow <= 1000 * 60 * 60 * 3)
{
judge.setValue("警告")
Notify();
}
}

function Notify()
{
// Create a new Google Doc named 'Hello, world!'
var doc = DocumentApp.create('Hello, world!');

// Access the body of the document, then add a paragraph.
doc.getBody().appendParagraph('This document was created by Google Apps Script.');

// Get the URL of the document.
var url = doc.getUrl();

// Get the email address of the active user - that's you.
var email = Session.getActiveUser().getEmail();

// Get the name of the document to use as an email subject line.
var subject = doc.getName();

// Append a new string to the "url" variable to use as an email body.
var body = 'Link to your doc: ' + url;

// Send yourself an email with a link to the document.
// GmailApp.sendEmail(email, subject, body);
Logger.log("Send Email");
}
「Googleスプレッドシートで特定のセル」の回答画像2
    • good
    • 0

ググったレベルだけど。

。。

こんなAPIがあるので、スプレッドシートのメニュー「ツール」-「スクリプトエディタ」からスクリプトを作り、スプレッドシートにアドオンすれば、ExceL+VBAのようにできるのではなかろうか。
https://developers.google.com/apps-script/refere …

Javascriptだとグローバルに書いた処理はロード時に実行されるので、同様なら、シートを開くだけでTODOリストの期限をチェックしてメール送信まで自動でできそう。
(Googleのスクリプトはスプレッドシートだけのものではないから厳しいかもしれない。。。
逆に、読み込み時というイベントに応じて処理を行う仕組みが用意されているかも。)
とはいえ、やり過ぎならVBA同様、メニュー「挿入」-「画像」で□を書いてスクリプトを割り当て、期限チェックボタンとする等。

気になるとこでは、
・メール送信はおそらく送信元はスプレッドシードの所有者のグーグルアカウント???
・メール送信失敗は、APIの戻りが同オブジェクトなので、前後で受信トレイのスレッド数を比較???
 (失敗ならエラーメールが受信される。)
    • good
    • 0
この回答へのお礼

ご回答誠にありがとうございます。

とても丁寧に教えていただいて上で恐縮なのですが、当方はプログラミングに関する知識が、皆無に等しいのです。

お手間をおかけついでにいくつかお尋ねしたいのですが、

●こちらのAPIはスクリプトエディタを開いてそのままコピペすればよろしいのでしょうか?

●もしそうだとすれば、どこからどの範囲をコピペして、どの範囲を各個人のメールアドレスに書き換えればよいですか?

もし、これがシートをひらくだけで実行されるなら、ほぼやりたいことが実現できるのですが、「スプレッドシートをひらく」というアクションが無ければ実行されないのでしょうか?
だとすれば、開きっぱなしの場合はTODOの期限が経過しても実行されない可能性はありますでしょうか?

お手すきの折がございましたら、ご返答いただければ幸いです。
どうもありがとうございます。

お礼日時:2016/05/10 17:33

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q特定セルの内容を更新したら、その更新日を自動的に表示する方法について

エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させたいと思っております。
例えば『A1』へ新規に文字入力したり、セルの内容を更新した時に、セル『B1』にその日の日付が自動で表示される。
そして、違う日にもう一度、同じ欄に入力すれば、その入力した日付に随時更新されるようにするための方法を教えていただければ幸いでございます。

御手数ですが、エクセル関数またはVBA、マクロのいずれかで実現可能な方法があれば教えて下さい。
何卒、宜しくお願いいたします。

Aベストアンサー

マクロの力を借りる事になります。
例えば、シートの名前のタブを右クリックして、コードの表示 をクリック
VBエディターが起動しますので
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then'←の3はC列のこと
If Target.Value = "" Then
Cells(Target.Row, 2).Value = ""
Else
Cells(Target.Row, 2).Value = Date'←の2はB列に日付
Cells(Target.Row, 4).Activate'←の4はD列へ移動
End If
End If
End Sub
をコピィしてみてください。上記のコードでは
C列に変更があれば、B列に日付を入れて、C列へ移動します。
空白へ変更した場合はA列を空白に戻します。
ご自身のシートに合わせて編集してみてください。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QGoogle Apps Scriptの日付の比較

日付の比較を行うには、

どのようにしたらよろしいでしょうか?

比較対象セルには、
yyyy/mm/dd表示形式が設定されています。

単純に、d1 == d2
だと、できません。

よろしくお願いします。

Aベストアンサー

前に確か回答したと思いますが……。

2つのセルに日付のフォーマットが設定されているのでしたら、それをもとにDateオブジェクトを作成し、そこからgetTimeでミリ秒換算した値を取り出して引き算すればいいです。得られた結果を1日のミリ秒数で割れば日数が得られます。

function testfunc(e) {
var sheet = SpreadsheetApp.getActiveSheet(); // とりあえずアクティブシートを指定
var r1 = sheet.getRange(1, 1); // 1つ目のセル
var r2 = sheet.getRange(2, 1); // 2つ目のセル
var d1 = new Date(r1.getValue()); // Dateを作成
var d2 = new Date(r2.getValue()); // Dateを作成
var dt = Math.abs(d1.getTime() - d2.getTime()); // ミリ秒数値を引き算
var d = dt / (1000 * 60 * 60 * 24); // 1日のミリ秒数で割り算
Logger.log(d + "日 "); // ログに出力
}

前に確か回答したと思いますが……。

2つのセルに日付のフォーマットが設定されているのでしたら、それをもとにDateオブジェクトを作成し、そこからgetTimeでミリ秒換算した値を取り出して引き算すればいいです。得られた結果を1日のミリ秒数で割れば日数が得られます。

function testfunc(e) {
var sheet = SpreadsheetApp.getActiveSheet(); // とりあえずアクティブシートを指定
var r1 = sheet.getRange(1, 1); // 1つ目のセル
var r2 = sheet.getRange(2, 1); // 2つ目のセル
var d1 = new Date(...続きを読む

QGoogleスプレッドシートでの抽出について

Googleスプレッドシートで参加者のリストを作成したいのですが、添付画像にあるように
それぞれが月~金に参加の可否を○×でプルダウン形式で選択し、コメント欄に文章を入力します。

そこで、画像下部のように各曜日の○が選択されてる人物の名前とコメント欄を抽出したいのですがどうすればいいのでしょうか?

分かる方いらっしゃいましたら回答をお願いします。

Aベストアンサー

Googleスプレッドシートには,エクセルにはない便利な関数が幾つかあります。

B11:
=filter(A2:A8,B2:B8="○")
C11:
=filter(G2:G8,B2:B8="○")
とそれぞれ記入します。
B12やC12以下には自動でcontinue関数が追加され,希望の結果が得られます。

QGoogle スプレッドシートで特定の文字がある場合、特定のセルから情報取ってきて表示する

Googleスプレッドシートで、添付のような資料を作りたく思っています。
B列、C列、D列でそれぞれ★がついたら1行目の値を★がついた行のE列に表示させたいです。
どのようにやればいいのか見当もつかないため、ぜひ教えて下さいませ。

(それぞれの人に3つずつ欲しいものに〇をしてもらい、こちらで諸条件を考えた上で当選者に★をつけるフローなのですが、最終的にはE列だけあればいいようにしたいという感じです。一つの商品は一人しか当たらず、人為的ミスで★を二人につけてしまうことは考えなくて大丈夫です。)

Aベストアンサー

こんにちは!

Googleスプレッドシートで出来るかどうか判りませんが、Excelでの場合の一例です。

E2セルに
=IF(COUNTIF(A2:D2,"★"),INDEX(A$1:D$1,,SUMPRODUCT((A2:D2="★")*COLUMN(A2:D2))),"")
という数式を入れフィルハンドルで下へコピー!

これではどうでしょうか?m(_ _)m

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QGoogle Spreadsheetで他のシートから値を参照したい

Google Spreadsheetの使い方に関しての質問です。

シートを複数作成して、あるシートのセルの値を
別のシートのセルに反映させることはできるのでしょうか?
公式のヘルプなどで検索もしてみたのですが
期待する情報は得られませんでした。

もし可能なら詳しいやり方を教えてくだされば助かります。

Aベストアンサー

「=」をキー入力したあとに、別シートのタブをクリックして
シートを切り替えて、反映させたいセルをクリックして「Entet」
キーを押します。
これ、Excelなどと同じ操作です。

もし、ご質問の意味が違うようでしたら、補足してください。

QE列のセルに数値が入れば(空白でなければ)B列の同じ行のセルに色がつく

E列のセルに数値が入れば(空白でなければ)B列の同じ行のセルに色がつくようにしたい。

エクセル2007です。
条件付き書式で、数値を入れたセル自体に色をつけることはできたのですが他の列を参照することができませんでした。

どうやって設定すればいいでしょうか。

Aベストアンサー

B1セルの条件付書式で、条件を
「数式が」「=ISBLANK(E1)=FALSE」
とすればよいです。

QSUMIF関数で、条件に日付範囲で指定するには?

SUMIF関数で、条件に日付をいれたいのですが、
10日毎の範囲で集計を取るにはどうすればいいでしょうか。

A列に日付、B列に数値で
=SUMIF(A:A,"【2013/9/1~2013/9/10】",B:B) 
こんな感じで日付の部分が問題のところです。

date関数を入れてみると例えば9/3だけなど、一日だけの計算はできたのですが…
1~10,11~20、21~末日(31日)で合計するにはどう記入すればいいでしょうか。

Aベストアンサー

こんにちは。

2013/9/10までを求めて、2013/9/1以前を引けば答えが出ます。
=SUMIF(A:A,">=2013/9/10",B:B)-SUMIF(A:A,"<2013/9/1",B:B)

どうでしょうか。

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報