• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:並べ替えの参照が正しくありません。)

エクセル2010VBAで並べ替えの参照が正しくないエラーが発生する

このQ&Aのポイント
  • エクセル2010VBAで昇順に並べ替えをしようとした際に、実行時エラー1004が発生し、並べ替えの参照が正しくないことを示しています。
  • マクロの記録を使って記録を取り、範囲がよく変わるためUsedRangeに書き換えたことが原因で、エラーが発生している可能性があります。
  • 解決するには、[最優先されるキー]ボックスが空白でないことを確認し、正しい範囲を指定して並べ替えを行う必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

No.2 です。 すみません、ちょっとボケてておかしかったです。 「フィルター設定されたセル範囲」 の2列め、なら、  .AutoFilter.Range.Columns(2) と書くのが直接的で解り易いですね。 No.2に書いた相対参照に関する説明は無用でした。 ごめんなさい。 ' ' // 「フィルター設定されたセル範囲」の2列めを基準にソートする例 Sub Macro()   With ActiveWorkbook.Worksheets("ベース").AutoFilter.Sort     .SortFields.Clear     .SortFields.Add _       Key:=ActiveWorkbook.Worksheets("ベース").AutoFilter.Range.Columns(2), _       SortOn:=xlSortOnValues, _       Order:=xlAscending, _       DataOption:=xlSortNormal     .Header = xlYes     .MatchCase = False     .Orientation = xlTopToBottom     .SortMethod = xlPinYin     .Apply   End With End Sub ' ' // それと、書き忘れていましたが、 「フィルターでの並べ替え」 という前提ですので、常にフィルターを設定してある、 という条件を外すと、当然エラーになりますので、 気を付けてください。 フィルターを外すこともあるのでしたら、 [ユーザー設定の並べ替え] の方を使ってマクロの記録を録り直して、再挑戦したほうが いいのかも、です。 以上です。失礼しました。

gtjcgckwk
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

こんにちは。 「フィルターでの並べ替え」 ということでしたら、ActiveSheet.UsedRange、 とは本来無関係ですし、他の間違いの原因にもなりそうでやや危ういですね。 (基本的に.UsedRangeはデータのある範囲という意味ではないので、  データ範囲を捉える目的には使えません。)  ActiveWorkbook.Worksheets("ベース").AutoFilter.Range.Columns("B") のような形で、  「フィルター設定されたセル範囲」 .AutoFilter.Range の  「範囲内の列位置(相対参照)」 例えば2列め .Columns("B") を .AutoFilter.SortSortFields の  「並べ替え」の「Key」列に指定します。 ご提示のエラーの直接の原因は、  「並べ替え」の「Key」=「何列めを基準にソートするか」 の指定範囲をActiveSheet.UsedRangeにしてしまっていることです。 Keyには、「フィルター設定されたセル範囲」内にある、 単列のセル範囲を指定します。 例えば[A1:C11]の範囲にフィルターが掛かっているのでしたら、   .. .AutoFilter.Sort.SortFields.Add _      Key:=Range("B1:B11"), _ という範囲を指定することになるのですが、  .. .Worksheets("ベース").AutoFilter.Range のようにして、[A1:C11]の範囲を捉えて、  その範囲内の2列め という意味で、.Columns("B")を加えて、   .. .AutoFilter.Sort.SortFields.Add _      Key:=ActiveWorkbook.Worksheets("ベース").AutoFilter.Range.Columns("B"), _ のように指定します。 相対参照ということで解り難いかも知れないので例を挙げておきます。  「フィルター設定されたセル範囲」が  [B1:D11] だった場合には、   B列をKeyにするなら、.Columns("A")   C列をKeyにするなら、.Columns("B")   D列をKeyにするなら、.Columns("C") のように、ズラしてあげてください。 ' ' // 「フィルター設定されたセル範囲」の2列めを基準にソートする例 Sub Macro()   With ActiveWorkbook.Worksheets("ベース").AutoFilter.Sort     .SortFields.Clear     .SortFields.Add _       Key:=ActiveWorkbook.Worksheets("ベース").AutoFilter.Range.Columns("B"), _       SortOn:=xlSortOnValues, _       Order:=xlAscending, _       DataOption:=xlSortNormal     .Header = xlYes     .MatchCase = False     .Orientation = xlTopToBottom     .SortMethod = xlPinYin     .Apply   End With End Sub ' ' //

gtjcgckwk
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.1

未確認ながら 此って 多分、ですが With ActiveSheet  .Range(Cells(1,1),Cells(2,1)) End With と 同じ事、かと 上記が 何故、エラーか と、いうと Withが .Range(には、 継承されて、いるが、 Cells(には、 継承されて、いず、 対象シートが 異なる、場合が 出る だからです 振り返って お示しの、物を 見ると  ActiveWorkbook.Worksheets("ベース").AutoFilter.Sort.SortFields.Add Key:= と、ありますが 其の 次の、行では  ActiveSheet.UsedRange ,と、あり 此の、行だけ Worksheet「ベース」を 参照してますよ との、断りが ありません ActiveSheetに、なっています 要するに 誤記  ActiveSheet.UsedRange, 正記  ActiveWorkbook.Worksheets("ベース").UsedRange, では、 無いでしょうか? 参照シート、不一致だ と、思いますよ 対象シートは 1動作内で、統一しましょう

gtjcgckwk
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA エクセルでオートフィルタをされているデータ

    エクセルでオートフィルタをされているデータを 昇順で並べ替えするコードを取得したのですが ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Add Key:=Range("A1:A5203"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("置換").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With なのですが どれが並べ替えのコードなのでしょうか? ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Clear これはオートフィルタの並べ替えを解除するコードだと思いますが ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Add Key:=Range("A1:A5203"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal これは何のコードでしょう?

  • エクセルVBAでデータ並べ替え

    マクロ記録をとると次のようになりました。 これをA列をキーに並べるもっと簡単なコードを教えてください。 Range("A2:G501")となっていますが、これ以上でも対応できるようにしたいです。 どなたか教えていただけないでしょうか。 Sub Macro1() Range("A1").Select ActiveWorkbook.Worksheets("***").Sort.SortFields.Clear ActiveWorkbook.Worksheets("***").Sort.SortFields.Add Key:=Range("A1"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("***").Sort .SetRange Range("A2:G501") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • マクロ 並び替え エラーがでる

    マクロの記録で以下のようなマクロを作りましたが、実行するとエラー91「オブジェクト変数またはブロック変数が設定されていません」とでます。どう直したらよいでしょうか? Sub Macro6() Columns("A:L").Select Selection.AutoFilter ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _ ("A1:A497"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B2").Select End Sub

  • エクセルの並べ替えをマクロで

    知識が無くなかなか解決しません。教えて下さい。 エクセル(2000)のマクロの記録で並べ替えを記録すると下記の様になりました。 Range("A1:M57").Select ActiveWorkbook.Worksheets("表2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("表2").Sort.SortFields.Add Key:=Range("C2:C57"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("表2").Sort.SortFields.Add Key:=Range("D2:D57"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("表2").Sort .SetRange Range("A1:M57") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select End Sub 次のように改良する方法を探しています。 (1)Range("A1:M57").Select → 表によって行数が違う為、行数とおりに範囲選択したい。 M65536とすれば良いのかもしれませんが、パソコンの処理能力が低く、なるべく負担が掛からない様にしたいのですが。列数はA列からM列の限定です。 (2)ActiveWorkbook.Worksheets("表2")  → ("表2")限定ではなく他のシート名でも並べ替えが出来る様にするにはどのようにすれば良いのでしょうか。 いろいろ試しましたがうまく出来ません。お知恵をお貸し下さい。よろしくお願い致します。

  • EXCELでマクロが

    昨日から、期待する動きでなくなりました。 シートに新たに数式を加え、rank関数ではきちんと表示するのですが、マクロを動かすと、 期待した動きでなくなりました。 Sub Sheet2STD昇順並べ替え() ' ' Sheet2STD昇順並べ替え Macro ' ' Range("B6:V24").Select ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("C7:C24") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("B6:V24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select End Sub 図にある下向きの矢印にマクロを登録しています。

  • マクロ記録で作成した並べ替えのコードを修正したい

    Windows7 Excel2007 使用しているマクロ初心者です。 マクロ記録で、次の2個のスクリプトをつくりました。 二つとも正常に実行できています。 しかし、このコードは .SetRange Range("A3:N26")の部分をいちいち手動で変更しなくてはなりません。 この部分を自動で設定し、しかもどちらの一覧表でも使えるコードにしたいです。 どう修正したらよろしいでしょうか? .Header = xlNo以下のコード省略できますか? Sub 一覧表1のソート() Range("B2").Select Worksheets("一覧表1").Sort.SortFields.Clear Worksheets("一覧表1").Sort.SortFields.Add Key:=Range("B2"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Worksheets("一覧表1").Sort .SetRange Range("A3:N26") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub ---------------------------------------------------- Sub 一覧表2のソート() Range("B2").Select Worksheets("一覧表2").Sort.SortFields.Clear Worksheets("一覧表2").Sort.SortFields.Add Key:=Range("B2"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Worksheets("一覧表2").Sort .SetRange Range("A3:P28") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • マクロのシートでのコピーができません。

    ビスタ エクセル 2007を使用しています。B2~E12まで簡単な表を作り E列で昇り順に並べ替えしました。そして並べ替えからこの表を印刷するまでマクロで完成しました。 ところが、別のシートにコピーすると印刷はされますが、並べ替えがされずに印刷だけされます。同じ表を30枚作成し、それぞれ同じ操作と印刷のマクロを組みたいのですが・・・・どなたか助けてください。 Sub ボタン5_Click() ' ' ボタン5_Click Macro ' ' Columns("E:E").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("B2:E12") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub

  • エクセル並べ替え VBA

    ActiveSheet.UsedRange.Addressで 並べ替えの範囲名を指定することはできないのでしょうか? Sub Sample() Cells(1, 1).AutoFilter ActiveSheet.AutoFilter.Range.Sort Key1:=ActiveSheet.UsedRange.Address, Order1:=xlAscending, Header:=xlYes End Sub を動かすと、実行時エラー1004になってしまいます。 Key1:=Range("A1")にするとうまく行きますが、 キチンと範囲を指定してあげたいのですが、その場合どうすればいいでしょう?

  • エクセルのマクロ記録を他のシートでも実行したい

    エクセル2010を使用しています。 シート1でマクロ記録を使用しデータの並び替えをし、 同じブック内にシート1をコピーしてシート2としました。 このシート2でもシート1で行ったデータの並び替えをしたいのですが シート2ではマクロは実行されませんでした。 わからないながらもVBAを見たところ下記のように 記述されおりましたが、どのような修正をすればよいかご教授いただけると助かります。 ちなみに、シート1でマクロを記録し、そのシートを同ブック内に複数コピーして それぞれのシートでマクロを実行させるということを考えています。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A11:Q17").Select ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("B11:B17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="日,月,火,水,木,金,土" _ , DataOption:=xlSortNormal ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A11:A17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("1").Sort .SetRange Range("A11:Q17") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • Excel VBA UsedRange範囲ソート

    図のような中抜の一覧ができているとき、商品コードで空行を飛ばして並び替えをしたいのですが、下記だと空行まで(チョコからわたがしまで)しか対象になりません。 ---------------------------- Sub 並べ替え() With ActiveSheet.Sort .SortFields.Clear 'Key:=Range("A3")でソートする列とタイトル位置を指定 .SortFields.Add Key:=Range("A3"), SortOn:=xlSortOnValues, _ Order:=xlAscending '.「商品コード」("A3").でソート .SetRange Range("A3").CurrentRegion ' 先頭行をタイトル行と見なす .Header = xlYes .Apply End With End Sub ------------------------- 範囲をCurrentRegion ではなくUsedRangeに広げるには、どこをいじったらいいでしょうか。 求める結果としては「商品コード」の列が登り順に揃ってほしいのです。 データ処理としてはソートをかければいいだけですが、UsedRange(範囲内のセルを選択し、Ctrl+Shift+Endキーで選ばれる範囲)をみつけてソートをかける方法を知りたいのです。

このQ&Aのポイント
  • EP-882AWでの年賀状印刷に問題が発生しています。
  • ハガキ印刷ができず、困っています。
  • EP-882AWの年賀状印刷が最悪な状態です。
回答を見る

専門家に質問してみよう