Excel VBAで並べ替えエラーを解決する方法 – 実行時エラー ‘1004’の原因と対策

Visual Basic

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’」は、ソート対象範囲やソートキーの設定ミスが原因であることが多いです。範囲やキーの設定を見直し、ヘッダーの有無も確認することで、このエラーを解消できます。正しい設定を行うことで、スムーズに並べ替え処理を実行することができます。

コメント

タイトルとURLをコピーしました