Avatar billede larslyster Nybegynder
28. maj 2003 - 14:35 Der er 7 kommentarer

sortering via formel

Jeg har to kolonner, A og B, A indholder navne og B tal. Dem vil jeg så have sorteret til to nye kolonner, C og D. De skal sorteres så D1 er det højeste tal i hele kolonne B, hvor navnet for det felt står i C1.
Dette er muligt med Excel's sorter funktion, men da det skal ske automatisk, er den ubruglig.

Et eksempel på hvordan det gerne du ende med er således:
A      B    C      D
hans  3    svend  5
svend  5    lars    4
erik  2    hans    3
lone  3    lone    3
lars  4    erik    2

Lige nu gør den det her:
A      B    C      D
hans  3    svend  5
svend  5    lars    4
erik  2    hans    3
lone  3    hans    3
lars  4    erik    2

Problemet ligger i at få det rigtige navn vist.
Jeg bruger denne formel til at hente navnet: INDEKS(A1:D5;SAMMENLIGN(D1;B1:B5;0);1)

Hvordan kan det løses ?
Avatar billede s_h_m Nybegynder
28. maj 2003 - 19:31 #1
Det ser lidt svært ud med en formel, kan du ikke bruge en makro i stedet for?
Nedenstående skulle gøre tricket

Sub Sortering()
'
' Sortering Makro
' Makro indspillet 28-05-2003 af SHM

Application.CutCopyMode = False
Range("A1:B" & ActiveCell.SpecialCells(xlLastCell).Row).Select
Selection.Copy
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False

Range("C1:D" & ActiveCell.SpecialCells(xlLastCell).Row).Select
Selection.Sort Key1:=Range("D2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("C1").Select
End Sub

Det kræver selvfølgelig at du opretter en knap, der skal trykkes på før kopiering og sortering finder sted, hvis du kan leve med det.
Avatar billede s_h_m Nybegynder
29. maj 2003 - 13:15 #2
Jeg har prøvet at kigge lidt på det igen.
Hvis du kopiere nedenstående makro ind i modulet Worksheet_Change slipper du for at skulle haven en kommandoknap. Makroen kopierer kolonne A+B til C+D, hvorefter den sorterer på D.


Application.EnableEvents = False
Application.CutCopyMode = False
Range("A1:B" & ActiveCell.SpecialCells(xlLastCell).Row).Select
Selection.Copy
Range("C1").Select
ActiveSheet.Paste

Range("C1:D" & ActiveCell.SpecialCells(xlLastCell).Row).Select
Selection.Sort Key1:=Range("D2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("B1").Select
ActiveCell.Offset(1, 0).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
Application.EnableEvents = True

Det er stadig ikke via en formel som du efterlyser, men den gør jobbet :o)
Avatar billede larslyster Nybegynder
30. maj 2003 - 10:17 #3
Hvordan virker en makro i forhold til en formel ?
Skal man ikke selv starte den ?
Og den vigtige ting, hvor skal jeg kopier den makro der hen for den kan køres ?
Avatar billede s_h_m Nybegynder
30. maj 2003 - 14:21 #4
En makro er et lille program der udfører det man nu sætter den til, lidt lige som en formel, men nogle gange kan en formel ikke gøre det man gerne vil have gjort. Man kan også bruge en makro til at automatisere nogle arbejdsgange (f.eks. sortering).

Nogle gange skal man selv starte makroen, det kan bl.a. gøres vha. en knap, man trykker på, eller som i det her tilfælde, sætter man makroen ind, så den selv kører i det øjeblik, der ændres i arket.

Jeg vil lige gøre opmærksom på, at jeg ikke er en stor makro-haj, og jeg har fundet ud af, at uanset hvor i arket man befinder sig, hvis man laver en ændring springer den til første tomme celle i kolonne B, det skal du lige være opmærksom på!
Det må være muligt at få den til at gøre det hvis der kun ændres i kolonne A eller B, men det har jeg ikke fundet ud af endnu :-)
Til gengæld tager den automatisk de rækker du evt. måtte tilføje senere, idet den gennemsøger til sidste celle i kolonnen.

Når du skal have sat makroen ind højreklikker du på fanebladet (fx. ark1) og trykker på 'Vis programkode'.
Øverst i det højre vindue er der to rullegardiner, det venstre skal stå på 'Worksheet' og i det højre vælger du 'Change'.
Så er det bare at copy/paste makroen ovenfor ind mellem

'Private Sub Worksheet_Change(ByVal Target As Excel.Range)'

og

'End Sub'

Det du nu be'r den om, er at køre den makro, hver gang der sker en ændring i lige præcis dette ark (ark1). De andre ark vil ikke blive påvirket af makroen.

Håber forklaringen er god nok, eller må du sige til.
Avatar billede s_h_m Nybegynder
01. juni 2003 - 10:30 #5
Jeg har siddet og leget lidt med makroen, og kan nu tilbyde dig hele 3 ting :-)

1. Makroen kører automatisk ved ændring i arket, men nok ikke den optimale løsning.
2. Makroen kører, når der trykkes på en kommandoknap, en udmærket løsning, der har det lille minus, hvis der er mange data, bliver man nødt til at scrolle op til knappen igen. Man kan dog placere knappen øverst i arket, og derefter fryse rækken så den altid vises. Dette er en metode jeg selv bruger en del (indtil nu).
3. Makroen kører når man trykker på en bestemt tast f.eks. ½ tegnet. Det her er en metode, jeg tror, jeg vil benytte noget mere i fremtiden.

Hvis du er lidt usikker på at få placeret makroen rigtig, så kan jeg sende dig et testark hvor alle 3 løsninger er repræsenteret, så du kan se hvordan de virker.
Smid din e-mail adresse eller skriv til soeren109@hotmail.com
Avatar billede keil Nybegynder
02. juni 2003 - 15:19 #6
Hej LarsLyster

Du skriver, at du kan lave det med "hånden" i Excel, så kan du også altid lave det med en makro.

Gå i Funktioner/Makro/indspil makro
Giv den her et navn
og et "Shortcut" Ctrl+a
Derefter laver du det hele med Hånden og slutter af med at standse indspilningen.

Uanset hvor du står i regnearket, så kan du køre makroen ved at trykke Ctrl+a.

Pas på når du laver makroen. Brug helst go to (F5) når du skal gå til et felt istedet for at benytte musen.
Du bør også sørge for at der er en blank kolonne til venstre og til højre for din "liste", så har Ecxel lidt lettere ved at finde ud af hvad du vil. Det vil sige at jeg vil anbefale dig at have den oprindelige liste fra B2..C2 og lade den gå ned til B(x)..C(x). Lav så den sorterede liste i E2..F2 og nedefter.

Så kan du indspille makroen ved at sige
F5
B2
OK
F5
"speciel"
"Aktuelt område"
OK
Ctrl+c
F5
E2
OK
Ctrl+v
Data
Sortering
OK

stop indspilningen.
Avatar billede larslyster Nybegynder
03. juli 2003 - 12:33 #7
op
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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



Seneste spørgsmål Seneste aktivitet
I dag 14:04 Pixeline cd’er til PC Af Mathilde i Windows
I dag 01:14 Windows 10 - IIS 10 Af bsn i Windows
I går 20:39 Boot fra USB Af poulmadsen i Windows
I går 11:43 Gmail-ikon på skrivebordet Win 10 Af ErikHg i Fri debat
I går 09:22 Lopslag Af Luffe i Excel