Excel VBA質問箱 IV

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

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


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

【74688】sortのループ処理 ねこ 13/8/30(金) 0:38 質問[未読]
【74692】Re:sortのループ処理 kanabun 13/8/30(金) 21:02 発言[未読]
【74712】Re:sortのループ処理 kanabun 13/9/2(月) 10:28 発言[未読]

【74688】sortのループ処理
質問  ねこ  - 13/8/30(金) 0:38 -

引用なし
パスワード
   Sub Macro1()
'
' Macro1 Macro
'


ActiveSheet.Sort.SortFields.Clear
  ActiveSheet.Sort.SortFields.Add Key:=Range("B1:B8"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
    "松山市,高松市,高知市,徳島市", DataOption:=xlSortNormal
With ActiveSheet.Sort
    .SetRange Range("A1:C8")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
End Sub


上の処理を3列ずつずらしてループ処理したいのですがどのようにすればいいでしょうか?素人丸出しの質問ですみません。。。

【74692】Re:sortのループ処理
発言  kanabun  - 13/8/30(金) 21:02 -

引用なし
パスワード
   ▼ねこ さん:こんにちは

レスが付かないようなので、こちらで知る限りのことを...

2007以降 のSortには
・WorksheetのSortプロパティと
・(従来からある)RangeのSortメソッド
があると思います。
マクロの記録は WorksheetのSortですね。
ただ、これは 列範囲をループするのには不適当です。

従来通りの、RangeのSortを使えばいいと思います。

ただし 2007以降のワークシートのSortでは
ユーザー設定リストの指定に
>  CustomOrder:= "松山市,高松市,高知市,徳島市"
が直接使えるのですが、
RangeのSortでは OrderCustom:=13 のように
ユーザー設定リスト内にセットした "松山市,高松市,高知市,徳島市"
の番号を指定しないと動きません。
なので "松山市,高松市,高知市,徳島市" は予め マニュアルでユーザー設定
リストにセットしておいてください。

また、下の例では1行目は列見出しと仮定しています。

Sub Sort1()
  Dim i As Long
  Dim n As Long
  Dim L As Long
  
  L = Application.CustomListCount 'ユーザー設定リスト数
  With ActiveSheet.UsedRange
    n = .Columns.Count
    For i = 1 To n Step 3
      .Columns(i).Resize(, 3).Sort _
        Key1:=.Columns(i + 1), _
        Order1:=xlAscending, _
        OrderCustom:=L + 1, _
        Header:=xlYes     ’列見出しあり
    Next
  End With
  
End Sub

【74712】Re:sortのループ処理
発言  kanabun  - 13/9/2(月) 10:28 -

引用なし
パスワード
   マクロで 並び替えリストを書き込む(ユーザー設定リストに追加する)
部分を加えてみました。

Sub Sort1b()
  Dim i As Long
  Dim n As Long
  Dim L As Long
  
  '並び替えのリストにユーザー設定リストを追加
  With Application
    .AddCustomList _
    ListArray:=Split("松山市,高松市,高知市,徳島市", ",")
    L = .CustomListCount
  End With
  
  '3列づつ並び替え
  With ActiveSheet.UsedRange
    n = .Columns.Count
    For i = 1 To n Step 3
      .Columns(i).Resize(, 3).Sort _
        Key1:=.Columns(i + 1), _
        Order1:=xlAscending, _
        OrderCustom:=L + 1, _
        Header:=xlYes
    Next
  End With
  
  '最後に追加したユーザー設定リストを削除
  With Application
    .DeleteCustomList .CustomListCount
  End With
  
End Sub

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