[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『並べ替え』(bks18)
VBAについては初心です
ネットで調べながらの構文です
並べ替えについてです
上手く掲示されないので:で区切ってあります
A:::::::::B::::::::::::::::C:::::::::D:::::::E:::::::::::F
区分::::::形状:::::::::::::長さ:::::数量:::::Kg単価::::製品単価
[−1.2:::15×150×30:::::2000:::::2::::::155::::::::577
[−1.2:::15×150×100:::2000:::::2::::::155:::::::::784
L−1.2:::130×30:::::::::2000:::::2::::::150:::::::::458
L−1.2:::130×100::::::::2000:::::2::::::150::::::::658
PL−1.6::200::::::::::::::2000:::::2::::::120::::::::610
Z−2.3:::50×75×50::::::2000:::::2::::::155::::::::987
[−1.2:::15×150×100:::2000:::::2::::::155:::::::::784
上記の内容
を下記の構文で並べ替えています
まず書き出して
myKey = myDic.keys myItem = myDic.items For i = 0 To UBound(myKey) myVal3 = Split(myKey(i), "_") Cells(i + 2, 8).Value = myVal3(0) Cells(i + 2, 9).Value = myVal3(1) Cells(i + 2, 10).Value = myVal3(2) Cells(i + 2, 12).Value = myVal3(3) Cells(i + 2, 13).Value = myVal3(4) Cells(i + 2, 11).Value = myItem(i)
Next Set myDic = Nothing
並べ替えしてます
Range("H1", Range("M" & Rows.Count).End(xlUp)).Sort _
Key1:=Range("H2"), Order1:=xlAscending, _ Key2:=Range("I2"), Order2:=xlAscending, _ Key3:=Range("J2"), Order3:=xlAscending, _ Header:=xlGuess
Cells(Rows.Count, 11).End(xlUp).ClearContents
すると下記のようになります
H:::::::::I::::::::::::::::J:::::::::K:::::::M
区分::::::形状:::::::::::::長さ:::::数量::::製品単価
[−1.2:::15×150×100:::2000:::::4:::::::::784
[−1.2:::15×150×30:::::2000:::::2::::::::577
Lー1.2:::130×100::::::::2000:::::2::::::::658
L−1.2:::130×30:::::::::2000:::::2:::::::::458
PL−1.6::200::::::::::::::2000:::::2::::::::610
Z−2.3:::50×75×50::::::2000:::::2::::::::987
実際は下記のように並べ替えしたいです
PL−1.6::200::::::::::::::2000:::::2::::::::610
L−1.2:::130×30:::::::::2000:::::2:::::::::458
Lー1.2:::130×100::::::::2000:::::2::::::::658
[−1.2:::15×150×30:::::2000:::::2::::::::577
[−1.2:::15×150×100:::2000:::::4:::::::::784
Z−2.3:::50×75×50::::::2000:::::2::::::::987
優先順位としては
1、区分でPL、L、[、Zの順
2、形状で文字数の少ない順且つ先頭の数値の小さい順
です
※元の明細には形状はランダムに記入されています
お手数ですが
宜しくお願い致します
< 使用 Excel:Excel2016、使用 OS:Windows10 >
これら↓を別列にコピーして、×で振り分けて(区切り位置) 振り分けられたセルをソートキーに活用しては?
200 130×30 130×100 15×150×30 15×150×100 50×75×50 (BJ) 2020/05/14(木) 13:55
Dim dt(5000) As Long, c As Range, s As String, i As Long, d As Variant For Each c In Range("A2:A" & Rows.Count).SpecialCells(2) s = Left(Trim(c.Value), 1) dt(Switch(s = "P", 1000, s = "L", 2000, s = "[", 3000, s = "Z", 4000) + Len(c.Offset(, 1).Value) * 10 + Val(Left(c.Offset(, 1).Value, 1))) = c.Row Next c Range("H1:M1").Value = Range("A1:F1").Value For Each d In dt If d > 0 Then Range("H" & i + 2 & ":M" & i + 2).Value = Range("A" & d & ":F" & d).Value i = i + 1 End If Next d End Sub (mm) 2020/05/14(木) 14:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.