[[20220310090655]] 『VBA 実行エラー1004の回避』(ていすう) ページの最後に飛ぶ

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

 

『VBA 実行エラー1004の回避』(ていすう)

 お世話になります。
 下記のコードで、「算式は残してハンド入力されたセルのみクリア」しようと思います。
 (2つのエリア)
 通常は問題ないのですが、エリア内にハンド入力されたセルがないと
	実行エラー1004
	該当するセルが見つかりません
とエラーになります。
どのように回避すればいいのでしょうか?

 Sub クリアー1()
    '入力値のみクリアー
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Range("F6:AJ300").Select
    Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Selection.ClearContents

    Range("AS6:BW300").Select
    Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Selection.ClearContents

    Range("A1").Select

 End Sub

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


 対応の方針としては2通り考えられて、

 1) SpecialCellsでエラーがでても無視する
  → On Error Resume Next をつかう

 または、

 2) SpecialCellsでエラーが出ないようにする
    → 該当するセルが必ずあるようにしておく
  → 問題無いセルに事前に値をいれておく(どうせクリアされるから)

   Range("AJ302").Value = "Dummy"
   Range("F6:AJ300,AJ302").SpecialCells(xlCellTypeConstants, 23).Clear
(´・ω・`) 2022/03/10(木) 09:39

もろ被りしましたが、投稿しておきます。

エラーの原因は既に理解されてると思うので↓のように該当するセルが無ければエラーを無視すればよいとおもいます。

    Sub クリアー1_改造()
        On Error Resume Next
        ActiveSheet.Range("F6:AJ300,AS6:BW300").SpecialCells(xlCellTypeConstants, 23).ClearContents
        On Error GoTo 0
        ActiveSheet.Range("A1").Select
    End Sub

(もこな2) 2022/03/10(木) 09:40


 ダミーの手がありましたね。
 これなら初心者でも分かります(^^;)。
 プログラムの世界では常套手段なのでしょうか…。
 早々のご回答ありがとうございました!

(ていすう) 2022/03/10(木) 10:27


 >これなら初心者でも分かります(^^;)。
 今回の場合、可読性の観点からいうと、
 ・On Error Resume → コメントなしでも意味がわかる
 ・ダミーデータ入れる → コメントなしではエラー対策であることがわかりにくい
 ですね

 >プログラムの世界では常套手段
 と思いますが...
 「無いとエラーになるなら、自前で置けばいいじゃない」という

 ただし、多くの場債、ダミーかどうかの判定が必要なので一手間増えます。
 今回の場合、問答無用でクリアなので、ダミーかどうかの判定の手間が不要でした
(´・ω・`) 2022/03/10(木) 10:58

 丁寧なフォローありがとうございます。

(ていすう) 2022/03/10(木) 11:59


コメント返信:

[ 一覧(最新更新順) ]


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