[[20201230212719]] 『セルが空白(0)の場合ENTERキーでのChangeイベント』(森野ふくろう) ページの最後に飛ぶ

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

 

『セルが空白(0)の場合ENTERキーでのChangeイベントを起動させない記述は』(森野ふくろう)

下記記述ではセルの数値をクリアしても起動してしまいます。
今と同じようにセルに入力し直さない時と空白=0の時もイベントが起動しないようにするにはどうすればいいでしょうか。
よろしくお願いいたします。

Private Sub Worksheet_Change(ByVal Target As Range)

  Select Case Target.Address(False, False)
    Case "H2"              'このセルが変更されたら---(1)
          Call 移動 'このマクロを起動する---(2)
    Case "I2"              'このセルが変更されたら---(1)
      Range(("J" & Range("I2") + "5")).Select 'このセルに移動する---(2)

    Case Else
  End Select
End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 If Target.Value = "" Then Exit Sub
(どん) 2020/12/30(水) 22:16

どんさま
早速ありがとうございます。正常に起動しました。
すみませんが、「0」の入力の場合も起動させないようにするにはどのようにすればいいでしょうか。

(森野ふくろう) 2020/12/30(水) 22:29


 複数セルに入力するとコケるので
 If Target.Count <> 1 Then Exit Sub
 If Target.Value = 0 Then Exit Sub

(どん) 2020/12/30(水) 22:50


どんさま
お手を煩わせて申し訳ありません。希望の動きとなりました。
今後ともよろしくお願いいたします。
ありがとうございました。

(森野ふくろう) 2020/12/30(水) 22:56


もう見てないかもですが。

■1
既にコメントがあるように、Changeイベントはtargetが複数になることがあり得るので、セルのアドレスで判定するのはあまりお勧めしません。

■2
Targetが複数セルだった場合、Valueプロパティは配列を返すので「Target.Value = 0」だとまずいです。
(どんさんの提案は事前に単一セルであるかを判定しているため問題ないです)

■3

 Range(("J" & Range("I2") + "5")).Select

↑って思い通りになってますか?
2重括弧の必要があるのか疑問なのと、「+ "5"」のように、文字の5を結合しようとしている?のが少々気になります。

■4
>イベントが起動しないよう
基本的にセルの値が変更された時点で、イベントは起動します。
なので、「イベントを発生させない」ではなく、「イベントが発生したあと、条件に応じてそれぞれの処理をする」と考えたほうがよいとおもいます。

    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case True

            '▼書き換えられたセルに「H2セル」が含まれるか判定して真なら処理
            Case Not Intersect(Target, Range("H2")) Is Nothing
                If Range("H2").Value <> 0 Then
                    Call 移動
                End If

            '▼書き換えられたセルに「I2セル」が含まれるか判定して真なら処理
            Case Not Intersect(Target, Range("I2")) Is Nothing
                If Range("I2").Value <> 0 Then
                    Range(("J" & Range("I2").Value + "5")).Select
                End If

        End Select
    End Sub

(もこな2 ) 2020/12/31(木) 12:45


もこな2さま
ありがとうございます。基本的な知識もないので稚拙な変な記述になっていたようです。
Range(("J" & Range("I2") + "5")).Select 
試行では異状なく動いて呉れていますがご指摘の通り下記へ変更しました。
Range("J" & Range("I2") + 5).Select

イベント対象のセルは2個を超えることはなく、どんさまからご指導いただきました記述で希望通りの動きがありますが、上記に変更させていただきました。
年末御多忙の中ありがとうございました。
 
(森野ふくろう) 2021/01/01(金) 20:38


■5
>イベント対象のセルは2個を超えることはなく、
ちょっと誤解があるようです。
注目すべきは、【同時に複数の】セルが変更されたときです。

あまりやらないかもしれませんが、複数セルを選択してから、何か入力して確定にCtrl+Enterを使うと、【同時に複数の】セルの書き換えが発生します。

また、セル範囲を貼付することでも【同時に複数の】セルが書き換えられますし、なにより範囲選択してDeleteを押してクリアすることでも【同時に複数の】セルが書き換えられます。

もともと単一セルだけの書き換えに対応したいということであれば、どんさんが示されているように単一セルじゃなければ処理を終わらせるようにすればよいですが、貼付や範囲クリアは発生しがちな処理だとおもうので必要があれば考えておいた方がよいとおもいます。

■6
↓のようにした場合、I2セルに数値として見なせないものがあった場合、それはそれでこまりませんか?

 Range("J" & Range("I2") + 5).Select

(もこな2) 2021/01/02(土) 00:25


もこな2さま
色々とありがとうございます。すみません、私の理解を超えるものに展開しているようです。
最初に細かく説明せずに申し訳ございません。
ブックには顧客データの入力された「管理表」シートと「チェック表」、「送付状」のシートがあります。
管理表には上部(ウインドウ枠の設定済)にチェック表を作成する時の対象整理番号を入力する「H2」とその横に移動マクロを組み込んだアイコンがありこれをクリックすればいい話ですがクリックする手間を省くためイベントを起動させようと考えました。
また、送付状を作成する時に対象整理番号を入力する「I2」がありますが、何のマクロもなく管理表シート上の当該の整理番号の行を探す必要があります。(探したあと少し項目を入力してから送付状シートへ移行して管理表の各項目が反映されたものを印刷します)
二つのセルに同時入力することもなく、数字以外が入力されることはありません。(因みに二つのセルにはテータの入力規則で日本語入力・オフ(英語モード)としています)
そこで当初のChangeイベントを作り(大部分はネットから拾いました)、誤入力した場合空白(0)にしたら起動しないようにしようと質問させて頂いた次第です。
よろしくお願いいたします。
(森野ふくろう) 2021/01/02(土) 19:49

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.