[[20190305123840]] 『VBA セルの値が変わったら、そのセルを60で割る』(おたこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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.