行範囲を指定するコードで実行時エラーが発生するが?

Question 017p Previous Next
074ページ 2章1-6 定番[C1] ◆ 環境・・ Excel 2003 & Windows XP
詳細は こちら
74ページの定番[C1] 「行を非表示または再表示する」 を使いたいと思いますが、 2000行位あるリストデータを区分し、あるレベルの部分の行を非表示にしたいと考えております。

最初の行と最終の行の行Noを P.167 の Match関数で取得することができましたが、その値を使って 
Rows(行1 : 行2).EntireRow.Hidden = True がうまく使えず、デバッグでは「型が違う」と表示されます。
最終行は +8 しないといけない ということもありますが どうすればよいかご教示ください。 基本の問題だろうと思いますがわかりません。 よろしく。
Answer   Copyright (C) 2007.6.9 永井善王
拙著「Excel VBA マクロ組み方講座 プロの定番・裏技・合わせ技[編]」をご購読、ありがとうございます
あなたが参考にされた [C1] のサンプルは下記コードの上4行で、最下行はあなたが考案されたコードです。
    ブック名 = "Book5.xls"
    シート名 = "Sheet3"
    行 = "2:3"                                  '2:3は例
    Workbooks(ブック名).Worksheets(シート名).Rows(行).EntireRow.Hidden = True
                                                '非表示
    Rows(行1 : 行2).EntireRow.Hidden = True

サンプルの4行目と、最下行のコードの主な相違点は、赤字の部分です。

あなたのコードの前には、Match関数で取得した値を変数 「行1」と 「行2」に代入するコードがあるはずです。
ここでは、それらのコードの代わりとして下記のように入力してみました。
    行1 = 2
    行2 = 3 + 8
    Rows(行1 : 行2).EntireRow.Hidden = True
すると、3行目のコードが赤字 (コロンだけは反転) となり、右上図のエラーが表示されてしまいましたので、3行目のコードを下記のとおりに修正しました。
    Rows(行1 & ":" & 行2).EntireRow.Hidden = True
この修正したマクロを実行してみると問題なく動作して、2行目から11行目が非表示になりました。

ご質問文にある「型が違う」エラーは実行時エラーのはずで、このマクロの場合は、変数 「行1」または 「行2」に異常値が代入された状態で 3行目のコードが実行されると、右下図のように表示されます。

つまり、Match関数で取得した行No.が正しくなかった場合に発生すると考えられますが、とりあえず、 [デバッグ]ボタンをクリックします。
すると、左図のように原因コードが黄色く網掛け表示されますから、変数名 「行1」または 「行2」 にマウスポインタを重ねて値を表示させ、根本原因を究明します。
以上で問題解決できるかと思いますが、結果をご連絡ください。

 

Excel VBA Macro