Option Explicit
Option Base 1
Sub drugaya_sortirovka_3()
Dim i As Long, j As Long, vim As Long
Dim znk As String
Dim raz1, raz2, razmer(), tmp1, tmp2, tmp3
Application.ScreenUpdating = False
Application.Calculation = xlManual
If Selection.Rows.Count < 2 Then Exit Sub
If Selection.Columns.Count <> 2 Then Exit Sub
razmer = Selection.Value 'Nado vybrat' dve kolonki: nazvaniye i razmer
vim = UBound(razmer, 1)
ReDim Preserve razmer(vim, 3) 'Dopolnitel'naya kolonka dlya indeksa sortirovki
For i = 1 To vim
raz1 = Trim(Split(razmer(i, 2), "-", -1, 1)(0))
raz1 = Switch(raz1 = "XXXS", "A", raz1 = "XXS", "B", raz1 = "XS", "C", raz1 = "S", "D", raz1 = "M", "E", _
raz1 = "MX", "F", raz1 = "L", "G", raz1 = "XLS", "H", raz1 = "XL", "I", raz1 = "XXL", "J", _
raz1 = "XXXL", "K", raz1 = "XXXXL", "L")
raz2 = Trim(Split(razmer(i, 2), "-", -1, 1)(1))
For j = 1 To Len(raz2)
znk = Mid(raz2, j, 1)
Mid(raz2, j, 1) = Switch(znk = "0", "a", znk = "1", "b", znk = "2", "c", znk = "3", "d", znk = "4", "e", _
znk = "5", "f", znk = "6", "g", znk = "7", "h", znk = "8", "i", znk = "9", "j")
Next
razmer(i, 3) = raz1 & raz2
Next
raz1 = Empty: raz2 = Empty
'Sortirovka
For i = 1 To vim - 1
For j = i + 1 To vim
If razmer(i, 1) & ";" & razmer(i, 3) > razmer(j, 1) & ";" & razmer(j, 3) Then
tmp1 = razmer(j, 1)
tmp2 = razmer(j, 2)
tmp3 = razmer(j, 3)
razmer(j, 1) = razmer(i, 1)
razmer(j, 2) = razmer(i, 2)
razmer(j, 3) = razmer(i, 3)
razmer(i, 1) = tmp1
razmer(i, 2) = tmp2
razmer(i, 3) = tmp3
End If
Next
Next
tmp1 = Empty: tmp2 = Empty: tmp3 = Empty
'Vstavka dannykh na liste
Selection.Cells(1).Select
Selection.Resize(vim, 2).Value = razmer 'Vstavka dannykh bez poslednego stolbtsa
Erase razmer
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
|