Avatar billede nemlig Professor
08. september 2009 - 13:53 Der er 12 kommentarer og
1 løsning

VBA til at læse 2 kolonner og aflevere indholdet i sorteret rækkefølge

Hejsa.
Jeg har 2 kolonner (A og B), hvor navne er listet ned i kolonne A og nogle tilhørende salgstal i kolonne B.
Kan jeg få hjælp til VBA-kode, hvor jeg læser A3:B40 og afleverer indholdet i ARK2 A3:B40 - sorteret efter tallene i kolonne B med højeste tal øverst.
Avatar billede jkrons Professor
08. september 2009 - 14:46 #1
Du behøver ikke VBA, hvis du kabn leve med at bruge en hjælpekolonne i Ark2.

i fx D kolonnen i Ark2 skriver 1, 2, 3 osv. ned til 37.

I A-kolonnen indsætter du så denne formel

=INDEKS(Ark1!$A$3:$A$40;RÆKKE(INDIREKTE(ADRESSE(SAMMENLIGN(STØRSTE(Ark2!$B$3:$B$40;D1);Ark1!$B$3:$B$40;0);1)));1)

og i B-kolonnen

=INDEKS(Ark1!$B$3:$B$40;RÆKKE(INDIREKTE(ADRESSE(SAMMENLIGN(STØRSTE(Ark1!$B$3:$B$40;D1);Ark1!$B$1:$B$40;0);1)));1)

Kopier de to formler så langt ned, som du har brug for.
Avatar billede nemlig Professor
08. september 2009 - 15:05 #2
Ok - men jeg kan ikke få det til at virke helt.
Jeg har på ark2 i celle d1 skrevet 1, d2=2, d3=3 osv.
Og så har jeg kopieret dine forslag ind i hhv. ark2!a1 og ark2!b1

Er det et problem, hvis den liste på ark1, der skal sorteres, har tomme felter? (for det kan der godt være).
Avatar billede excelent Ekspert
08. september 2009 - 20:04 #3
hent navn
=INDEKS(Ark1!$A$3:$A$40;SAMMENLIGN(STØRSTE(Ark1!$B$3:$B$40;RÆKKE(1:1));Ark1!$B$3:$B$40;0))

hent tal
=STØRSTE(Ark1!$B$3:$B$40;RÆKKE(1:1))
Avatar billede nemlig Professor
08. september 2009 - 21:20 #4
Den driller lidt stadigvæk.
Håber at I gider at kigge på den.
Jeg har smidt den på http://www.fam-johansen.dk/sortering.xls
Avatar billede excelent Ekspert
08. september 2009 - 21:44 #5
Ja formler sidestiller evt ens værdier, så i dette tilfælde ville jeg anvende en makro som denne
Den kopierer og sorterer B kolonne faldende (xlDescending)
og A kolonne stigende (xlAscending) ret efter ønske


Sub xCopy()
Sheets("Ark1").Range("A3:B40").Copy Sheets("Ark2").Range("A3")
Sheets("Ark2").Select
Range("A3:B40").Sort Key1:=Range("B3"), Order1:=xlDescending, _
Key2:=Range("A3"), Order2:=xlAscending
End Sub
Avatar billede nemlig Professor
08. september 2009 - 21:50 #6
Super - det var lige løsningen, jeg søgte.
Tusind tak.
Send venligst et svar.
Avatar billede nemlig Professor
08. september 2009 - 22:43 #7
Hov - den smider de tomme linjer øverst. Dem vil jeg gerne have helt væk.
Kan du også bidrage med, hvordan tomme linjer i samme område slettes
Avatar billede nemlig Professor
08. september 2009 - 22:49 #8
Jeg fandt denne kode, som fjerner de tomme linjer fint.

With Range("A3:A40")
    rCount = .Rows.Count
    For r = rCount To 1 Step -1
        If .Cells(r, "B") = "" Then
            .Rows(r).EntireRow.Delete
        End If
    Next r
End With
Avatar billede jkrons Professor
08. september 2009 - 23:07 #9
Du kan også få en løsning uden makro, men den kræver en hjælpekolonne i fx C i ark 1:

Her kan du indsætte:

=HVIS(B3="";"";B3-RÆKKE()/10^10) i C# og kopiere nedad.

I Ark2 har du så:

=HVIS(RÆKKE()-2>TÆL(Ark1!$C:$C);"";INDEKS(Ark1!A:A;SAMMENLIGN(STØRSTE(Ark1!$C:$C;RÆKKE()-2);Ark1!$C:$C;0))) i A3 og kopierer nedad.

I B3:

=HVIS(RÆKKE()-2>TÆL(Ark1!$C:$C);"";INDEKS(Ark1!B:B;SAMMENLIGN(STØRSTE(Ark1!$C:$C;RÆKKE()-2);Ark1!$C:$C;0)))

og kopier nedad.
Avatar billede jkrons Professor
08. september 2009 - 23:11 #10
Avatar billede nemlig Professor
09. september 2009 - 08:32 #11
jkrons: Tak for bidraget - det fungerer perfekt.
Nu har jeg 2 gode løsninger, hvorfor jeg fordeler pointene mellem jer.
Sender I lige et svar.
Avatar billede jkrons Professor
09. september 2009 - 10:10 #12
Et svar
Avatar billede excelent Ekspert
09. september 2009 - 15:58 #13
det er ok jeg står over :-)
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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