|
▼かみちゃん さん:
返事が遅くなり本当に申し訳ありません。
かみちゃん様に教えていただいたサイトは大変参考になりました。
同じようなことを考える方はやっぱりいるんですね。
が、いくつか問題が起こりそれを考えているうちに時間が経ってしまいました。
教えて頂いたものを参考に自分の目的に合うように作ったのが次のプロシージャ
です。(私では理解できないところがあったので自分のレベルに合わせた)
Sub 行の並べ替え()
Dim WS1 As Worksheet
Dim X As Long
Dim TList, DList As Variant
Set WS1 = Worksheets("台帳T")
'得意先をユーザー設定リストに追加
Sheets("得意先T").Select
TList = Range(Range("B2"), Range("B2").End(xlDown))
Application.AddCustomList ListArray:=TList
X = Application.GetCustomListNum(TList)
'ダミーユーザー設定リストを追加
DList = Array("売上", "値引き売上", "入金", "相殺", "前受金")
Application.AddCustomList DList
WS1.Select
WS1.Sort.SortFields.Clear
' 得意先別で並べ替え(優先1)
WS1.Sort.SortFields.Add Key:= _
Range(Range("A2"), Range("A2").End(xlDown)), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:=X, _ ※2 X+1で指定すると何故かエラーになる
DataOption:=xlSortNormal
' 日付昇順で並べ替え(優先2)
WS1.Sort.SortFields.Add Key:= _
Range(Range("B2"), Range("B2").End(xlDown)), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
' 種目別で並べ替え(優先3)
WS1.Sort.SortFields.Add Key:= _
Range(Range("C2"), Range("C2").End(xlDown)), _
SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"売上,値引き売上,入金,相殺,前受金", DataOption:=xlSortNormal
' 前期繰越を一番前に(優先4)
WS1.Sort.SortFields.Add Key:= _
Range(Range("E2"), Range("E2").End(xlDown)), _
SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"前 期 繰 越", DataOption:=xlSortNormal
With WS1.Sort
.SetRange Range(Range("H1"), Range("A1").End(xlDown))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'これを入れないと次回使用時にファイルが壊れる
WS1.Sort.SortFields.Clear
'ユーザー設定リストの削除
Application.DeleteCustomList ListNum:=X
'ダミーユーザー設定リストの削除
Application.DeleteCustomList ListNum:=X
End Sub
一つ目は私の使っているのはExcel2007なので2007用にプログラムを変えました。
2003以前の並べ替えメゾットは私ではうまくいかなかった…。
二つ目は、理由は解りませんが使用したいユーザー設定リストがリスト欄の
一番下にあるとエラーが発生してしまいます。
結局これは解決できなかったので、ダミーのユーザー設定リストを一つ追加し
X番目のリストを指定することでとりあえず動かすことができました。 ※2
>ただし、ユーザー設定リストは
>> リスト項目の規則として1つのリスト全部で2000文字以内
>だそうです。確認できていないのですが・・・
Len関数で数えたところ600文字くらいでしたのでまだ余裕がありそうです。
目的の処理をすることはできましたが、2003以前のEXCELでは使用できないですし
ダミーユーザー設定リストを作るという余分なこともしてますが
とりあえず解決ということにさせてもらいます。
みなさん、ありがとうございました。
|
|