再々投稿になりますがうまく動作しない為困っています
D列とE列に3桁、4桁の数字を入力した時にコロンを勝手に入力して時刻にするプログラムが常駐し、
トグルボタンを押すことで
ONの場合
B列に文字が入力された際にD列のみ現在の時刻を入力し
E列に3桁、4桁の数字を入力した時にコロンを勝手に入力して時刻にするプログラムが動作し
OFFの場合
B列に文字が入力された際にD列のみ現在の時刻を入力するプログラムがオフになり
D列とE列に3桁、4桁の数字を入力した時にコロンを勝手に入力して時刻にするプログラムのみ動く
プログラムです
それぞれソースコードを表記しますので解決をお願いします。
'トグルボタンのプログラム
Private Sub ToggleButton1_Click()
With ToggleButton1
If .Value Then
'トグルボタンONの処理
.Caption = "自動入力 ON"
Range("J1") = "ON"
MsgBox "自動入力が ONになりました", vbInformation
Else
'トグルボタンOFFの処理
.Caption = "自動入力 OFF"
Range("J1") = "OFF"
MsgBox "自動入力が OFFになりました", vbInformation
End If
End With
End Sub
'3桁、4桁の数字を入力した時にコロンを勝手に入力して時刻にするプログラム
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("E: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
'Call myTime_input(ActiveCell)
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
'J1にONが入力されている時のみ,B列に値が入力されたらD列に現在の時刻を入力するプログラム
Sub myTime_input(ByVal Target As Range)
If Not Intersect(Target, Range("D:D")) Is Nothing Or Target.Count = 1 Then Call myTime_input(Target)
If Target.Column <> 2 Then Exit Sub
Application.EnableEvents = False
Target.Offset(, 2).Value = Time
Application.EnableEvents = True
End Sub
No.8ベストアンサー
- 回答日時:
J1=ON,OFFにかかわらず、D:E列へ数字が入力された場合、:を付加するようにしました。
数字は、0~2359までの整数の場合に限ります。
上記以外の場合は、入力値に:を付加しません(そのままの状態です。)
'時刻設定
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, v
Dim Trg As Range
Application.EnableEvents = False
If Range("J1").Text = "ON" Then
'J1=ONの場合
'B列に入力された時、D列に現在時刻を設定
Set Trg = Intersect(Target, Range("B:B"))
If Not Trg Is Nothing Then
For Each c In Trg.Cells
If c.Value = "" Then
c.Offset(, 2).Value = ""
Else
c.Offset(, 2).Value = Time
c.Offset(, 2).NumberFormatLocal = "[h]:mm"
End If
Next c
End If
End If
'D,E列に入力された時、:を付加して時刻を設定
Set Trg = Intersect(Target, Range("D:E"))
If Not Trg Is Nothing Then
For Each c In Trg.Cells
If IsNumeric(c.Value) Then
v = Fix(c.Value)
If v = c.Value Then
If v >= 0 And v < 2400 And v Mod 100 < 60 Then
c.Value = TimeSerial(Int(v / 100), v Mod 100, 0)
c.NumberFormatLocal = "[h]:mm"
End If
End If
End If
Next c
End If
Application.EnableEvents = True
End Sub
No.7
- 回答日時:
D:E列に3~4桁の数字を入力するのは
0:00~23:59の範囲と理解してよいですか。
(0時0分から23時59分の範囲)
それとも、26:58のように24時を超える数字も想定していますか。
その場合は、上限は何時になりますか。
No.6
- 回答日時:
No5です。
仕様の確認です。
D:E列に3~4桁の数字が入力された場合、
J1=ON、J1=OFFにかかわらず、
そのセルへ:を付加して設定したい。
ということでしょうか。そうであればNo5は無視してください。
No.5
- 回答日時:
>'J1=ONの場合
>'B列に入力された時、D列に現在時刻を設定が
>E列に3桁、4桁の数字を打っても0:00になってしまいます
Worksheet_Changeを以下のように変えてください。
(ToggleButton1_Clickはそのままです)
--------------------------------------------------------------
'時刻設定
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, v
Dim Trg As Range
Application.EnableEvents = False
If Range("J1").Text = "ON" Then
'J1=ONの場合
'B列に入力された時、D列に現在時刻を設定
Set Trg = Intersect(Target, Range("B:B"))
If Not Trg Is Nothing Then
For Each c In Trg.Cells
If c.Value = "" Then
c.Offset(, 2).Value = ""
Else
c.Offset(, 2).Value = Time
c.Offset(, 2).NumberFormatLocal = "[h]:mm"
End If
Next c
End If
'D,E列に入力された時、そのまま設定
Set Trg = Intersect(Target, Range("D:E"))
If Not Trg Is Nothing Then
For Each c In Trg.Cells
c.NumberFormatLocal = "G/標準"
Next c
End If
Else
'J1=OFFの場合
'D,E列に入力された時、:を付加して時刻を設定
Set Trg = Intersect(Target, Range("D:E"))
If Not Trg Is Nothing Then
For Each c In Trg.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
No.4
- 回答日時:
とりあえず、修正しておきました。
Sub myTime_input(ByVal Target As Range)は不要になりました
(Worksheet_Changeへ組み込みました)ので、使う必要はありません。
以下のようにしてください。
'トグルボタンのプログラム
Private Sub ToggleButton1_Click()
Application.EnableEvents = False
With ToggleButton1
If .Value Then
'トグルボタンONの処理
.Caption = "自動入力 ON"
Range("J1") = "ON"
MsgBox "自動入力が ONになりました", vbInformation
Else
'トグルボタンOFFの処理
.Caption = "自動入力 OFF"
Range("J1") = "OFF"
MsgBox "自動入力が OFFになりました", vbInformation
End If
End With
Application.EnableEvents = True
End Sub
'時刻設定
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, v
Application.EnableEvents = False
If Range("J1").Text = "ON" Then
'J1=ONの場合
'B列に入力された時、D列に現在時刻を設定
Set Target = Intersect(Target, Range("B:B"))
If Not Target Is Nothing Then
For Each c In Target.Cells
If c.Value = "" Then
c.Offset(, 2).Value = ""
Else
c.Offset(, 2).Value = Time
c.Offset(, 2).NumberFormatLocal = "[h]:mm"
End If
Next c
End If
Else
'J1=OFFの場合
'D,E列に入力された時、:を付加して時刻を設定
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
No.3
- 回答日時:
こちらで、実行すると
Private Sub Worksheet_Change(ByVal Target As Range)の中で
コンパイルエラーが発生します。添付図参照
(Elseに対応するIfがありません)
正しい Private Sub Worksheet_Change(ByVal Target As Range)の
ソースを提示していただけませんでしょうか。
No.1
- 回答日時:
上手く動かないとは『どういう希望に対してどう言う結果になってしまうのか?』があれば良いのかも。
気になるってなら、シリアル値は整数部分が年月日・小数点以下が時間だと思います。
3~4桁の数値を100で割っても全てが小数点以下にはならないのでは?
しかもInt関数を使うと小数点以下は消されますし。
過去質がわからないのでこれ以上はどうなのかは不明です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) VBAで重複した値のセルに色付けをしたい 1 2022/11/02 16:12
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
java初心者です。入力されたの...
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
プログラミングの問題です 「金...
-
cout関数を使っているのですが...
-
プログラミング初心者です。 Py...
-
"scanf"でエンターで改行させな...
-
Userformの入力順序をタブオー...
-
scanfが2回使えない・・・?;
-
ワードで文字を入力する時の変...
-
if文の条件にscanf関数を使うと…?
-
入力値が1以下、かつ数字以外の...
-
java 入力された文字列を数値に...
-
プログラム(C)
-
scanf関数について
-
WindowsでEOF
-
2進数の1の数を数える問題
-
Linuxで入力待ちなしkeyread関...
-
プログラムC言語の整数の約数に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
double型が正常に認識されてい...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
Excel VBAで、Application.Inpu...
-
C言語について。
-
batプログラム上で文字列を入力...
-
*をユーザーが入力した数字の数...
-
cout関数を使っているのですが...
-
漢字のソートについて
-
数字以外が入力されたらエラー...
-
Userformの入力順序をタブオー...
-
ワードで文字を入力する時の変...
-
Linuxで入力待ちなしkeyread関...
-
java初心者です。入力されたの...
-
EDITコントロールで入力できる...
-
Eclipseコンソール表示を、リセ...
-
小数か整数かを判定する方法
-
C言語scanf_sで何故か2回入力に...
-
VB.NETで16進数+16進数や16進...
-
Linuxプログラミングで、キーボ...
おすすめ情報
回答ありがとうございます。
OFFの場合は問題ないですが
ONの場合自動入力ができず
数字を打っても0:00になってしまうという不具合です
回答ありがとうございます
こちらがおそらく正しいソースコードです
よろしくお願いします
(収まりきらないので2回分けて捕捉します)
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
修正ありがとうございます
J1=OFFは問題なかったですが
'J1=ONの場合
'B列に入力された時、D列に現在時刻を設定が
E列に3桁、4桁の数字を打っても0:00になってしまいます
修正・回答ありがとうございます。
D:E列に3~4桁の数字が入力された場合、
J1=ON、J1=OFFにかかわらず、
そのセルへ:を付加して時刻とわかるようになれば大丈夫です
B列に文字が入力された場合D列に現在の時刻を入力するのだけon、off切り替えられるようにしたいのです。
また時刻なので0:00~23:59の範囲で理解してもらって大丈夫です
よろしくお願いします