< návrat zpět
MS Excel
Téma: setřídění vzestupně-sestupně
Zaslal/a fortes 19.10.2018 18:56
dobrý den, dotaz na setřídění buněk. potřebuju setřídit buňky dle datumu v dané buňce "L3,L12,L21"a další. , ale s tím že na tento datum je vázaná oblast buněk"a1:m8,a10:m17,a19:a26" včetně obrázku. viz příklad v souboru, takhle to potřebuju setřídit cca 300 záznamů. děkuji za radu
Příloha: 41693_ukazka.zip (18kB, staženo 26x)
elninoslov(20.10.2018 10:22)#041696 Možno aj takto, ale pozor, používa sa rovnako veľká oblasť vpravo, kde sa premiestnia zoradené oblasti, a pôvodné stĺpce (už bez oblastí) sa celé zmažú. Vyskúšajte.
Sub ZoradSkupiny()
Dim Col As Collection, Riadkov As Long, Skupin As Long, i As Long, c, Datum As Date, Dat(), Z As Boolean, OldRng As String
Set Col = New Collection
With ThisWorkbook.ActiveSheet
Riadkov = .Cells(Rows.Count, 2).End(xlUp).Row + 2
Skupin = Riadkov \ 9
If Riadkov / 9 <> Skupin Then MsgBox "Oblasti niesú rovnomerné! Koniec.": Exit Sub
ReDim Dat(1 To Riadkov, 1 To 1)
Dat = .Cells(1, 12).Resize(Riadkov).Value
For i = 1 To Skupin
Datum = Dat((i - 1) * 9 + 3, 1)
Z = False
If Col.Count > 0 Then
For Each c In Col
If c(0) > Datum Then Col.Add Array(Datum, i), Before:=CStr(c(1)): Z = True: Exit For
Next c
If Z = False Then Col.Add Array(Datum, i), CStr(i)
Else
Col.Add Array(Datum, i), CStr(i)
End If
Next i
With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With
OldRng = Selection.Address
.Cells(1, 1).Resize(, 13).Copy
.Cells(1, 14).Resize(, 13).PasteSpecial Paste:=xlPasteColumnWidths
Riadkov = 0
For Each c In Col
.Cells((c(1) - 1) * 9 + 1, 1).Resize(9, 13).Cut
.Cells(Riadkov * 9 + 1, 14).Resize(9, 13).Insert Shift:=xlDown
Riadkov = Riadkov + 1
Next c
.Columns(1).Resize(, 13).EntireColumn.Delete
With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlCalculationAutomatic: End With
.Range(OldRng).Select
End With
Set Col = Nothing
End SubPříloha: 41696_zoradenie-oblasti.zip (25kB, staženo 25x) citovat
fortes(20.10.2018 10:58)#041697 super skvělé, mnohokrát děkuji. funguje přesně jak potřebuju.
citovat
elninoslov(20.10.2018 11:11)#041698 Keď na to ešte tak pozerám, pridajte na koniec tohto riadku:
If Z = False Then Col.Add Array(Datum, i)
ešte ", CStr(i)", teda:
If Z = False Then Col.Add Array(Datum, i), CStr(i)citovat
fortes(20.10.2018 11:49)#041699 OK, ještě se zeptám, pokud ty buňky nebudou začínat od řadku 1, ale od řádku 12 ? kde tohle můžu změnit nebo přidat ?
citovat
elninoslov(20.10.2018 17:31)#041700 Tu máte zmenenú verziu, nielen od 12. riadku, ale aj predpokladám potrebu uchovania tých 11 riadkov nad tým, a zároveň upravený proces zoradenia.
A čo tam chcete vyčarovať s tými ostatnými makrami ?
Příloha: 41700_zoradenie-oblasti.zip (30kB, staženo 24x) citovat
fortes(20.10.2018 17:57)#041701 děkuju super, jelikož ty data jsem měl dřív nějak zapsané, chtěl jsem je dát do nového formátu, takže ty makra co jsou v souboru je ve většině pokus-omyl. vždycky něco najdu a snažím se aplikovat a i pochopit fungování, někdy se zadaří jindy ne.
citovat