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

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

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

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

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

Q&A

解決済

1回答

1276閲覧

GAS(JS)でセルに値が入っていたら1つ下の行に日付を入力するのができない。

mumumoon

総合スコア16

Google Apps Script

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

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

0グッド

0クリップ

投稿2021/04/21 11:18

編集2021/04/27 05:17

###勤怠管理をGASで作ろうと思ってます。
コード書くのは初心者より初心者です。
ご了承ください。

打刻開始を押すと
日付、曜日、出勤時間をセルに入力されるコードを書きたいです。
そのはじめとしての日付を入力する場所で詰まっています。


VBA?Excelでも同じことができると思うので、そちらの知識を持っている方がいらっしゃいましたらVBAでの回答でも大丈夫です。自分であとは噛み砕いてJSに切り替えます。

現状のコードは

JavaScript

1function getDateTime() { 2 //現在時刻取得 3 let now = new Date(); 4 let date = now.getDate(); 5 let hour = now.getHours(); 6 let minute = now.getMinutes(); 7 let i = 7; 8 let ssga = SpreadsheetApp.getActiveSpreadsheet(); //シートを読み込む 9 10 let y_m_d = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd'); //年月日 11 // console.log(y_m_d); //String型 12 13 // for(var i = 7; i < 38; i++){ 14 let oldValue_d = ssga.getRange("B"+ i).getValue(); //B7を取得 → この後にforを織り交ぜる? 15 if (oldValue_d == ""){ 16 ssga.getRange("B" + i).setValue(y_m_d); //B7に年月日を入力。 17 }else{ 18 i++ 19 ssga.getRange("B" + i).setValue(y_m_d); //一回ここでbreakする?処理を止める? iの値を保存する? 20 // } 21 }

雑で適当になっているのは理解しています。

自分がわかればいいくらいで書いているので迷惑なのは理解した上での質問です。

これをどのようにすればいいのかご教授いただけますと幸いです。

今後の何度も質問もします。
時間に関しましても表示の仕方が分の方を2桁表示にしたいのですが、そちらも理解していないです。
もし、お時間がある方がいらっしゃいましたら、そちらの方も教えていただけますとありがたいです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

(元のコードから限りなく変更を少なくした形の回答になります)
forとbreakを使って、B列を調べ、値があったら次の行にスキップし、値がない行を見つけた時点で書き込みます。

function getDateTime() { //現在時刻取得 let now = new Date(); let date = now.getDate(); let hour = now.getHours(); let minute = now.getMinutes(); let ssga = SpreadsheetApp.getActiveSpreadsheet(); //シートを読み込む let y_m_d = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd'); //年月日 for(let i = 7; i < 38; i++){ if (ssga.getRange("B"+ i).getValue() == ""){ ssga.getRange("B" + i).setValue(y_m_d); //B列に年月日を入力。 break; } } }

 

・分を2桁で表示する方法
書き込むセルをsetNumberFormat('@') で文字列形式にした後、2桁の数字で書き込みます。

ssga.getRange("E" + i).setNumberFormat('@'); // セルを文字列形式にする ssga.getRange("E" + i).setValue(("0" + minute).slice(-2)); // 分を2桁にする

 


・「日付、曜日、出勤時間をセルに入力されるコードを書きたいです。」とのことですが、日付・時間・分を別々に扱う必要が特になければ、もっと簡単に、下記のようにすることもできます。

function getDateTime() { //現在時刻取得 let now = new Date(); let ssga = SpreadsheetApp.getActiveSpreadsheet(); // シートを読み込む let y_m_d = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd'); //年月日 let youbi = new Array('日', '月', '火', '水', '木', '金', '土'); // 曜日の配列を作成 let h_m_s = Utilities.formatDate(now, 'Asia/Tokyo', 'HH:mm:ss'); // 時刻 for(let i = 7; i < 38; i++){ if (ssga.getRange("B"+ i).getValue() == ""){ ssga.getRange("B" + i).setValue(y_m_d); // B列に年月日を入力。 ssga.getRange("C" + i).setValue(youbi[now.getDay()]); // C列に曜日を入力。 ssga.getRange("D" + i).setValue(h_m_s); // D列に時刻を入力。 break; } } }

投稿2021/04/29 10:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mumumoon

2021/04/30 04:04

ありがとうございます。まだ試せていませんが、qnoir様のコードを参考に使わせていただきます。 解決できそうでとても嬉しいです。 また、質問してしまうかもしれませんが、その時はまたお時間ありましたよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問