VBAで並び替えをしたい。 皆様ご教示下さいませ。 基本はT列の品名を昇順で並び替えたい。 ただしQ列に区分があり、売に紐付く仕入が1行以上あり、それをセットにしたい(管理番号で判断)
VBAで並び替えをしたい。 皆様ご教示下さいませ。 基本はT列の品名を昇順で並び替えたい。 ただしQ列に区分があり、売に紐付く仕入が1行以上あり、それをセットにしたい(管理番号で判断) 且つ、納期も昇順で並び替えたい。 乏しい説明のため、図をご参照下さい。 なお実際はセルに色は付いておりません。 データはA列~AC列まで。1行目が表題で最終行は都度変わります。 ややこしい質問ですが、何卒ご教示の程、宜しくお願い申し上げます。
Visual Basic | Excel・182閲覧・250
ベストアンサー
そのままでは希望の順になるソートが出来ないので、うまく並ぶように作業列を設定する方法です。 気になるのが「みかん缶詰 みかんの皮」 のように先頭に数字がないデータです。お示しの例では日付が6月8日なのは3つだけなので並びますが、同じ日付でこのような数字なしのデータはないのでしょうか? つまり、6月8日で ばなな、ばななの皮 という2件がある場合、うまくいかないので、もう少し工夫が必要になります。 そういうデータがある場合は返信して下さい。 Sub test() Dim rmax As Long Dim r As Long Dim tmp As String Dim i As Integer Dim no As String Application.ScreenUpdating = False rmax = Cells(Rows.Count, 14).End(xlUp).Row 'AD列にソートの為の作業列を作成 For r = 2 To rmax tmp = Range("T" & r).Value no = "" For i = 1 To Len(tmp) If IsNumeric(Mid(tmp, i, 1)) Then no = no & Mid(tmp, i, 1) End If Next i If no <> "" Then no = Format(no, "00000") Else no = "99999" End If If Range("Q" & r).Value = "売" Then tmp = "1" Else tmp = "2" End If Range("AD" & r).Value = no & Range("N" & r).Value & tmp Next r 'ソート Range("A2:AD" & rmax).Sort Key1:=Range("AD2"), order1:=xlAscending Range("AD1:AD" & rmax).Clear Application.ScreenUpdating = True End Sub
kky****様 朝早くにご回答有難うございます。 説明が下手で申し訳ございません。 品名を昇順で並び替えたいのは、あくまで売の行であり、みかん缶詰・みかんの皮は仕入行なので、売の行とセットしたいのです。 この説明も分かりにくいでしょうか?
質問者からのお礼コメント
kky********様 大成功でございます!! 色々品名等を打ち替えてTESTしましたが、希望通りの並びになりました。 本当に長い時間を掛け、丁寧な解説を頂き感謝の言葉もございません。有り難うございました。
お礼日時:5/25 11:25