アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のコードでは、行の挿入や行の消去をすると13のエラーが出てしまいます。
デバックでは、
If Val(Target.Value) = Val(Range("E" & Target.Row).Value) Then
を示しているのですが、
直し方が分かりません。。。
教えていただけましたら幸いです。
毎度、エラー時に「終了」を押して作業しています。

Windows10/Excel2019
で使用中です。
---------------------------
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A245")) Is Nothing = False Then
If Val(Target.Value) = Val(Range("E" & Target.Row).Value) Then
Application.EnableEvents = False
Target.Value = "'" & Target.Value
Application.EnableEvents = True
Else
MsgBox "番号が違います"
Application.EnableEvents = False
Target.Value = "再入力"
Application.EnableEvents = True
End If
ElseIf Intersect(Target, Range("B1:B245")) Is Nothing = False Then
If Target.Value = "1" Then
Application.EnableEvents = False
Target.Value = "済"
Application.EnableEvents = True
ElseIf Target.Value = "2" Then
Application.EnableEvents = False
Target.Value = "未確認"
Application.EnableEvents = True
End If
End If
End Sub

----------------------------
宜しくお願いいたします。

A 回答 (3件)

ローカルウィンドウ開き、1行目にブレークポイント設定し


行削除、追加する。その時のTarget.countを見て下さい。エクセルの列最大値16384?がセットされてきます。
この数値か、操作セル数では絶対無いであろう10000以上だったら、
 Exit Subさせます。
    • good
    • 0

こんばんは



ご提示のコードは、「変化したセル(=Target)が一つだけである」との仮定のもとに作成されていると思われます。

実際には、ご質問のように行(や列)を挿入したり、削除したり、あるいはセル範囲にペーストしたり、セル範囲を消去したりすると、変化したセル範囲全体がtargetとして渡されます。
(ご質問の場合だと、行全体)

複数セルの場合、Target.Value はそのセル範囲の値を持つ配列を意味します。(単体セルの場合には、セル値になります)
それを Val(Target.Value) として評価させようとすると、できないので
「エラー13 型が一致しません」になっているものと思います。
Target.Row はセル範囲の先頭のセルを代表値として返すので、エラーにはなりませんが、異なる行位置を取得してしまうので、処理の結果が予定とは違ってしまう可能性がありそうです。

Target.Cells.Cout でセル範囲内のセルの個数を取得できますので、最初にセル数を確認しておいて処理方法を決めるか、複数セルにも対応できるような処理にしておけば宜しそうに思います。

もしも、複数セルを順に処理するのなら
For Each c In Intersect(Target, Range("A1:A245"))
 ' c を用いた処理
Next c
のような形式にして、処理すれば可能と思います。
(Intersect()の内容がNothingだとエラーになりますので、事前チェックが必要です)

※ ただし、ご質問のように行そのものを挿入、削除した場合、挿入するとその行が、削除した場合は削除した行範囲(=実際にはもう存在しない)が渡されますので、そのままの処理で良いのかどうかはわかりませんが、注意が必要そうな気がします。
    • good
    • 1

結合されたセルが邪魔してるんじゃないかな。


試しに、別名保存したBookのシート全体を選択して、セルの書式から「セルの結合」を解除してから試してみると良いでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!