Excel VBA UsedRange範囲ソート

このQ&Aのポイント
  • Excel VBAを使用してUsedRangeの範囲でソートする方法について知りたいです。
  • CurrentRegionではなくUsedRangeを使用して、商品コードの列を登り順に並び替えたいです。
  • 質問文章の内容は、Excel VBAを使用してUsedRangeの範囲で商品コードの列を登り順に並び替えたいというものです。
回答を見る
  • ベストアンサー

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キーで選ばれる範囲)をみつけてソートをかける方法を知りたいのです。

  • ketae
  • お礼率85% (292/340)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.2

No1です B1にデータがあったのを見落としてました .SetRange Range(Cells(3, "A"), ActiveCell.SpecialCells(xlLastCell)) これでいかがでしょう。

ketae
質問者

お礼

エラーはゴミ文字が別行にあったからでした。 うまく並びました。

ketae
質問者

補足

「変数が定義されていません」とコンパイルエラーが出るのですが、どこを指しているのでしょうか。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.3

> 「変数が定義されていません」とコンパイルエラーが出るのですが 質問に書かれているコードの .SetRange Range("A3").CurrentRegion を .SetRange Range(Cells(3, "A"), ActiveCell.SpecialCells(xlLastCell)) に変更しただけで、こちらではエラーは出ないのですが・・・エクセル2013です。 変数と認識されるのはxlLastCellだと思いますが、試しに .SetRange Range(Cells(3, "A"), ActiveCell.SpecialCells(11)) にしてみるとどうでしょう。 ただ、xlLastCellはエクセル95からの組み込み定数に入っているので使えるはずなのですが、参照設定でしょうか。 Visual Basic For Application Microsoft Excel 15.0 Object Library OLE Automation Microsoft Office 15.0 Object Library

ketae
質問者

補足

ありがとうございます。 SpecialCells(11)動きました。 数字(添え字?)での指定ができるのですね。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.1

他にデータがないのでいたら .SetRange ActiveSheet.UsedRange でいかがですか。

ketae
質問者

お礼

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

関連するQ&A

  • UsedRangeを使ってソートすることは可能?

    UsedRangeを使ってソートすることは可能ですか? エクセルですが 学年  組  出席番号 2    A    1 1    B    2 と言うデータがあり、 これにフィルタをかけつつ、A列で昇順に並び替えるVBAを作ってるのですが Sub さんぷる() オートフィルタをかける Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter UsedRange.Sort Key1:=Cells(1, 1), order1:=xlAscending End Sub とすると、 UsedRangeでコンパイルエラーになるのですが どうすればよろしいでしょうか?

  • エクセル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

  • マクロ 並び替え

    Sub 並べ替え() With Worksheets("Sheet1").Sort .SortFields.Clear .SortFields.Add Key:=Range("e6"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ CustomOrder:="金,銀,銅" .SetRange Range("a6:Cl16").CurrentRegion .Header = xlNo .Apply End With End Sub 6行目~16行目で並び替えを行ってほしいのですが、1行目から並び替えになります。 .SetRange Range("a6:Cl16").CurrentRegion と記入しているので6列目からになると思っていたのですが。 マクロ初心者のため詳しい方がいれば教えて下さい。

  • ワードVBAからエクセルのソートができない

    こんにちは MS Word 2007から条件に合う語を抜き出してエクセルに貼り付けた後、ソートをするマクロを書いているのですが、ソートの部分で「型が一致しない」というエラーが出てしまい困っています。エクセルのVBAでは問題なく動作しています。 次がエクセルVBAで作ったソートのVBAです。 ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:A6") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With これをWord VBAに貼り付けて、一部を変更しました。 myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Clear myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With myExcel.workbooks(BookName).sheets(1).Sort .SetRange Range("A1:A6") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With myExcelは事前に作成したExcelオブジェクトです。BookNameは作成したブックのファイル名です。2行目「myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal」でエラーになります。 「型が一致しない」と表示されます。ちょこちょこ書き換えているのですがエラーは解消されません。 Windows 7/8 64bit Word 2007. Excel 2007 解決策をご存じでしたら教えてください。

  • VBA ソートについて

    win7、Excelは2013を使用しています。 VBAでソートのコーディングをしたいのですが、 画像の様に、途中で空白のセルを順番指定して並べ替りできますか? 下記の ここに空白セルを指定する のところに空白セルを指定したいのですが、 そもそもそういう事が出来るものなのでしょうか..... よろしくお願い致します。 Sub ソート() With ActiveSheet.Sort.SortFields .Clear .Add key:=Range("D2"), SortOn:=xlSortOnValues, _ Order:=xlAscending, CustomOrder:= _ "A,D,H,G,F,D,B,ここに空白セルを指定する,R" _ , DataOption:=xlSortNormal End With With ActiveSheet.Sort .SetRange Range(Cells(2, 4), Cells(9, 4)) .Apply End With End Sub

  • VBAのソートで

    お世話になります。 初歩的な質問なのですが・・。 表のソートをしたいのですが、 表は2行目に見出しがあり3列で100行の構成です。 下記の様な記述で表の範囲をセットするところでエラー がかかってしまうのですが、どうしたらうまくいくでしょうか。 どなたかご教示頂きたく宜しくお願い致します。    記 Sub ソート() Dim myrhg As Range Dim myar As Variant Dim i As Long Sheets("台帳").Range("A1").CurrentRegion.Select Selection.Offset(1, 0).Select Set myrng = Selection.Resize(Selection.Rows.Count - 1).Select myar = Array(1, 2, 3) With myrng For i = 0 To UBound(myar) .Sort key1:=Cells(1, myar(i)), Order1:=xlAscending, header:=xlYes Next End With Set myrng = Nothing 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")にするとうまく行きますが、 キチンと範囲を指定してあげたいのですが、その場合どうすればいいでしょう?

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • VBAで統合セルの並び替えは可能ですか?

    表題のとうりなのですが・・・ Sub 並番号() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range("M4") .SetRange Range("A4:M242")   .Apply End With End Sub とプログラムしてるのですが、M4からM242までがセルを3個ずつ 統合したセルになっております。 統合セルの並び替えは出来ないのでしょうか? ご教授お願いいたします。

  • 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 これは何のコードでしょう?

専門家に質問してみよう