Avatar billede henrik4223 Nybegynder
24. marts 2003 - 21:56 Der er 6 kommentarer og
2 løsninger

Slette mindste tal?

Jeg har følgende makro, der sletter det mindste tal i cellerne a1:a12 hvis der er 1-6 tal i rækken g 2 mindste hvis der er 7-12.
Hvordan får jeg det til at gælde fra fx B6:L17. Hvis jeg bare indsætter det istedet for a1:a12 sletter den kun i de første 2 kolloner af gangen.
Sidste spørgsmål, er om man ikke kan gøre noget, så man kan fortryde en makro med fortrydknappen?

Sub SletMindste()
'Jkrons 03-2003
    Dim a As Byte
    Dim b As Double
    a = 0

    For Each c In Worksheets("ark1").Range("a1:a12").Cells
        If Not IsEmpty(c) Then a = a + 1
    Next
    Set myrange = Worksheets("ark1").Range("A1:a12")
    If a > 6 Then
        b = Application.WorksheetFunction.Small(myrange, 1)
        c = Application.WorksheetFunction.Small(myrange, 2)
        Cells.Find(What:=b, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Select
        Selection.ClearContents
        Cells.Find(What:=c, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Select
        Selection.ClearContents
    Else
        b = Application.WorksheetFunction.Small(myrange, 1)
        Cells.Find(What:=b, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Select
        Selection.ClearContents
    End If

End Sub
24. marts 2003 - 22:00 #1
Ændre linie
Set myrange = Worksheets("ark1").Range("A1:a12")
til
Set myrange = Worksheets("ark1").Range("B6:L17")
24. marts 2003 - 22:01 #2
sorry - det var for hurtigt et svar
Avatar billede henrik4223 Nybegynder
24. marts 2003 - 22:02 #3
hvad med  For Each c In Worksheets("ark1").Range("a1:a12").Cells ?

synes bare stadig kun at den sletter fra to kollonner i stedet for alle 10...?
24. marts 2003 - 22:16 #4
den er ikke lavet til at virke på flere kolonner..... jeg kigger lige på den
Avatar billede jkrons Professor
24. marts 2003 - 22:25 #5
Ret begge ranges til det du ønsker. Så skulle den meget gerne virke. Altså B6:L17 begge steder.

Nej, du kan ikke fortryde handlinger udført af en makro.
Avatar billede jkrons Professor
24. marts 2003 - 22:26 #6
Men den sletter stadig kun de to mindste tal i hele området, ikke de to mindster tal i hver kolonne, hvis det er det du mener.
24. marts 2003 - 22:32 #7
ja - den virker ikke en gang for hver kolonne, men det gør denne her - prøv engang

Sub SletMindste()
    Dim rSeachRange As Range
    Dim rCol As Range
    Dim rCell As Range
    Dim lCount As Long
    Dim lMin As Long
    Dim lRepeat As Long

    Set rSeachRange = Worksheets("ark1").Range("B6:L17")
   
   
    For Each rCol In rSeachRange.Columns
        lCount = 0
        For Each rCell In rCol.Cells
            If Not IsEmpty(rCell.Value) Then lCount = lCount + 1
        Next rCell
       
        If lCount < 7 Then lRepeat = 1
        If lCount > 6 Then lRepeat = 2
       
        For lMin = 1 To lRepeat
            Cells.Find(What:=Application.WorksheetFunction.Small(rCol, lMin), _
                After:=rCol.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, _
                SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).ClearContents
        Next lMin
    Next rCol
   
    ' CleanUp
    Set rSeachRange = Nothing
    Set rCol = Nothing
    Set rCell = Nothing
End Sub
Avatar billede jkrons Professor
24. marts 2003 - 22:32 #8
Skal den slette de to mindste tal i hver kolonne, så prøv med dette

Sub SletMindste()
    Dim a As Byte
    Dim b As Double

    a = 0
For Each cl In Worksheets("ark1").Range("b:l").Columns
    For Each c In Worksheets("ark1").Range("b6:b17").Cells
        If Not IsEmpty(c) Then a = a + 1
    Next
    Set myrange = Worksheets("ark1").Range("b6:l17")
    If a > 6 Then
        b = Application.WorksheetFunction.Small(myrange, 1)
        c = Application.WorksheetFunction.Small(myrange, 2)
        Cells.Find(What:=b, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Select
        Selection.ClearContents
        Cells.Find(What:=c, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Select
        Selection.ClearContents
    Else
        b = Application.WorksheetFunction.Small(myrange, 1)
        Cells.Find(What:=b, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Select
        Selection.ClearContents
    End If
Next cl
End Sub
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

IT-JOB

Capgemini Danmark A/S

Open Application (Denmark)

Politiets Efterretningstjeneste

Data engineer til PET

Politiets Efterretningstjeneste

Fagkoordinator til Netværkssektionen i PET

Capgemini Danmark A/S

AI Data Architect