- ベストアンサー
マクロのの設定方法教えてください。
すごく簡単なのか難しいのかもわからないのですが、マクロでボタン(クリック)で下記のような作業をしたいので教えてください。 エクセルで以下のような表 A B C 1 =NOW() 2 出社ボタン 退社ボタン 3 4月27日 4 4月28日 出社ボタンを押すと今日の日付のB4の覧に時間が記載され 退社ボタンを押すとC4の覧に退社時間が記載されるようにしたいのですがどのようにマクロを組めばいいのかわかりません。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。「マクロ?の意味」は概略を記します。 (1)「For Each c In Range("A2:A65536")」→「Each c」はセルA2からセルA65536までの各々のセルについて、「For Each c In Range("A2:A65536")」の次の行から「Next c」の手前の行までの処理(仮に「目的の処理」と呼びましょう。)を行うという意味。 最初は、セルA2について前記の「目的の処理」が行われ、順次セルA3、セルA4・・・・セルA65536について「目的の処理」が繰り返されます。 (2)「If c.Value = Date Then」→ 「c.Value」は、セルA2、セルA3・・・に書かれた中身(=月日)で、セルA2、セルA3・・・が今日の日付(= Date)に一致したなら、次の行から、「End If」の手前の行まで、 即ち、 Cells(c.Row, "B").Value = Time CommandButton1.Enabled = False Exit Sub の処理を行う。 (3)Cells(c.Row, "B").Value = Time → 日付の一致したセルの右となり、B列のセルに現在の時刻を書き込む。ここで、「c.Row」はセルAnの行番号「n」の取得を表す。 (4)Exit Sub → 処理のループを抜け出て終了 (5)Range("A65536").End(xlUp).Row →A列にてデータの入っている一番下のセルの行番号。その行までA列に今日の月日に一致するセルが見つからなかった場合、「MsgBox "A列に今日の年月日がありません"」により「A列に今日の年月日がありません」とメッセージが表示される。 「Each」や「Row」などのキーワードにマウスポインタを合わせ「F1」キーを押すと説明や用法が表示され、VBAの勉強になるかと・・・。お奨めします。
その他の回答 (2)
- pc_knight
- ベストアンサー率66% (52/78)
質問内容を理解できたかどうか自信はありませんが、こんな回答で合っているでしょうか。 Private Sub CommandButton1_Click() For Each c In Range("A2:A65536") If c.Value = Date Then Cells(c.Row, "B").Value = Time CommandButton1.Enabled = False Exit Sub End If If c.Row = Range("A65536").End(xlUp).Row Then MsgBox "A列に今日の年月日がありません" End If Next c End Sub
- sineminna
- ベストアンサー率31% (118/370)
Range("B4").Value = Format(Now(), "hh:mm") 質問が簡単すぎるのでおっしゃってることが違うかも知れませんが。
補足
申し訳ありません説明が不足すいぎました。 現在 Private Sub CommandButton1_Click() ・・・出社時 Cells(Day(Date) + 1, "B").Value = Time CommandButton1.Enabled = False End Sub というマクロおこなっているのですが、この場合日付が月またぎの場合翼月の日付に出社時刻が入力してしまいます。というのは給与の〆の関係で20日でしめたり25日で〆たりと変更されるこがあるからです。 セルをその都度あわせることなく出社ボタンを押すとその日の日付の 出社時刻の覧に時間が入力されるようにしたいのです。 自分の説明不測で申し訳ありません。お手数ですがよろしくお願いします。 ちゃんと説明できているかどうか不安ですが・・・
お礼
ありがとうございます。おもったようなものができました。 初心者の自分に丁寧にありがとうございました。 もじお時間があったら 記載していただいたマクロ?の意味を後日 記載していただけるとうれしいです。 本当にありがとうございました。