Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketFlytte og slette celler

 Besvar Besvar
Forfatter
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Emne: Flytte og slette celler
    Sendt: 22.Jun.2011 kl. 10:42
Hej alle,
 
Dette er min første post i dette forum, og jeg er spændt på, om I kan hjælpe mig med min udfordring. Det skal nævnes, at jeg ikke har ret meget forstand på programmering eller advancerede funktioner i Excel, så pædagogiske svar er kærkomne Smile
 
Jeg skal bruge hælp til følgende:
 
Jeg har en lodret talrække (et tal i hver celle). Det der skal ske er, at når antallet af unikke tal i kolonnen overstiger x, så skal der slettes tal fra oven, indtil antallet af unikke tal i kolonnen igen er = x. Samtidigt skal hele talrækken flyttes opad således, at talrækkens øverste tal altid står i samme celle. Giver det overhovedet mening?
 
Indtil videre er det lykkedes mig at lave en funktion, der tæller antallet af unikke tal i kolonnen, men kan nu ikke komme videre.
 
På forhånd mange tak for hjælpen.
 
Mvh.
Thomas
Til top



Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 13:10
Hej Thomas,
 
En formel kan tælle dubletterne, men ikke fjerne en celle, så derfor er vi nødt til at bruge VBA.
 
Kender du til VBA hvordan man sætter det ind i arket?
 
Denne kode (Ryd_Dubletter) kigger i et område og tester for dubletter.
Hvis den finder en dublet, slettes den øverste celle.
Ovenstående gentages indtil der ikke er flere dubletter.
 
Du skal naturligvis ændre 'Overste' og 'Omraade' i koden så de passer i dit ark.
 
Jeg bygger den gerne ind i dit ark hvis du får brug for hjælp.
 
//Allan
 
Sub Ryd_Dubletter()
Oeverste = "A1"
Omraade = "A1:A10"
For c = 1 To Range(Omraade).Cells.Count
    If Tael_Unikke(Range(Omraade)) <> Application.WorksheetFunction.CountA(Range(Omraade)) Then
        Range(Oeverste).Delete xlUp
    End If
Next c
End Sub
Function Tael_Unikke(ByVal Omraade As Range) As Long
Set Omraade = Intersect(Omraade, Omraade.Parent.UsedRange)
vaerdi = "'" & Omraade.Parent.Name & "'!" & Omraade.Address(False, False)
Tael_Unikke = Evaluate("SUM(IF(LEN(" & vaerdi & "),1/COUNTIF(" & vaerdi & "," & vaerdi & ")))")
End Function
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 13:32
Hej igen,
 
Jeg tror jeg har misforstået dig, jeg prøver lige noget andet.
 
//Allan
Til top
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 13:33
Hej Allan,
 
Mange tak for hurtigt svar!
 
Det lykkedes mig at få koden sat ind i VBA, men det er nu gået op for mig, at jeg ikke har været tydlig nok i min formulering. 
 
Der må nemlig gerne være dubletter, men der må ikke være mere end x antal unikke tal i det definerede område.
 
Så hvis vi siger, at x = 5, og jeg kører makroen på denne talrække:
 
1
2
3
4
5
6
7
7
8
8
 
Så skal resultatet blive dette:
 
4
5
6
7
7
8
8
 
Giver det mening?
 
På forhånd tak.
 
Mvh.
Thomas
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 13:37
Du får lige denne i stedet.
 
Hvis antallet af unikke i området overstiger et maks, så slettes fra toppen indtil vi er under maks igen.
MaxUnikke = Det maksimum antal unikke du accepterer.
 
 
Sub Max_Unikke()
MaxUnikke = 5
Oeverste = "A1"
Omraade = "A1:A10"
For c = 1 To Range(Omraade).Cells.Count
    If Tael_Unikke(Range(Omraade)) > MaxUnikke Then
        Range(Oeverste).Delete xlUp
    End If
Next c
End Sub
Function Tael_Unikke(ByVal Omraade As Range) As Long
Set Omraade = Intersect(Omraade, Omraade.Parent.UsedRange)
vaerdi = "'" & Omraade.Parent.Name & "'!" & Omraade.Address(False, False)
Tael_Unikke = Evaluate("SUM(IF(LEN(" & vaerdi & "),1/COUNTIF(" & vaerdi & "," & vaerdi & ")))")
End Function
Til top
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 13:49
Hej Allan,
 
Fantastisk! lige hvad jeg havde brug for. Tak!
 
Håber det er OK, at jeg i de kommende dage kommer med lignende opgaver??? Det er en STOR hjælp for mig.
 
Mvh.
Thomas
Til top
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 14:47
Hej igen,
 
Nu er jeg stødt på en udfordring mere i samme forbindelse, som jeg er meget usikker på, om overhovedet kan løses:
 
Når der skal tilføjes et nyt tal forneden i den tidligere omtalte lodrette talrække, skal tallet automatisk tilføjes, når man klikker på en celle et andet sted i arket. Cellen man klikker på indeholder således det tal, der skal føjes til den første tomme celle under talrækken. Ideen er, at man kan klikke et forud defineret tal ind i talrækken uden at skulle skrive tallet manuelt.
 
Kan det lade sig gøre?
 
På forhånd tak.
 
Mvh.
Thomas
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 16:06
Hej Thomas,
 
Citat: Balto Balto skrev:

Håber det er OK, at jeg i de kommende dage kommer med lignende opgaver??? Det er en STOR hjælp for mig.
Du skal bare spørge løs, det er det vi er her for. Smile
 
Står dit tal i en bestemt celle eller kan det være hvor som helst?
Er det OK med dobbeltklik på tallet som skal tilføjes?
Skal brugeren spørges om de vil tilføje tallet til listen?
 
//Allan
Til top
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Sendt: 22.Jun.2011 kl. 22:39
Hej Allan,
 
Jeg har selv løst det. Jeg har tilføjet nogle kommandonapper, som indsætter de ønskede værdier.
 
Jeg har også lavet en knap, der kører makroen med din kode, og det virker perfekt. Jeg kunne dog godt tænke mig, at Excel automatisk kører makroen, når der tilføjes et nyt tal, som medfører, at det maksimale antal unikke tal overskrides. Jeg har prøvet mig frem i VBA, men jeg kan ikke få det til at virke.
 
Hvor skal jeg skrive hvad?
 
På forhånd mange tak.
 
Mvh.
Thomas
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 23.Jun.2011 kl. 10:38
Hej Thomas,
 
Det kommer lidt an på hvordan du har lavet koden bag dine kommandoknapper.
Du skal afslutte din makro med at henvise til koden jeg sendte dig.
 
Det gøres således: Call Max_Unikke
 
//Allan
Til top
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Sendt: 23.Jun.2011 kl. 10:55
Hej Allan,
 
Jeg har skrevet koden bag knapperne for hvert tal således:
 
Sub Tal_7()
   
    Range("A1").Select
    If Selection.Value > 0 Then Range("A2").Select
    If Selection.Value > 0 Then Range("A3").Select
    If Selection.Value > 0 Then Range("A4").Select
    If Selection.Value > 0 Then Range("A5").Select
    If Selection.Value > 0 Then Range("A6").Select
    If Selection.Value > 0 Then Range("A7").Select
    If Selection.Value > 0 Then Range("A8").Select
        
    ActiveCell.FormulaR1C1 = "7"
   
 End Sub
 
Det virker fint.
 
Hvis jeg nu indsætter Call Max_Unikke før End Sub, så skriver den Sub or Function not defined. Kan det måske hænge sammen med, at jeg har skrevet koden for hver knap i dets eget Module?
 
Mvh.
Thomas
 
 
 
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 23.Jun.2011 kl. 12:35
Hvis du har skrevet de 2 koder i hver deres modul skulle det virke fint, det er bare vigtigt at de ligger i same fil.
Det virker det her hos mig.
 
Prøv:
 
Sub Tal_7()
   
    Range("A1").Select
    If Selection.Value > 0 Then Range("A2").Select
    If Selection.Value > 0 Then Range("A3").Select
    If Selection.Value > 0 Then Range("A4").Select
    If Selection.Value > 0 Then Range("A5").Select
    If Selection.Value > 0 Then Range("A6").Select
    If Selection.Value > 0 Then Range("A7").Select
    If Selection.Value > 0 Then Range("A8").Select
       
    ActiveCell.FormulaR1C1 = "7"
   Call Max_Unikke
 End Sub
Til top
Balto Se dropdown
Forum Begynder
Forum Begynder


Medlem: 22.Jun.2011
Land: Danmark
Status: Offline
Point: 9
Direkte link til dette indlæg Sendt: 23.Jun.2011 kl. 13:03
Hej Allan,
 
Ja, nu virker det. Fejlen lå i, at jeg ikke havde oprettet din kode i et modul men som et Microsoft Excel Object.
 
Tak!
 
Mvh.
Thomas
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 24.Jun.2011 kl. 09:07
Hej Tomas,
 
Nå for søren Big smile det var godt du fik problemet løst.
Det var dejligt at kunne hjæpe dig.
 
//Allan
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk