🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

1回答

1008閲覧

スプレッドシートで、条件分岐をを使い更新されない現在時刻の表示をしたい

keipro000

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/01/18 06:34

前提・実現したいこと

現在、スプレッドシートで出退勤リストを作成しており、
チェックボタンを押す(条件分岐)と現在時刻が表示され、現在時刻が更新されないようにしたいです。

(例)□出勤9:00 □退勤17:00 労働時間8:00
□にチェックをいれると、右のセルに現在時刻が表示され、現在時刻が更新されないようにしたい。

こちらがスプレッドシートの中身になります
https://docs.google.com/spreadsheets/d/1PueR4eO116GC-fO3Bs_ewL7vHPywXNFK3sVBtzT4ua0/edit?usp=sharing

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

スクリプトを記入して、現在時刻の表示はできました。

ただし一度スプレッドシートを閉じ、しばらくしてから開くと、日付を取得する関数が入力してあるセルがエラーとなり、再度現在時刻を取得しなければいけない状況になっています。

エラーメッセージ 時間を取得したセルにNAMEと表示され、再度時刻を取得する必要があります。

該当のソースコード

スクリプトへは以下の記述をしました
条件分岐を使用し、TIMESTAMPを入力したセルで現在時刻を取得しています。

function TIMESTAMP() { var d = new Date(); var y = d.getFullYear(); var mon = d.getMonth() + 1; var d2 = d.getDate(); var h = d.getHours(); var min = d.getMinutes(); var s = d.getSeconds(); var now = h+":"+min+":"+s ; return now; }

画面を閉じなければエラーが出ないので、なぜエラーがでるのかが不明です。

お手数をおかけしますが、分かる方いらっしゃればご教授いただければ幸いです。

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

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

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

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

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

guest

回答1

0

セルの中身は、#NAME?などとなっていますでしょうか?
イメージ説明

上の図の場合、右上の赤い部分に矢印を合わせると、
エラーの詳細について、なぜ#NAME?になってるのか、確認できたりします。

イメージ説明

今回、一度関数が実行できているということなので、
なぜ、エラーが出ているのかよく分かっていないのですが、
[#NAME?]エラーの内容を見てみるのはどうでしょうか?

ちなみに、私の環境で似たようなことをすると、
別のアカウントでファイルを読み込もうとした時に、
延々とLodingの文字がセルにある状態になったので、
自作関数の使用をやめたことがあります。


質問に対する回答とは別の話題になりますが、
今回のTIMESTAMP()の場合、
何らかの再計算が起きた時、
TIMESTAMP()の挙動がNOW()の挙動と同じになりませんか?
例えば、gasで他の関数を書き換えて保存をした時、とか、

gasでやるなら、
onEdit等でその時の日時をstringで書き込んでいたほうが良いのではないだろうかと、
思いました。

投稿2021/01/19 00:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

keipro000

2021/01/19 04:35

akirayonaha様 ありがとうございます! #NAME?と表示された箇所のエラー内容を見ると、「不明な関数: 「TIMESTAMP」と表示されます。 現在もうまくできない状況が続いています。 たしかに今回のTIMESTAMPは、NOW()と同じ挙動になります。 TEXT関数も入れてみましたが時間は更新されてしまします。 別の方法で実施していますが、うまくできません。 ⌘ + Shift + (+;キー)で現在時刻の文字列が表示されます。これと同じ状態を、条件分岐で表示させたいのですが、なかなか上手くいきません =IF(セル=TRUE,更新されない時刻表示,"") ここの更新されない時刻の表示方法でいい方法は無いものか模索中です・・・
退会済みユーザー

退会済みユーザー

2021/01/23 13:06

お久しぶりです。 function onEdit(e) { let range = SpreadsheetApp.getActiveRange(); let changeCell = range.getSheet().getRange(range.getRow(), range.getColumn() + 1); let value = range.getValue(); let string = "test"; switch (value) { case true: changeCell.setValue(string); break; case false: changeCell.clearContent(); break; default: break; } } とかどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問