Avatar billede xane Nybegynder
12. februar 2008 - 20:20 Der er 15 kommentarer og
1 løsning

samle data uden huller i én kolonne

Hey...

Jeg har en række beregnet data i en kolonne, hvor det variere om der står noget i den enkelte række efter nogle bruger inddaterede parametre - håber det er forståeligt, ellers bare sig til!

Mit problem er så, at jeg gerne vil have data'erne fra kolonne A over i kolonne B uden de mellemrum der kan være i data'erne?
Og i kolonne C skal data'erne være sorteret efter største tal øverst.

Der skal nok laves kode til dette, da tingene kan variere fra gang til gang.

Håber I kan hjælpe....
Avatar billede bak Forsker
12. februar 2008 - 21:50 #1
Prøv at køre denne makro når du står på arket

Option Explicit
Option Base 1

Sub test3()
Dim resultat()
Dim rng As Range
Dim rngC As Range
Dim x As Long

Set rng = Range("A1:A" & Range("A65536").End(xlUp).Row)
ReDim resultat(rng.Cells.Count, 1)
For Each rngC In rng
    If Not IsEmpty(rngC) Then
        x = x + 1
        resultat(x, 1) = rngC
    End If
Next
Range("B1").Resize(x, 1) = resultat
Range("C1").Resize(x, 1) = resultat
Range("C1").Resize(x, 1).Sort Key1:=Range("C1"), Order1:=xlDescending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub
Avatar billede xane Nybegynder
13. februar 2008 - 08:28 #2
Så er jeg igang med projektet igen.

Skal den kode du har skrevet lægges i et modul eller under selve den side hvor det skal ske? f.eks. under SelectionChange?
Avatar billede xane Nybegynder
13. februar 2008 - 08:29 #3
Hvad betyder Option Explicit og Option Base 1? Hvad gør de to linjer?
Avatar billede xane Nybegynder
13. februar 2008 - 08:57 #4
Jeg har leget lidt med det og sat det ind sådan her:

Private Sub CommandButton2_Click()
    Calculate
   
    Dim resultat()
    Dim rng As Range
    Dim rngC As Range
    Dim x As Long
   
    Set rng = Range("I2:I" & Range("I65536").End(xlUp).Row)
    ReDim resultat(rng.Cells.Count, 1)
    For Each rngC In rng
        If Not IsEmpty(rngC) Then
            x = x + 1
            resultat(x, 1) = rngC
        End If
    Next
    Range("J2").Resize(x, 1) = resultat
    Range("K2").Resize(x, 1) = resultat
    Range("K2").Resize(x, 1).Sort Key1:=Range("K2"), Order1:=xlDescending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
End Sub

Ved ikke helt om det kan stå sammen med "Calculate"?

Når jeg trykker på knappen, så får den ikke fjernet de tomme rækker i J-kolonnen? Men den får fint sorteret dem alle i kolonne K.
Avatar billede bak Forsker
13. februar 2008 - 10:54 #5
Hvis ikke de tomme fjernes i kolonne J er det nogen der ikke helt stemmer.
Er cellerne helt tomme ? eller står der 0 i dem eller et mellemrum ?

Prøv lige at skrive =LÆNGDE(Ix) hvor x er en af de tomme celler.
Avatar billede bak Forsker
13. februar 2008 - 10:59 #6
ps. du bør have linien
Option Base 1

med, placeret øverst i kodemodulet
Avatar billede xane Nybegynder
13. februar 2008 - 11:35 #7
i kolonne J kører der en hvis sætning, som ser sådan her ud:

=HVIS(H2="";"";MIN(PPD(H2);100))

Når jeg f.eks. skriver =LÆNGDE(I2) skriver den "0". Og når jeg skriver det for en række hvor der står et tal i skriver den "16".

Har placeret "Option Base 1" sådan her istedet:

Private Sub CommandButton2_Click()
    Option Base 1
    Calculate
 
    Dim resultat()
    Dim rng As Range
...
End Sub

Håber det er okay?
Avatar billede xane Nybegynder
13. februar 2008 - 11:37 #8
Den giver mig en fejl, når Option Base 1 er placeret inde i "knappen"?
Avatar billede bak Forsker
13. februar 2008 - 12:01 #9
du skal lige ændre noget i koden

If Not IsEmpty(rngC) Then

ændres til

If Not rngC.Value = "" Then

og Option Base 1 skal placeres uden for koden
Avatar billede xane Nybegynder
13. februar 2008 - 13:30 #10
mange tak for det bak....det var lige hvad jeg manglede :-)

Så mangler jeg bare lige et par små ting.
- Vil gerne at den får slettet hele kolonnen, da antallet af værdier kan være forskellige. Så der ikke forekommer gamle værdier fra en tidligere beregning?
- Også er der et eller andet galt med den sidste i rækken, den bliver ikke sorteret rigtigt i kolonne K. Dvs. den sidste værdi er større end de forrige?

Håber det kan lade sig gøre....
Avatar billede bak Forsker
13. februar 2008 - 15:27 #11
Private Sub CommandButton2_Click()
Dim resultat()
Dim rng As Range
Dim rngC As Range
Dim x As Long

Set rng = Range("I2:I" & Range("I65536").End(xlUp).Row)
Range("J2:K65536").ClearContents
ReDim resultat(1 To rng.Cells.Count, 1 To 2)
For Each rngC In rng
    If Not rngC.Value = "" Then
        x = x + 1
        resultat(x, 1) = rngC
    End If
Next
Range("J2").Resize(x, 1) = resultat
Range("K2").Resize(x, 1) = resultat
Range("K:K").Sort Key1:=Range("K1"), Order1:=xlDescending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub
Avatar billede xane Nybegynder
13. februar 2008 - 15:59 #12
Takker....det hjalp på at få slettet data'erne :)

Har stadig problemer med at den ikke sortere den sidste række korrekt :-(

Men hvis det ikke kan løses, så kan det ikke løses.

Smid et svar så får du pointene....du har været til en stor hjælp bak
Avatar billede bak Forsker
13. februar 2008 - 16:15 #13
jeg tror helt sikkert at den sorterer korrekt.
Prøv lige at undersøge den sidste celle og se om der ikke skulle være et mellemrum foran værdi. Mellemrum kommer nemlig før A i sortering
Avatar billede bak Forsker
13. februar 2008 - 16:16 #14
og så lige et svar :-)
Avatar billede xane Nybegynder
13. februar 2008 - 16:48 #15
Jeg har lige tjekket igen....og den gør ingen ting ved den sidste række.

Og jeg kan slet ikke se at der skulle være noget galt med tallet. Det giver samme resultat hvis beregningerne bliver lavet om til andre tal, så er det stadig den nederste den ikke sortere korrekt.

Har du prøvet at sætte din kode ind i et excel ark?
Avatar billede bak Forsker
13. februar 2008 - 18:52 #16
yes, og den sorterer ok.
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