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

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

新規登録して質問してみよう
ただいま回答率
85.39%
Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

185閲覧

スクリプトエディタで日時の自動入力をしたい(スクリプトエディタで他シートでは実現できているアクションを実行するとエラーが出てしまう(日付の取得))

tsubugai.taka

総合スコア4

Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/05/30 03:35

実現したいこと

スプレッドシートの表の中で 列C に書き込みを行うと 列B に自動で指定された形式の日時が入るスクリプトエディタを組みたいと考えています。(C列の3列目以降に入力があると、B列の3行目以降に形式を指定された日時を自動入力→B列が空白の場合のみ)
※ただエラーがでているだけなのか?と思いトリガーを組んでみましたが発動しませんでした。

発生している問題・分からないこと

他のシートでは正常に動作しているのですが、保存後に実行をしてもエラーが表示されてしまい正常に動作しません。

エラーメッセージ

error

1TypeError: Cannot read properties of undefined (reading 'range') 2onEdit @ コード.gs:5

該当のソースコード

function onEdit(e) { const ws = "タイムカード" let row = e.range.getRow() let col = e.range.getColumn() let currnetDate = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mmam/pm'); Logger.log(date); //現在の日時 if (row >= 3 && col == 3 && e.source.getActiveSheet().getName() === ws) { //シートがwsでかつ1列目で2行目以降か? e.source.getActiveSheet().getRange(row, 2).setValue(currnetDate) if (e.source.getActiveSheet().getRange(row, 2).getValue() === "") { //Date Enterdが空のとき e.source.getActiveSheet().getRange(row, 2).setValue(currnetDate) //Date Enterdに日時を入れる } } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

下記のサイトを元に今までは「let currnetDate = new Date() //現在の日時」のみでおこなっていたのですが、形式を「2024/05/30 11:30am」のような形式に固定したくて追加してみました。
ですが変更したものでも、元に戻したものでもエラーが出てしまいます。
https://qiita.com/rf_p/items/ff841885ef6346afe5d4

補足

function onEdit(e) {

const ws = "タイムカード"

let row = e.range.getRow()
let col = e.range.getColumn()
let currnetDate = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mmam/pm');
Logger.log(date); //現在の日時

if (row >= 3 && col == 3 && e.source.getActiveSheet().getName() === ws) { //シートがwsでかつ1列目で2行目以降か?
e.source.getActiveSheet().getRange(row, 2).setValue(currnetDate)
if (e.source.getActiveSheet().getRange(row, 2).getValue() === "") { //Date Enterdが空のとき
e.source.getActiveSheet().getRange(row, 2).setValue(currnetDate) //Date Enterdに日時を入れる
}
}
}

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

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

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

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

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

guest

回答1

0

ベストアンサー

rangeを取得できていないのは、編集時ではなく変更時のトリガーにしているからだと思いますが、
いずれにしてもシートの操作だけの処理なら関数名をonEditにしておくだけで十分なので、
トリガーは必要ありませんから削除しましょう。

ちなみに変数名の食い違い等エラーの要因を修正すると次のようになると思います。
なお、シートに記録される日付の書式(AM/PMの表示は'a'12時間制は0時始まりなら'K'12時始まりなら'h')は、
シートの表示形式を変更しないと期待どおりにならないかもしれません。
実行数のログにはAM/PM付きで表示されます。

なお、B列が空白かどうかに拘らず記入する部分は除去してあり、
編集された行のB列のセルを取得する方法を簡便な処理にしました。
条件判断が && の場合どれかの段階で false になるとその先のチェックはしないので、
列のチェックを先にしました。

JavaScript

1function onEdit(e) { 2 if (!e) { 3 console.log('エディタから実行できません セルを編集してください'); 4 return; 5 } 6 const ws = "タイムカード" 7 8 const row = e.range.getRow(); 9 const col = e.range.getColumn(); 10 const currentDate = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd h:mma'); //h→12:10PM K→0:10PM 11 Logger.log(currentDate); //現在の日時 12 13 if (col === 3 && row >= 3 && e.range.getSheet().getName() === ws) { //シートがwsでかつ1列目で2行目以降か? 14 if (e.range.offset(0, 2 - col).isBlank()) { // B列(2)のセルが空のとき 15 e.range.offset(0, 2 - col).setValue(currentDate) // B列(2)のセルに日時を入れる 16 } 17 } 18}

投稿2024/05/30 09:30

編集2024/05/30 10:03
YellowGreen

総合スコア789

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

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

tsubugai.taka

2024/05/30 09:58

細かくご教示をいただきありがとうございます! とても勉強になりました💦 早速ですがトリガーは削除しました! 再度いただいたスクリプトを試してみましたが、今度は違うエラー表示がでてきました💦 TypeError: Cannot read properties of undefined (reading 'range') onEdit @ 無題.gs:4
YellowGreen

2024/05/30 10:04

セルが編集された時に自動的に起動するスクリプトですが、 エディタから手動で実行していませんか? エディタから手動では実行できませんよ。 一応、エラーが出ないように修正しました。
tsubugai.taka

2024/05/30 10:39

ありがとうございます!!! 解決しました!!! 本当にありがとうございます😭😭😭😭😭
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問