- ベストアンサー
changeイベント
セルの値をDeleteキーで消去すると「型が一致しません。」のエラーメッセージが表示され、 if not(target.value>=1 and target.value<=9) then exit sub が黄色くなります。 これを回避する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 エラーの原因は、 > 各マスは縦1横4の結合セルです。 単一セルじゃないから、ですね。 ただ、結合セルの扱いは独特なものになります。 消去した時は、Targetは結合セル全体、 値を確定した時は、Targetは結合セルの先頭の単一セル、 という2通りに処理対象が別れるので、 Exit Sub の条件分岐での値の比較の部分だけ、 Target Target(1) に書き換えることで対策します。 (ついでに赤いフォント色を元に戻す記述を追加しました。 色はそちらでお好きに。) Private Sub Worksheet_Change(ByVal Target As Range) If Target(1).Value = "" Then Target.Font.Color = vbBlack: Exit Sub ' ◆追加 If Not (Target(1).Value >= 1 And Target(1).Value <= 9) Then Exit Sub ' ◆書換え ' If Not Target(1).Value Like "[1-9]" Then Exit Sub ' ◆書換え(上の1行の代り)? N = 0 For C = 2 To 34 Step 4 If Cells(Target.Row, C) = Target.Value Then N = N + 1 If N = 2 Then Target.Font.Color = vbRed: Exit For Next C N = 0 For R = 4 To 28 Step 3 If Cells(R, Target.Column) = Target.Value Then N = N + 1 If N = 2 Then Target.Font.Color = vbRed: Exit For Next R If C > 34 And R > 28 Then Target.Font.Color = vbBlack ' ◆追加 End Sub
その他の回答 (1)
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは、 直接的な対策、というより、そもそもの一般的な基本記法なのですが、 If Target.Count > 1 Then Exit Sub If Not (Target.Value >= 1 And Target.Value <= 9) Then Exit Sub の順番になるように1行書き加えて下さい。 ご提示のエラーは、 単一ではない(複数の)セル範囲を選択してDeleteしているので、 発生します。 ご提示の記述は、 ひとつのセルに対する処理に限定した書き方を選んでいます。 「changeイベント 」も、range.Valueも 複数のセルを対象にしたものです。 複数のセル範囲に対してrange.Valueを取得して、 ">=1" や "<=9" のような比較をしようとしているのでエラーになります。 If Target.Count > 1 Then Exit Sub と先頭に書き加えることで、 単一ではない(複数の)セル範囲に対して「changeイベント 」が発生した場合は、 以降の処理に進まずに、Exit Subします(プロシージャを抜けます)。 もしも、単一ではない(複数の)セル範囲に対しても 「changeイベント 」での処理を加えたい場合は、 「changeイベント 」内の書き方が大きく変わります。 ご要望有れば、お応えしますが、その場合は、 具体的な処理内容を補足してください。
お礼
早々に回答いただきましてありがとうございます。
補足
縦9マス、横9マスに1から9までの数字を1つずつ入れておなじ数字が縦横各1行に重複したら文字色を赤くするという処理です。各マスは縦1横4の結合セルです。 ※ナンプレです。 N = 0 For C = 2 To 34 Step 4 If Cells(Target.Row, C) = Target.Value Then N = N + 1 If N = 2 Then Target.Font.Color = vbRed: Exit For Next C N = 0 For R = 4 To 28 Step 3 If Cells(R, Target.Column) = Target.Value Then N = N + 1 If N = 2 Then Target.Font.Color = vbRed: Exit For Next R
お礼
結合セルの扱いが消去したときと値を確定したときとで違うことがわかりました。 ありがとうございました。