Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2906 / 13646 ツリー ←次へ | 前へ→

【65354】ソートについて isausa 10/5/14(金) 13:29 質問[未読]
【65356】Re:ソートについて Jaka 10/5/14(金) 14:45 発言[未読]
【65357】Re:ソートについて isausa 10/5/14(金) 16:16 お礼[未読]
【65359】Re:ソートについて Jaka 10/5/14(金) 16:29 発言[未読]

【65354】ソートについて
質問  isausa  - 10/5/14(金) 13:29 -

引用なし
パスワード
   どうしても動かないし、マクロがスマートではないので、お知恵を拝借したいと思います。

B列からP列までデータが入っています。
8行目が見出し
9行目からデータが書き込まれるようになっており、データ数は常に変わります。
まず、B1からPの最終行までのデータ範囲を選択して、その後ソートをしたいのですが、そのソートの条件が4つあります。記録式でマクロを書いて、修正をかけてみましたが、お手上げです。
助けてください。
ソートの優先順位は1.O列(得意先コード)、2.E列(枝番)、3.D列(オーダー)、4.B列(日付)の順です。
記録式でやってみたのは下記のとおり、なんとかスマートになりますか。

Sub ソート()
'
' ソート Macro
'
  Dim myRow1 As Long
  Dim myRow2 As Long
  Dim myStrg As String
   
  myRow1 = 8
 
  myRow2 = Cells(65536, "P").End(xlUp).Row
  
  myStrg = "B" & myRow1 & ":$P$" & myRow2
  ActiveCell = myStrg
 
  
  Selection.Sort Key1:=Range("E9"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortTextAsNumbers
  Selection.Sort Key1:=Range("O9"), Order1:=xlAscending, Key2:=Range("D9") _
    , Order2:=xlAscending, Key3:=Range("B9"), Order3:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers, DataOption2:= _
    xlSortTextAsNumbers, DataOption3:=xlSortNormal
End Sub

【65356】Re:ソートについて
発言  Jaka  - 10/5/14(金) 14:45 -

引用なし
パスワード
   >ソートの優先順位は1.O列(得意先コード)、2.E列(枝番)、3.D列(オーダー)、4.B列(日付)の順です。
書いてあるコードと、ソートする順番が違うように思いますが。
2007で無い限り、上記条件でソートする場合、優先順位が下位の方の組み合わせからソートします。
例えば、

1回目
第1キー
D列
第2キー
B列
で、ソート。

2回目
第1キー
O列
第2キー
E列
で、ソート。

またこんな組み合わせでもいいです。
1回目、
第1キー
B列
で、ソート。

2回目
第1キー
O列
第2キー
E列
第3キー
D列
で、ソート。

>  myRow2 = Cells(65536, "P").End(xlUp).Row
>  myStrg = "B" & myRow1 & ":$P$" & myRow2
>  ActiveCell = myStrg
>  Selection.Sort Key1・・・・・・

SElectionの部分を直接セルを指定してやった方がいいですね。

>  myRow2 = Cells(65536, "P").End(xlUp).Row
>  myStrg = "B" & myRow1 & ":$P$" & myRow2
   Range(myStrg).Sort Key・・・・

【65357】Re:ソートについて
お礼  isausa  - 10/5/14(金) 16:16 -

引用なし
パスワード
   jakaさん
ありがとうございました。


Range(myStrg).Sort Key・・・・
で大変うまくいきました。件数にすると1500件くらいなのに、少し処理スピードが遅いように思いますが、しかたないですね。

【65359】Re:ソートについて
発言  Jaka  - 10/5/14(金) 16:29 -

引用なし
パスワード
   ▼isausa さん:
>Range(myStrg).Sort Key・・・・
>件数にすると1500件くらいなのに、少し処理スピードが遅いように思いますが、しかたないですね。

数式が使われているようでしたら、再計算を手動にすれば格段に向上すると思います。
数式が使われていなくても、手動にした方がいいかも。

2906 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free