Forum » Programiranje » Excel VBA sortiranje vrstic
Excel VBA sortiranje vrstic
korenje3 ::
A kdo ve kako bi lahko sortiral vrstice v tabeli, če imam array s ciljno in začetno vrstico?
Npr. array: Sort(1) = 5 (kar pomeni da mora biti trenutna vrstica 5 v 1 vrsti.)
Pa ustvarjanje pomožnih kolon odpade, tako da mora biti sortiranje opravljeno znotraj vba s pomožnimi arrayji, rekurzivno ipd...
Testni podatki:
dim DataBody as Range (databody ima 10 vrstic)
ReDim Sorted(1 To 10)
Sorted(1) = 5
Sorted(2) = 4
Sorted(3) = 7
Sorted(4) = 6
Sorted(5) = 1
Sorted(6) = 2
Sorted(7) = 10
Sorted(8) = 8
Sorted(9) = 3
Sorted(10) = 9
Npr. array: Sort(1) = 5 (kar pomeni da mora biti trenutna vrstica 5 v 1 vrsti.)
Pa ustvarjanje pomožnih kolon odpade, tako da mora biti sortiranje opravljeno znotraj vba s pomožnimi arrayji, rekurzivno ipd...
Testni podatki:
dim DataBody as Range (databody ima 10 vrstic)
ReDim Sorted(1 To 10)
Sorted(1) = 5
Sorted(2) = 4
Sorted(3) = 7
Sorted(4) = 6
Sorted(5) = 1
Sorted(6) = 2
Sorted(7) = 10
Sorted(8) = 8
Sorted(9) = 3
Sorted(10) = 9
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
- spremenil: korenje3 ()
ejresnevem ::
ce potrebujes samo namig:
https://docs.microsoft.com/en-us/office...
ce pa isces celotno resitev, pa ne vem...
ne bi smel biti poseben napor, ali?
https://docs.microsoft.com/en-us/office...
ce pa isces celotno resitev, pa ne vem...
ne bi smel biti poseben napor, ali?
korenje3 ::
Problem je ker se zaporedje sproti spreminja.
Bom probal s collection, ki ima zapise začetnega stanja.
Bom probal s collection, ki ima zapise začetnega stanja.
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
ejresnevem ::
nic hudega, ce se collections spreminja (domnevam, da govoris o Sorted array), zadevo loci na procesirne enote, in jo klices tudi N-krat za O-spremembambi tudi znotraj ene sekunde, ce je potrebno; pac loci funkcije (imena abstrahirana) na GetData(), SortData(), GetSortedArray() in, najbolj pomembna, SetData(data(), sortedArray()) v smislu SetData(SortData(GetData()), GetSortedArray()); vsako od teh funkcij pripravi kot je potrebno... v taksne stvari se redko spusca, ker mora poznati tvoj kontekst, analiziranje problema na javnem forumu je pa tudi zgodba zase. torej, dobis lahko samo neko abstraktno resitev/napotek, za katero pa se mi ne zdi, da JE ravno neka jedrska it fizika, ali?
PS: torej, dvojna negacija, nisem prebral vsega niti svojega :)
PS: torej, dvojna negacija, nisem prebral vsega niti svojega :)
Zgodovina sprememb…
- spremenilo: ejresnevem ()
korenje3 ::
Sem tako naredil:
v array 1. poz: začetna vrstica, 2. poz: ciljna vrstica
Collection sem uporabil kot pomožno zadevo (kot virtualna excel kolona).
v array 1. poz: začetna vrstica, 2. poz: ciljna vrstica
Collection sem uporabil kot pomožno zadevo (kot virtualna excel kolona).
Sorted.Add Array(1, 10) Sorted.Add Array(2, 2) Sorted.Add Array(3, 4) Sorted.Add Array(4, 3) Sorted.Add Array(5, 5) Sorted.Add Array(6, 6) Sorted.Add Array(7, 1) Sorted.Add Array(8, 7) Sorted.Add Array(9, 8) Sorted.Add Array(10, 9) For i = 1 To Sorted.Count TableData.Rows(i).Columns(2).Value2 = i Next Call RecurSort(TableData, Sorted) Private Sub RecurSort(ByRef TableData As Range, ByVal Sorted As collection) Dim temp1 As Variant For i = 1 To Sorted.Count For j = 1 To Sorted.Count If i = Sorted(j)(0) Then temp1 = Sorted(j) If temp1(1) = Sorted.Count Then Sorted.Add item:=temp1 If j <> temp1(1) Then TableData.Rows(j).Cut TableData.Rows(temp1(1) + 1).Insert shift:=xlDown End If Else Sorted.Add item:=temp1, before:=temp1(1) If j <> temp1(1) Then TableData.Rows(j).Cut TableData.Rows(temp1(1)).Insert shift:=xlDown End If End If Sorted.Remove j + IIf(temp1(1) < j, 1, 0) Exit For End If Next Next End Sub
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Zgodovina sprememb…
- spremenil: korenje3 ()
ejresnevem ::
osebno bi tole drugace strukturiral (kot napisano 16:20), ce pa dobis ustrezne rezultate, pa se ne daj motiti...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | vba arrayOddelek: Programiranje | 917 (610) | Vazelin |
» | [C#] sortiranje priimkov po slovenski abecediOddelek: Programiranje | 1565 (1376) | mihies |
» | [Java] Podatkovni tipOddelek: Programiranje | 3772 (3424) | piki12 |
» | [VB express edition] problemOddelek: Programiranje | 1365 (1268) | frudi |
» | sortirni algoritem v CjuOddelek: Programiranje | 1424 (1276) | GaPe |