VBAのworksheet_changeで
J1にONの値が入っているときのみ
B列に文字が入力された場合
D列に時間を入力し
それ以外は
D列とE列に
3桁か4桁の文字を入力した場合
コロンを自動入力し時刻を入力するようにしましたが
>J1にONの値が入っているときのみ
B列に文字が入力された場合
D列に時間を入力し
の方だけうまく動かないので教えてください
ソースコード
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$J$1"
If Range("J1").Value = "ON" Then
If Target.Column <> 2 Then Exit Sub
Application.EnableEvents = False
Target.Offset(, 2).Value = Time
Application.EnableEvents = True
Else
End If
End Select
Dim myTime As Long
If Intersect(Target, Range("D3:E1100")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
On Error GoTo EH
If .Value <> "" Then
If IsNumeric(.Value) And .Value > 0 Then
If .Value - Int(.Value) = 0 And .Value Mod 100 < 60 Then
myTime = .Value
Application.EnableEvents = False
.Value = TimeSerial(Int(myTime / 100), myTime Mod 100, 0)
.NumberFormatLocal = "[h]:mm"
Application.EnableEvents = True
Exit Sub
End If
End If
End If
EH:
Application.EnableEvents = False
.ClearContents
.Select
Application.EnableEvents = True
End With
End Sub
No.2ベストアンサー
- 回答日時:
No1です。
ご質問文にある、
>J1にONの値が入っているときのみ
>B列に文字が入力された場合
>D列に時間を入力し
>それ以外は
>D列とE列に
>3桁か4桁の文字を入力した場合
>コロンを自動入力し時刻を入力する
のようにしたつもりですが、動作しないってことでしょうか???
ただし、内容的にはご提示のコードにならっていますので、「3桁か4桁の文字」のチェックは行っていませんし、セルの書式設定の制御もご提示のロジックのままにしてあります。
(全体の書式が「標準」等の時に、J1がONでない時には、D、E列に数値を入れると時刻と解釈されたり、そうでなかったりする可能性があります)
>trueで
>J1にONの値が入っているとき
>B列に文字が入力された場合D列に時間を入力
>elseは何もしない場合
>どう書き換えればよろしいですかね?
文章の意味がわかりません。
何か制御を変えたいのであれば、なさりたいように変更してください。
もしも、「J1がONでなければ何もしない」と言う意味であるなら、Else句以降を削除すれば良いでしょう。
No.1
- 回答日時:
こんにちは
ご質問文に記載のない部分はよくわかりませんけれど、ざっと見て同じ内容でよければこんな感じでしょうか?
(複数セルにコピペ等しても動作するようにしてあります)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, v
Application.EnableEvents = False
If Range("J1").Text = "ON" Then
Set Target = Intersect(Target, Range("B:B"))
If Not Target Is Nothing Then
For Each c In Target.Cells
c.Offset(, 2).Value = Time
Next c
End If
Else
Set Target = Intersect(Target, Range("D:E"))
If Not Target Is Nothing Then
For Each c In Target.Cells
v = c.Value
If IsNumeric(v) And v > 0 And v Mod 100 < 60 Then
c.Value = TimeSerial(Int(v / 100), v Mod 100, 0)
c.NumberFormatLocal = "[h]:mm"
End If
Next c
End If
End If
Application.EnableEvents = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba SelStart、SelLen教えてく...
-
【VBA】マクロの入ったファイル...
-
A列に記載されているフォルダ...
-
VBA listBoxから
-
ExcelVBA シート名を複数セルか...
-
現在のブックを閉じないで、マ...
-
Outlookの「受信日時」「送信者...
-
ユーザーフォームに別シートか...
-
VBAコンボボックスで選択した値...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
Outlookの「受信日時」「件名」...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
Excelのマクロでワードのテキス...
-
【ExcelVBA】インデックスが有...
-
VBA 別ブックからコピペしたい...
-
VBA実行後に元のセルに戻りたい
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコードを教えてください
-
【ExcelVBA】インデックスが有...
-
ExcelVBA シート名を複数セルか...
-
エクセルvbaについて
-
エクセルのマクロについて教え...
-
【VBA】マクロの入ったファイル...
-
VBA UserFormからの転記で
-
エクセルVBAの配列について
-
Excelで「Ctrl+c」、「Ctrl+v...
-
VBAコードについて教えてくださ...
-
ExcelのVBAコードについて教え...
-
Excel マクロについての相談
-
VBAで質問があります
-
VBAコードについて
-
【ExcelVBA】VBA実行でダイアロ...
-
Excel関数またはVBAでの質問に...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
Outlookの「受信日時」「件名」...
おすすめ情報
回答ありがとうございます。
>Set Target = Intersect(Target, Range("D:E"))
If Not Target Is Nothing Then
For Each c In Target.Cells
v = c.Value
If IsNumeric(v) And v > 0 And v Mod 100 < 60 Then
c.Value = TimeSerial(Int(v / 100), v Mod 100, 0)
c.NumberFormatLocal = "[h]:mm"
End If
Next c
End If
の部分は常に動作させて
trueで
J1にONの値が入っているとき
B列に文字が入力された場合D列に時間を入力
elseは何もしない場合
どう書き換えればよろしいですかね?