|
こんにちは
提示されたテストデータで確認しているので動くはずです。
ただし、右側エリアの並び替えにはユーザーリストを使っていますので、Excelのバージョンによってはダメなのかも・・・
こちらは Excel2003です。
SpecialCells を使っているので、データが有るか無いかどちらかだけのときのエラーだけ
回避すればいいと思いますので「On Error Resume Next」で簡単に済ませちゃってます。
Sub test5()
Dim s As Range
Dim t As Range
Dim sh As Worksheet
Const c As Long = 7
Dim x As Long
Set sh = Worksheets("Sheet1")
Set s = sh.Range("A7", sh.Cells(Rows.Count, "A").End(xlUp))
Set t = s.Resize(, c)
With t.Columns(c)
.Formula = "=IF(B7<>0,B7,"""")"
.Value = .Value
Call test_sort(t, "G1", xlNo, xlDescending)
On Error Resume Next
Call test_sort(Intersect(t, .SpecialCells( _
xlCellTypeConstants).EntireRow), "A1", xlNo, xlAscending)
Call test_sort(Intersect(t, .SpecialCells( _
xlCellTypeBlanks).EntireRow), "A1", xlNo, xlAscending)
On Error GoTo 0
.ClearContents
End With
Application.AddCustomList ListArray:=s.Value
x = Application.CustomListCount
With s.Offset(, c).Resize(, 5)
.Select
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=x + 1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
End With
Application.DeleteCustomList ListNum:=x
End Sub
Sub test_sort(Target As Range, Key As String, Header As XlYesNoGuess, Order As XlSortOrder)
With Target
.Select
.Sort _
Key1:=.Range(Key), Order1:=Order, _
Header:=Header, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
End With
End Sub
> End Subがついていてもそのまま続いて実行できるのですね。
> 勉強不足でEnd Subがあるとそこで実行が途切れるのだと思っていました。
知らない事は誰でも知らないので大した事ではないです。
是非、F8キ−でステップ実行してみて下さい。
確認出来たら「.Select」しているコードはコメントアウトしていいです。
|
|