Excel VBAを使用して、ボタンを押下するとSheet1のデータをソートするスクリプトを作成している際に、実行時エラー ‘1004’ が発生することがあります。この記事では、このエラーの原因とその解決方法について解説します。
エラーの原因
質問者が直面している「実行時エラー ‘1004’」は、並べ替えの参照に誤りがある場合に発生します。特に、並べ替えの対象範囲やソートのキーを指定する際に、誤った範囲を指定してしまうことが多いです。
具体的には、次の点に注意する必要があります。
- ソート対象範囲が正しく指定されているか:指定された範囲内にデータが存在し、並べ替えが実行できる範囲を正確に指定する必要があります。
- ソートキーが正しく設定されているか:ソートのキーとなる列(A列、B列、D列、H列)が正しく設定されているかを確認します。
- 行と列の範囲の一致:ソートのキーの範囲と並べ替える範囲が一致していない場合にもエラーが発生します。
解決方法1:ソート対象範囲の修正
コード内で指定された範囲が正しいかを確認しましょう。特に、次の行に誤りがあります。
.SortFields.Add Key:=ws.Range("D" & r & ":C1048576")
上記のコードでは、D列の範囲とC列の範囲が逆になっています。D列とC列の間違いを修正し、次のように正しい範囲に修正してください。
.SortFields.Add Key:=ws.Range("D" & r & ":D1048576")
解決方法2:並べ替え範囲の修正
並べ替える範囲を正しく指定することも重要です。以下のように範囲を調整しましょう。
.SetRange ws.Range("A4:AF1048576")
これにより、データ範囲が正しく設定され、エラーが解消されるはずです。
解決方法3:Headerプロパティの設定
コード内で`.Header = xlNo`と指定されていますが、ヘッダー行がある場合は、この設定を`xlYes`に変更する必要があります。もし1行目から3行目が見出しとして使われている場合、次のように修正しましょう。
.Header = xlYes
これにより、Excelがヘッダー行を正しく認識し、並べ替えの範囲が適切に処理されます。
まとめ
Excel VBAで並べ替えを実行する際に発生する「実行時エラー ‘1004’」は、ソート対象範囲やソートキーの設定ミスが原因であることが多いです。範囲やキーの設定を見直し、ヘッダーの有無も確認することで、このエラーを解消できます。正しい設定を行うことで、スムーズに並べ替え処理を実行することができます。


コメント