Hejsan! Hej igen! Jag hajar ingenting, det flyter ju bara ihop... =) Om du vill veta hur man sorterar så spela in ett Macro i Excel: Tools --> Macro --> Record new macro. Om du vill veta hur man sorterar så spela in ett Macro i Excel: Tools --> Macro --> Record new macro. Hejsan! Hejsan! Jag förstår att det kan verka oläsligt :) Hmm... ovanligt problem... Du är inne på rätt linje.. Okej, då borde det inte vara så svårt. Ja, det är nog inte så svårt. Rekursivt blir nog lättast.Sortering via macro i Excel
Jag har ett problem som verkar lite för klurigt för mig.
Ett excelblad ser ut som exemplet nedan (rader och kolumner är inte utskrivna)
Nr
1 1 2 3 4 4
2 1 2 3 4
3 1 2 3 4
4 1 2 4
5 1 1 2 2 4
6 1 2 3 4
7 1 2 4
Jag behöver tillverka ett macro som skriver ut alla varianter på Nr i denna tabell.
Ex. Nr 1 har två st fyror i tabellen, alltså var Nr 1 två möjliga varianter.
Nr 5 har två stycken ettor, och två st tvåor, alltså har Nr 5 fyra möjliga varianter.
Resultatet skall vara som nedan:
Nr
1 1 2 3 4
1 4
2 1 2 3 4
3 1 2 3 4
4 1 2 4
5 1 2 4
5 1 2 4
5 1 2 4
5 1 2 4
6 1 2 3 4
7 1 2 4
Hur fixar jag detta macro ?
Någon expert som kan hjälpa mig...
Mvh
\MatsSv: Sortering via macro i Excel
En förtydling krävs nog eftersom jag visade lite fel i resultattabellen :)
Så här skall det de ut:
Nr
1 1 2 3 4
1 1 2 4
2 1 2 3 4
3 1 2 3 4
4 1 2 4
5 1 2 4
5 1 2 4
5 1 2 4
5 1 2 4
6 1 2 3 4
7 1 2 4
\MatsSv: Sortering via macro i Excel
skriv allt inom < code > -taggen, så ser man vad du menar.Sv: Sortering via macro i Excel
Utför sedan sorteringen och kika sedan i VB koden vad som egentligen har hänt. Copy/Paste/Modify lite så har du dig ett fungerande script.
mvh,
Philip Sv: Sortering via macro i Excel
Utför sedan sorteringen och kika sedan i VB koden vad som egentligen har hänt. Copy/Paste/Modify lite så har du dig ett fungerande script.
mvh,
Philip Sv: Sortering via macro i Excel
Jag förstår att det är i det närmaste oläsligt :)
Det är inte en sortering jag är ute efter, utan närmare bestämt en bearbetning av matrisen.
Den första matrisen innehåller ett antal rader.
Ex på rad 1 är :
nr
1 | 1 | | 2 | | | 3 | 4 | 4 |
Denna rad kan splittas upp i två olika varianter
Ex:
nr
1 | 1 | | 2 | | | 3 | 4 | |
1 | 1 | | 2 | | | 3 | | 4 |
Detta p.g.a det finns två stycken fyror i matrisen, vilket innebär
att raden har två varianter som den kan presenteras som.
Någon som hänger med ?
Jag vill alltså med ett macro kunna splitta upp raderna till alla dess varianter.
Den första siffran i matrisen visar enbart radnummer, och skall ej bearbetas tillsamkans med övriga siffror.
Jag har ett excelblad som beskriver allt mycket bättre.
Mvh
\MatsSv: Sortering via macro i Excel
Jag förstår att det är i det närmaste oläsligt :)
Det är inte en sortering jag är ute efter, utan närmare bestämt en bearbetning av matrisen.
Den första matrisen innehåller ett antal rader.
Ex på rad 1 är :
nr
1 , 1 , , 2 , , , 3 , 4 , 4 ,
Denna rad kan splittas upp i två olika varianter
Ex:
nr
1 , 1 , , 2 , , , 3 , 4 , ,
1 , 1 , , 2 , , , 3 , , 4 ,
Detta p.g.a det finns två stycken fyror i matrisen, vilket innebär
att raden har två varianter som den kan presenteras som.
Någon som hänger med ?
Jag vill alltså med ett macro kunna splitta upp raderna till alla dess varianter.
Den första siffran i matrisen visar enbart radnummer, och skall ej bearbetas tillsamkans med övriga siffror.
Jag har ett excelblad som beskriver allt mycket bättre.
(I detta exempel så har jag avdelat cellerna med kommatecken)
Mvh
\MatsSv: Sortering via macro i Excel
Det är eg. inte en sortering jag är ute efter, utan en bearbetning av matrisen.
Den första matrisen innehåller rader med siffror.
Om det finns mer än en siffra av samma sort, så kan raden visas i flera varianter.
OBS! Den första siffran i raden är enbart radnummer, skall ej bearbetas/tolkas i matrisen.
Ex. Rad 1 ser ut så här :
nr
1 | 1 | | 2 | | | 3 | 4 | 4 |
Eftersom raden innehåller två stycken fyror, så kan raden presenteras på två sätt
Ex :
nr
1 | 1 | | 2 | | | 3 | 4 | |
1 | 1 | | 2 | | | 3 | | 4 |
Någon som hänger med ? :)
Jag vill alltså dela upp matrisens rader i alla dess varianter, och på en ny matris med dessa.
Jag har ett excelblad som visar/förklarar detta bättre...
Mvh
\MatsSv: Sortering via macro i Excel
Oooopss! Något måste blivit fel....
Jag fick felmeddelande när jag skickade, och var tvungen att skicka igen...
Sorry !!Sv: Sortering via macro i Excel
Kommer de alltid stå i ordning?
Kan det finnas fler än två av ett tal? I så fall; hur ska det hanteras?
Låt säga att det står:
|1|1|1|2|
Ska det delas upp så här
|1| | |2|
| |1| |2|
| | |1|2|
eller ska kombinationer som
|1| |1|2|
finnas med?
Är en kolumn alltid reserverad för ett visst tal, eller kan det stå
|1|2| |3|
|1|1|2|3|
dvs med 2 i B1, men 1 i B2Sv: Sortering via macro i Excel
Precis som du säger,
står det så här:
|1|1|1|2|
Ska det delas upp så här:
|1| | |2|
| |1| |2|
| | |1|2|
Kolumnerna är reserverade för ett visst tal.
D.v.s
Står det så här:
|1|1|1|2|2|3|
Ska det delas upp så här, eftersom det blir fler varianter:
|1| | |2| |3|
| |1| |2| |3|
| | |1|2| |3|
|1| | | |2|3|
| |1| | |2|3|
| | |1| |2|3|
Och står det så här:
|1| |1|2|2|3|
Ska det delas upp så här:
|1| | |2| |3|
| | |1|2| |3|
|1| | | |2|3|
| | |1| |2|3|
Hoppas att du förstår...Sv: Sortering via macro i Excel
Jag är inte helt säker på om en rekursiv eller iterativ variant blir bäst.
Det beror nog på om du har en fast max-längd eller inte.
Har en idé men jag är lite snurrig just nu av någon anledning, men jag återkommer om en stund.
Principen blir något i stil med:
Gå igenom alla block.
Om det finns >1 i ett block: Gör en kopia av raden per antalet samma, men se till att det är rätt uppdelat.
Gör om samma sak för nästa block.Sv: Sortering via macro i Excel
Vad ska göras?
En rad ska om nödvändigt splittas upp i flera rader.
Ok. Du behöver veta vilken rad det är, eller vilken range det är som är intressant.
För att göra det lite snabbare och lite lättare skickar vi bara in den delen av raden som vi inte kollat i:
Public Sub SplitRow (ActRange As Range)
Vad är det enklaste fallet?
Att rangen är tom eller inte innehåller något:
If ActRange Is Nothing Then Exit Sub
If Intersect(ActRange.Parent.UsedRange, ActRange) Is Nothing Then Exit Sub
Detta kan du modifiera om du har en maxlängd, men bara du förstår principen; vi ser till att ta oss mot ett enklare fall.
Vad gör vi nu?
Vi börjar från början av området och letar oss åt höger efter fler likadana. Om vi hittar en likadan delar vi upp området, och tillämpar SplitRow på båda delarna. Nu beror det lite på hur du har lagt upp det; det känns onödigt att börja skicka ut kod som du inte kan använda. Så: har det en maxlängd eller kan det fyllas på hur långt som helst till höger?
Och kan det komma annan text till höger?Sv: Sortering via macro i Excel
Du verkar ha helt klart för dig vad som skall göras :)
Raden har ingen specifik maxlängd, utan kan vara från 2 celler upp till max ca 20 celler.
Efter de cellerna i raden som skall 'delas upp' , så kommer det ytterligare två celler med information, men den informationen skall inte vara med i den nya matrisen.
Likadant är det med antal rader, det kan vara från 1 upp till ca 20 rader som skall 'delas upp' och skickas till den nya matrisen.
Varje rad börjar med ett ID-nummer (radnummer) , sedan följer den nummerföljd som skall delas upp.
Mvh
\Mats