- ベストアンサー
EXCEL VBAデータ並び替えエラー解決方法
- EXCEL VBAを使用してデータの並び替えを作成しましたが、実行時エラー(1004)が発生しています。原因を特定できずに困っています。
- 質問の内容は、EXCEL VBAを使ってデータの並び替えをしている際に発生した実行時エラー(1004)についてです。どうすればエラーを解決できるかを教えてください。
- EXCEL VBAでデータの並び替えを作成しましたが、実行すると実行時エラー(1004)が発生してしまいます。原因を見つけられずに困っています。どうすればエラーを解決できるか、ご教示いただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Windows XP SP3, Excel 2003で試してみました。 その結果、「実行時エラー '1004':」が出る2つのケースがありました。 1.プロシージャが「基礎データ」以外のシートモジュールにある この場合は「アプリケーション定義またはオブジェクト定義のエラーです。」というメッセージになります。 原因は、シートモジュール内でワークシートオブジェクトを省略した場合に、アクティブなシートではなくそのモジュールのシートが採用されるというところにありました。 対策の1つとしては、シートモジュールには他のシートを扱うコードは置かない、というのがありますし、私もそうしています。 でも、根本的対策としてはオブジェクトをきちんと指定するのが一番です。 今回は以下のようにしたところエラーは出なくなりました。 EndRow = Worksheets("基礎データ").Range("A1").End(xlDown).Row Worksheets("基礎データ").Select Worksheets("基礎データ").Range(Worksheets("基礎データ").Cells(1, 1), Worksheets("基礎データ").Cells(EndRow, 20)).Select Selection.Sort Key1:=Worksheets("基礎データ").Range("D1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal メンテナンス性を考えるとWithステートメントあるいはワークシートオブジェクト型変数を使った方がよさそうです。 また、他のブックと併用する場合など、ブックも指定したほうがいいこともあります。。 2.並べ替えるセル範囲にセルの結合がある この場合、プロシージャが標準モジュールにあるなら「この操作には、同じサイズの結合セルが必要です。」というわかりやすいメッセージが出ますので、おそらく質問者様はこの質問を立てるまでもなく解決されることと思います。 それ以外のモジュールの場合は「アプリケーション定義またはオブジェクト定義のエラーです。」という通常のメッセージでした。
お礼
迅速なご回答ありがとうございました。