- ベストアンサー
Windows7 Excel2003でマクロ勉強中、E列が空白の時のエラー原因と回避方法は?
- Windows7のExcel2003を使用してマクロを勉強しています。あるサイトで見つけたコードは、E列が空白の行を削除し、番号を振り直すという機能を持っています。しかし、自分で作った表では『Rangeメソッドは失敗しました。Globalオブジェクト』というエラーが出ます。エラーは表示されますが、処理自体は正しく実行されます。このエラーの原因を特定し、回避する方法を教えてください。
- Excel2003でマクロの勉強をしていますが、E列が空白の行を削除し、番号を振り直すという処理を行いたいと思っています。あるサイトで提供されているコードを使用しているのですが、自分で作った表で『Rangeメソッドは失敗しました。Globalオブジェクト』というエラーが表示されます。しかし、処理は正しく実行されます。このエラーの原因と回避方法を教えてください。
- Windows7とExcel2003を使用してマクロを勉強しています。E列が空白の行を削除し、番号を振り直すコードがあるのですが、自分で作った表ではエラーが発生します。『Rangeメソッドは失敗しました。Globalオブジェクト』とエラーが表示されますが、処理は正しく実行されます。このエラーの原因と回避方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 Activesheet.Rangeの件は、この手のエラーが出るときは、エクセルが、「どのシートを対象にしているのか分からん!」というケースが多いので、とにかく対象シートをはっきりさせましょうという意図であり、今回のコードはそれをしなくても、i=1から始めれば動くはずです。(当方では問題無く動作しました) どんなエラーが出るのか、何処が意図しない動作をするのか、何処で止まるのか詳細をお知らせ下さい。 ご参考までに、対象シートを明確にしたコードを載せます。複数シートを操作する際には、必要になります。 Sub test() Dim i As Long, j As Long For i = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row To 1 Step -1 If ActiveSheet.Range("A" & i).Value <> "" And IsNumeric(ActiveSheet.Range("A" & i).Value) = True Then If ActiveSheet.Range("E" & i).Value = "" Then ActiveSheet.Rows(i).Delete End If End If Next For i = 1 To ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row If ActiveSheet.Range("A" & i).Value = "番号" Then j = 1 If ActiveSheet.Range("A" & i).Value <> "" And IsNumeric(ActiveSheet.Range("A" & i).Value) = True Then ActiveSheet.Range("A" & i).Value = j j = j + 1 End If Next End Sub
その他の回答 (2)
- mitarashi
- ベストアンサー率59% (574/965)
#1&2です。 >表示される という意味が分かりかねます。表示するという作業を行うところは無いと思いますが。 何も起こらないとすると、A列に相当するところを誤って何も無い列を指定しているとか、E列に相当するところを、空白セルが無い列を指定しているとかが考えられますね。 デバッグの入門編としては、コードの中の適当な箇所に Debug.print i msgbox "ここまで実行された" Debug.print Range("A" & Rows.Count).End(xlUp).row とか入れて、ループがどこまで実行されているのか、範囲がちゃんと認識されているのかを把握してください。
お礼
返事が遅れもうしわけありません。このたびは私の質問にお答えいただき適切なご回答ありがとうございました。後の問題については、時間かかりますが、今後自分で研究してみます。また何かありましたら今後ともよろしくお願いします。
- mitarashi
- ベストアンサー率59% (574/965)
Rangeを全て、Activesheet.Rangeに置換して実行すると1004のエラーになって実行が打ち切られるので分かり易いです。i=0から始めているので、Range("A0")と、おかしな事になるのが原因です。(当方XL2000なので、2007と挙動が違っていたら悪しからず)
補足
Rangeを全て、Activesheet.Rangeに置換して実行すると・・の部分が解りません。For i = 0 To Range("A" & Rows.Count).End(xlUp).Row の部分を For i = 1 To Range("A" & Rows.Count).End(xlUp).Row とするとうまく表示されません。
補足
作成いただきましたコードを実行したところ、完璧にできました。ありがとうございました。 ところで、このブックの中に他の書式の表2があるのですが、この表2にこのコードを実行すると、エラーも何も出ず何の変化もなく実行されません。 実行できた先の表には、項目部分にセル結合がありましたが、表2にはセル結合はありません。そこでセル結合したところ、1行だけ表示され、あとの行は何も表示されず正常に動作しませんでした。 教えていただいたコードで実行できないことは、どんな原因がかんがえられるのでしょうか?