電子書籍の厳選無料作品が豊富!

ExcelのVBAと呼ばれるものを使って
入力した横のセルに入力された時の時刻の表示方法について教えていただきたいです。

Excel初心者でこのVBAを触る事が初めてなのですが
自分と似た質問(Yahoo!知恵袋)のアンサーを頼りにVBAを入力したところ、
エラーが出てしまい、うまく進める事が出来ませんでした。

用語も詳しくないまま、思考錯誤したのですが、自分ではうまく出来なかったため、
こちらの場所をお借りして、詳しい方にぜひご教授いただければ幸いです。




やりたい事としては、
G列に入力した時、横のセルH列に入力された時点の時刻を表示

また、同じsheetで、O列に入力した時、P列に同じく時刻を表示したいです。

参照した方法では、日付表示となっておりますが、セルの[ホーム][数値]のバーから
時刻表示に変更できることは確認できています。


■参照した質問とアンサー
https://detail.chiebukuro.yahoo.co.jp/qa/questio …


下記引用↓
=================================
B列に入力し、A列に日付を書き込む場合
B1→A1
B2→A2
B3→A3

--------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub
Application.EnableEvents = False
Target.Offset(, -1).Value = Now
Application.EnableEvents = True
End Sub
--------------------


こちらの方法をコピペして、AとBをそれぞれGとHに変えてみたのですが、

「コンパイルエラー; 
 修正候補:区切り記号 または」

と警告が表示され、1行目の「Target」部分が青く表示されてしまいました。


解決策ともしよろしければ、
VBAに入力するコードを教えていただけましたら、大変助かります。

質問に分かりにくい部分がありましたら申し訳ございません。
ご指摘いただければ助かります。
どうか、よろしくお願いいたします。

A 回答 (4件)

こんにちは、


先ず初めにPrivate Sub Worksheet_Change(ByVal Target As Range) は
シートイベントでセルの値が変更された時に実行されます。
コードを書くモジュールは、実行したいシートモジュール(Excel Object)です。
VBエディタでシートオブジェクトをダブルクリックしてカーソル位置から下

参考 https://excel-master.net/macro-vba/excel-vba-mod …

標準モジュールに書き、ボタンなどから実行するとエラーが返り、機能しません。

ご質問の場合のコードは下記のようになりますが、
少し調べて頂き、調べても分からない所があれば、追記してください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
With Application
If Not .Intersect(Target, Range("G:G")) Is Nothing Or Not .Intersect(Target, Range("O:O")) Is Nothing Then
.EnableEvents = False
' Target.Offset(, 1).Value = Format(Time, "hh:mm:ss")
Target.Offset(, 1).Value = Format(Time, "hh時mm分ss秒")
.EnableEvents = True
End If
End With
End Sub
    • good
    • 3
この回答へのお礼

Qchan1962さん
ご解答ありがとうございます。

初心者の私でも分かるお優しい説明で、自身の無知による勘違いに気が付けました!さらに解決するコードまで詳しく教えていただき、感謝の気持ちでいっぱいです。

この度は本当にありがとうございました!

お礼日時:2021/04/06 14:37

一番ミスりやすいのって該当列のセルを単独で操作する場合は良いのですが、複数を纏めて処理(例えば範囲選択をして削除やクリアなど)に対する対策なのですが、どうして知恵袋でそれが漏れたのでしょうね。


結構ベテランの方のようですが。
    • good
    • 1
この回答へのお礼

めぐみんさん
ご解答ありがとうございます。

なるほど、そういう部分もあるのですね
知識もない自分には難しかったのですが、勉強になります!
この度はありがとうございました。

お礼日時:2021/04/06 14:37

>こちらの方法をコピペして、AとBをそれぞれGとHに変えてみた



元ネタではなく、あなたが実際に試用しているコードを
コピペしてください。

余計な所をいじったのではないですか?
例えば
正:ByVal
誤:ByVaI
みたいに。
    • good
    • 2
この回答へのお礼

よろずやkinchanさん
ご解答ありがとうございます。

全くもってその通りでございました…!
決まりのコードであることも知らず、いじってしまっていました…
これでは、使えないわけですね。

この度は教えてくださり、本当にありがとうございます。
勉強になりました!

お礼日時:2021/04/06 14:37

以下のマクロを登録してください。


登録はシートモジュールになります。
標準モジュールに登録してはいけません。
(上記の意味が分からない場合は、その旨補足してください)

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Column
Case 7 'G列の場合
Case 15 'O列の場合
Case Else
Exit Sub
End Select
Application.EnableEvents = False
Target.Offset(, 1).Value = Now '1列右側のセルに時刻を設定
Application.EnableEvents = True
End Sub
    • good
    • 1
この回答へのお礼

tatsumaru77さん
ご解答ありがとうございます。

私の一番知りたかった方法を簡潔に分かりやすく教えてくださり、本当に助かりました!ベストアンサーには解説をつけてくれた方とさせていただきましたが、一番理想のtatsumaru77さんのコードを使用させていただいております。

本当に、心から感謝しています。
この度は、本当にありがとうございました。

お礼日時:2021/04/06 14:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!