[[20220311094718]] 『VBA 並び替えでエラー1004が発生する』(素人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 並び替えでエラー1004が発生する』(素人)

初めまして、ご教授よろしくお願いします。

A,B,D〜Lまで1行目からデータが入力されたリストがあります。

D列を最優先、I列を次に優先し、昇順で並び替えたかったので

Sub 並び替え()

Sheets("データ").Select

  With Range("A1").CurrentRegion
  .Sort key1:=.Columns(4), order1:=xlAscending, Header:=xlNo
  .Sort key2:=.Columns(9), order2:=xlAscending, Header:=xlNo

End With

End Sub

というマクロを使用したのですが、

実行時エラー1004
並び替えの参照が正しくありません。参照が並べ替えるデータ内にあることと、[最優先されるキー]ボックスが空白でないことを確認してください。

というエラーが発生してしまいました。

自分なりに調べたところ、C列が空白であることが原因ではないかと思うのですが、対処方法が分かりません。

ご協力をよろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 >自分なりに調べたところ、C列が空白であることが原因ではないかと思うのですが、対処方法が分かりません。

Range("A1").CurrentRegion は、

A1セルを含む空白で囲まれたセル範囲というような意味になりますので、
空白列または空白行が表の区切りとして認識されてしまいます。
なのでA列からB列までしか指定していないことになり、
その範囲にない列をキーとして指定しているのでエラーになると思います。

表の中に空白列があるということなので、
CurrentRegionという以外の言葉を使って、
表の範囲をエクセル君に説明してあげる必要があります。
まずは、日本語で表現してみてはいかがでしょう?
その言葉をVBA語に翻訳するところを手伝ってもらえばよいかと思いました。
(まっつわん) 2022/03/11(金) 10:57


 こんな感じじゃないですか?

 Sub 並び替え()
     Sheets("データ").Select

     With Intersect(Columns("A:L"), ActiveSheet.UsedRange)
         .Sort key1:=.Columns(4), order1:=xlAscending, key2:=.Columns(9), order2:=xlAscending, Header:=xlNo
     End With
 End Sub

(半平太) 2022/03/11(金) 10:59


>>まっつわん様
アドバイスありがとうございました。

>>半平太様
いただいた式を活用し、最終的にこうなりました。

Sub 並び替え()

Sheets("データ").Select
Dim 最終行 As Long

最終行 = Range("A" & Rows.Count).End(xlUp).Row

  Range("A1:L" & 最終行).Sort _
   key1:=Range("D1"), order1:=xlAscending, _
   key2:=Range("I1"), order2:=xlAscending, _
   key3:=Range("G1"), order2:=xlAscending, _
   Header:=xlNo

 End Sub

ご指導ありがとうございました。

(素人) 2022/03/11(金) 13:09


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.