- ベストアンサー
エクセルのマクロ実行時に空白セルでエラーが発生する問題の解決方法
- エクセルのマクロを実行する際に、空白セルでエンターキーを押すとエラーが発生する問題があります。
- この問題を解決するためには、マクロを実行する前にセルが空白でないかをチェックする必要があります。
- セルが空白でない場合にのみマクロを実行するように条件分岐を設定することで、エラーを回避することができます。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
End If にしてください。
その他の回答 (8)
- xls88
- ベストアンサー率56% (669/1189)
≪参考≫ 特定のセル範囲が変更されたときに処理を実行する http://www.moug.net/tech/exvba/0050131.htm 「Change」イベント・・・セルの内容が変更された時にプロシージャを実行する。 http://www9.plala.or.jp/siouxsie/date06.html
- xls88
- ベストアンサー率56% (669/1189)
回答番号:No.6で提示したコードですが よく見ると、If文でEndとするところがElseになっていました。 Endに直してください。 あるいは、1行で If Intersect(Target, Range("E3:N3")) Is Nothing Then Exit Sub としても良いと思います。
お礼
ありがとうございます。 全てうまくいきました。 さきほどのエラーも解消できました。 感謝しております。
補足
ご指導ありがとうございます。 ifブロックに対応するend if がありません。 のエラーが出てしまいます。 いかがでしょうか。
- xls88
- ベストアンサー率56% (669/1189)
回答番号:No.5の補足 Intersectで、Targetが、Range("E3:N3")内にあることを検出した後 Targetが、空白なら、Exit Subするようにします。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E3:N3")) Is Nothing Then Exit Sub Else IF Target.Value = "" Then Exit Sub Call Macro7 On Error Resume Next ActiveSheet.ShowAllData End Sub 余談ですが 性急に、結果ばかりを求めず、コードの意味を理解されるようにした方が良いと思いますよ。 VBAのヘルプを活用してください。解りにくい部分もありますが、なかなか充実していると思います。 デバッグ等で、F8キーでコードを1行ずつ実行するのもコードの理解が容易になります。 あと、a26vNvvubさんが建てられたスレが乱立しています。 解決されたなら締め切り処理をよろしくお願いいたします。
- xls88
- ベストアンサー率56% (669/1189)
If Application.WorksheetFunction.CountBlank(Range("E3:N3")) <> 0 Then Exit Sub 上記で、E3:N3範囲に、空白セルがひとつでも在ると、Exit Subしています。 回答番号:No.3で示したコードに変えて、試してみてください。 IF Target.Value = "" Then Exit Sub
- xls88
- ベストアンサー率56% (669/1189)
下記でキー設定されたままになっています。 Application.OnKey Key:="{ENTER}", Procedure:="Macro7" どこかで解除してやらなければなりません。 Application.OnKey Key:="{ENTER}", Procedure:="" しかし、Changeイベントですから、データが変更Enterで確定されたなら動きます。 OnKeyを使うことはないと思います。 下記で試してみてください。 Call Macro7
補足
ありがとうございます。 エンターキーを解除して、下記を試みましたが、 こんどは、マクロが動いてくれません。 Private Sub Worksheet_Change(ByVal Target As Range) If Application.WorksheetFunction.CountBlank(Range("E3:N3")) <> 0 Then Exit Sub If Intersect(Target, Range("E3:N3")) Is Nothing Then Exit Sub Else Call Macro7 End If On Error Resume Next ActiveSheet.ShowAllData End Sub
- xls88
- ベストアンサー率56% (669/1189)
下記で試してみてください。 IF Target.Value = "" Then Exit Sub
補足
やはりだめでした。 補足ですが、 他のセルでも、どこかのセル上でエンターキーを押すと、マクロが動き出します。 シートにマクロを設定したはずなのですが・・・
- mt2008
- ベストアンサー率52% (885/1701)
前回の回答では解決しませんでしたか? 何が問題だったか補足してください。
補足
前回はありがとうございました。 そのときはできたのですが、 なぜか、その後、突然できなくなりました。 下記のマクロです。 ちなみに、再生すると、マクロ名を聞かれますので、macro7を選択しております。 どうか今回もよろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Application.WorksheetFunction.CountBlank(Range("E3:N3")) <> 0 Then Exit Sub If Intersect(Target, Range("E3:N3")) Is Nothing Then Exit Sub Else Application.OnKey Key:="{ENTER}", Procedure:="Macro7" End If On Error Resume Next ActiveSheet.ShowAllData End Sub
- mo2yakko
- ベストアンサー率54% (30/55)
COUNTAかループでチェックするしか思いつきませんでした。(^^; 'COUNTAで判断 If Application.WorksheetFunction.CountA(Range("E3:N3")) < 10 Then Exit Sub End If 'ループで判断 For Each c In Range("E3:N3") If c.Value = vbNull Or c.Value = vbEmpty Then Exit Sub End If Next
補足
ありがとうございます。 ちなみに、どの位置にいれるのでしょうか。 お手数ですが、ご教示のほどよろしくお願いします。
お礼
ありがとうございます。 おかげさまでやりたいことができました。 しかし、実はもう少し入りこんでおりまして、 あるコマンドボタンを入力すると、セルに自動である文字が入り、検索をかけてくれる構成です。 直接、手入力でも、できるようにと、今回のご依頼をさせていただきました。 その結果、手入力した場合は、うまくいくのですが、 今度は、コマンドボタンを押して、セルに自動入力後、検索がうまくいきません。 型が一致しませんエラーがでてしまいます。 If Target.Value = "" Then この文が引用されてます。 なぜなのでしょうか。