[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA セルの値が変わったら、そのセルを60で割る』(おたこ)
お世話になります。
下記のご教授お願いします。
セル範囲A1:C10の中で数値が変更されたら
変更されたセルは自動で60で徐算させたいです。
よろしくお願いします。
< 使用 Excel:Office365、使用 OS:Windows10 >
シートモジュールに貼り付けてください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C10")) Is Nothing Then Exit Sub If Target.Cells = "" Then Exit Sub
Application.EnableEvents = False Target.Cells = Target.Cells / 60 Application.EnableEvents = True
End Sub (bi) 2019/03/05(火) 13:00 修正13:03
biさんのプログラムに手を加えて。 Private Sub Worksheet_Change(ByVal Target As Range) Dim WK_RANGE As Range If Intersect(Target, Range("A1:C10")) Is Nothing Then Exit Sub For Each WK_RANGE In Intersect(Target, Range("A1:C10")) If WK_RANGE <> "" Then Application.EnableEvents = False On Error Resume Next WK_RANGE.Value = WK_RANGE.Value / 60 On Error GoTo 0 Application.EnableEvents = True End If Next End Sub
(ねむねむ) 2019/03/05(火) 13:15
Worksheet_Changeは複数範囲でも発生するので For Each でその対処、 またOn Error Resume Nextで文字が入力された場合の対処を。 (ねむねむ) 2019/03/05(火) 13:18
おっと、こっちの方がいいか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim WK_RANGE As Range If Intersect(Target, Range("A1:C10")) Is Nothing Then Exit Sub Application.EnableEvents = False On Error Resume Next For Each WK_RANGE In Intersect(Target, Range("A1:C10")) If WK_RANGE <> "" Then WK_RANGE.Value = WK_RANGE.Value / 60 End If Next On Error GoTo 0 Application.EnableEvents = True End Sub
(ねむねむ) 2019/03/05(火) 13:23
Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Range Dim R1 As Range
Set R = Intersect(Target, Range("A1:C10")) If R Is Nothing Then Exit Sub
Application.EnableEvents = False For Each R1 In R If IsNumeric(R1.Formula) = True Then R1.Value = R1.Value / 60 End If Next R1 Application.EnableEvents = True End Sub
ただ、一度1/60した結果なのかオリジナルなのか区別できないので、表示された数値をちょっと変えようとすると更に1/60してしまうのはいいのかなぁ?、とか思います。
(???) 2019/03/05(火) 13:38
エラー回避のことすっかり忘れていました。失礼しました。私の回答は無視してください。 (bi) 2019/03/05(火) 13:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.