Avatar billede teknik Juniormester
23. januar 2017 - 17:24 Der er 3 kommentarer og
1 løsning

Få ens navne i kolonner "linet op" ud for hinanden

Hej
Jeg har fire kolonner med varenavne.
Mange af varenavnene er ens i alle fire kolonner, men der findes også
unikke varenavne i hver kolonne.
Jeg ønsker at få "strakt" kolonnerne, så
- alt står alfabetisk,
- ens varenavne står i samme linje.
- unikke varenavne får en linje for sig.

Jeg så umiddelbart kun løsningen med at hånd-indsætte tomme celler i de rækker, hvor varenavnet ikke findes.

...Efter en times tid har jeg nået 500 linjer af 5000, og koncentrationen begynder at halte.
Jeg tænker derfor at: "det må da være et kendt problem"
- som måske har en simpel løsning

Mvh :-)
Teknik
Avatar billede jens48 Ekspert
23. januar 2017 - 18:35 #1
Jeg har en ide til hvordan det kan laves, men lige et par spørgsmål først.
1. I hvilket område står de 4 kolonner?
2. Er der et frit område hvor jeg kan smide resultatet?
3. Er der nogle af teksterne der går igen i flere linier, eller forekommer de maks 4 gange i samme linje?
4. Er der noget udenfor de 4 kolonner, som teksterne skall kobles sammen med?
Avatar billede teknik Juniormester
23. januar 2017 - 21:03 #2
1. De står i område A1-D4000
2. Resten af arket
3. Dubletter forekommer. Samme tekst kan forekomme 2-3-4 gange i en eller flere kolonner.
4. Nej, ingen kobling med andet.
Avatar billede jens48 Ekspert
23. januar 2017 - 23:51 #3
Tja, den blev ikke så hurtig, men den ser ud til at virke. Det tog 5 til 6 minutter at køre makroen igennem med 4000 linjer, så det kan vel kun bruges, hvis det er en en-gangsforeteelse. Makroen smider data over i kolonne F:I. Hvis en tekst kommer mere end 4 gange fortsætter den ud i kolonne J og udefter. Den oprindelige tekst bliver slettet under kørslen.

Sub sorter()
Dim c, d As Range
Dim x As Integer
x = 1
Range("A1:D4000").Select
For Each d In Selection
If d <> "" Then
n = Application.CountIf(Range("A1:D4000"), d) - 1
Range(Cells(x, 6), Cells(x, 6 + n)) = d
e = d
x = x + 1
End If
Range("A1:D4000").Select
For Each c In Selection
If c = e Then
c.ClearContents
End If
Next
Next
End Sub
Avatar billede teknik Juniormester
24. januar 2017 - 21:37 #4
Hej Jens48

Med lidt kritik for at makroen
1. Sammenblander kolonnerne
2. Opbryder den oprindelige alfabetiske sortering af data,


Så kan jeg med en workaround hvor man først
- processer alle fire kolonner
og derefter
- processer originalkolonnerne enkeltvis sammen med kolonne F fra "alle fire"
- re.-sortere dette resultat alfabetisk efter kolonne F,
- processer de samme to data-kolonner igen
- håndklipper den resulterende kolonne G
- gentager "og derefter processen" for de tre andre kolonner.
Få et resultat næsten som jeg havde tænkt mig.

Eneste "skønhedsfejl" er at lodrette dubletter vises vandret.
...og den "fejl" tror jeg faktisk jeg bliver glad for,
da dubletter nu er langt lettere at spotte.

Har kun kørt test m. 40 linjer i stedet for 4000, og der du'r det.

Går det som ventet, så reducerer  jeg 10-15 timers "idiotarbejde"
til 1-1½ times langt sjovere arbejde.

Præcis hvad jeg søgte efter.
mange tak for hjælpen !!!

mvh :-)
Teknik
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester