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

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

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

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

Google Apps Script

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

Q&A

解決済

2回答

1849閲覧

自作数式 日時を表示するときの曜日の表示

yoshi.work

総合スコア5

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2019/10/17 08:09

前提・実現したいこと

GASで自作の数式を作成しています。あるセルに入力があった時、日時を出すようにしたいと思っています。数式は=houmon(A1,"B1")です。B1に入力があった場合、A1に表示する。というものです。
表示したいものは、月、日、曜日、時間です。
例えばA1に「10/17(木)16:00」と表示したいです。

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

作成したものだと、曜日の部分が数字になります。今はA1に「10/17(4)16:00」と表示されます。

該当のソースコード

function houmon(value, index) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var str_time = sheet.getRange(index).getValue();
var str_input = value;
var temp = "";

if ((value) && (str_time != "")) {
var ctime = new Date();
var MM = ctime.getMonth()+1;
var DD = ctime.getDate();
var dd = ctime.getDay();
var hh = ctime.getHours();
var mm = ctime.getMinutes();
var t = MM+"/"+DD+"("+dd+")"+" "+hh+":"+mm;
return t;
} else {
return temp;
}
}

試したこと

いくつかの曜日を正しく表示すると書かれていたコードも入れてみましたが、うまく出ません。
例えば、

function GetDayOfWeek() {
var date = new Date();
var dayOfWeek = date.getDay();
var dayOfWeekStr = [ "日", "月", "火", "水", "木", "金", "土" ][dayOfWeek];
Logger.log(dayOfWeekStr);
return dayOfWeekStr

とか、

function myFunction() {
var ary = [‘日’, ‘月’, ‘火’, ‘水’, ‘木’, ‘金’, ‘土’];
var now = new Date();
var week_num = new Date().getDay();
var week = ‘(‘+ary[week_num]+’)’;
var time = Utilities.formatDate(now, ‘Asia/Tokyo’, ‘yyyy/MM/dd’);

とか。
そのまま入れてみたり、少しいじってみたりしましたが無理でした。

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

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

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

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

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

y_waiwai

2019/10/17 08:32

無理、とはどういうふうになるんでしょうか
yoshi.work

2019/10/17 13:48

すいません。どのように編集したかは忘れましたが、例えば、何も変化がない。曜日だけしか出ない。とか、望んでいる答えになりませんでした。
guest

回答2

0

今回の作業で初めてGASを作成した初心者ですいません。

実はpapinianus様の回答にあるリンク先のGASを利用させていただき、1つ作成はしてみました。入力セルにも法則性を持たせて表示できるようにしました。今のところはエラーもありません。
ただ、今回新しいものを作成した理由はいくつかあり、あまり得意でない人も編集するのですが、ほぼ同じ入力をするため、ドロップダウンで複数の中から選択するより、チェック方式にして、見たらすぐにわかるようにしたかった。複数の人数が入力に関係するので、不必要なセルを保護したら日時がうまく出ないので、セルの保護として警告が出るようにしかできない。数式の場合ならセルを保護しても表示される。といった理由などから数式にできないか考えた次第です。
if文で作成もしてみましたが、シートを開いた時点で日時が更新されました。なので自作できないか調べました。

ご指摘の通り、qiitaを参考に作成しました。先ほどシートを開いてみたら、日時が更新されました。それではダメなので、最初に作成したものを利用したいと思います。
1つだけ改善したいと思うのは、「10/17(木)16:00」と表示するためセルの幅がとられる。なので折り返しの表示にしたいができない。ということだけでしょうか。

回答ありがとうございました。

投稿2019/10/17 14:20

yoshi.work

総合スコア5

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

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

0

ベストアンサー

あるセルに入力があったとき、を関数で実現するのはアプローチとして不適切です。
onEditによる編集トリガーを使うべきです。

その方法ではシートを開き直すたびに日時が更新されます。(qiitaを参考にしたのではないかと邪推します)

こちらの質問では隣に書くようにしていますが位置が相対的に決まるならある程度は対応できるはず。
もし、法則性がないなら、私なら設定シートを別に作って、特定のシートで編集がおきたら、設定シートを参照して書き込む、という作り込みをします。もしくはそもそもスプレッドシートの履歴かスプレッドシート以外を使います。

投稿2019/10/17 08:32

papinianus

総合スコア12705

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

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

papinianus

2019/10/17 08:36

日付が数字になる、を忘れてました。 対応は、 var t = MM+"/"+DD+"("+[‘日’, ‘月’, ‘火’, ‘水’, ‘木’, ‘金’, ‘土’][dd]+")"+" "+hh+":"+mm; とするか、そもそも日付文字列を自分で作らず、Dateオブジェクトをそのままセットしてスプレッドシートの書式で対応するか、ではないですかね。
papinianus

2019/10/22 14:37

https://qiita.com/Yamotty/items/888ae6f93a05a8cfc16f https://qiita.com/daichi_ca/items/23c4d8e662dcbb5571a7 こういう使いかたはできる。 検証したが本質的に、セル関数では、関数の再計算時に、前の関数実行結果を参照できないし、前の入力値も参照できないし、他のセルへのsetValueも禁じられているので、今回のやりたいことへのアプローチとして使いようがないことを確認した。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問