Excel VBA質問箱 IV

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

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


22734 / 76738 ←次へ | 前へ→

【59381】解決しました!(条件付きで)
お礼  おしりかじり虫 E-MAIL  - 08/12/9(火) 11:41 -

引用なし
パスワード
   ▼かみちゃん さん:
返事が遅くなり本当に申し訳ありません。
かみちゃん様に教えていただいたサイトは大変参考になりました。
同じようなことを考える方はやっぱりいるんですね。
が、いくつか問題が起こりそれを考えているうちに時間が経ってしまいました。
教えて頂いたものを参考に自分の目的に合うように作ったのが次のプロシージャ
です。(私では理解できないところがあったので自分のレベルに合わせた)

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では使用できないですし
ダミーユーザー設定リストを作るという余分なこともしてますが
とりあえず解決ということにさせてもらいます。
みなさん、ありがとうございました。
0 hits

【59095】得意先別の並べ替え おしりかじり虫 08/11/28(金) 11:27 質問
【59097】Re:得意先別の並べ替え Jaka 08/11/28(金) 12:57 発言
【59098】??? おしりかじり虫 08/11/28(金) 13:25 質問
【59099】Re:??? Jaka 08/11/28(金) 13:35 発言
【59101】それだとあまり良くないんです。 おしりかじり虫 08/11/28(金) 15:38 質問
【59102】Re:それだとあまり良くないんです。 Jaka 08/11/28(金) 15:51 発言
【59107】Re:それだとあまり良くないんです。 Hirofumi 08/11/28(金) 18:24 発言
【59112】それもあまりよくないんです。 おしりかじり虫 08/11/29(土) 8:41 質問
【59113】Re:得意先別の並べ替え かみちゃん 08/11/29(土) 9:44 発言
【59381】解決しました!(条件付きで) おしりかじり虫 08/12/9(火) 11:41 お礼

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