Avatar billede hawkpapa Juniormester
16. marts 2012 - 10:39 Der er 5 kommentarer og
1 løsning

Makro til at sorterer kolonne med datoer

Hej igen
Jeg har fået en ny opgave med et ark, nu skal jeg have sorteret kolonne H som består af datoer skrevet på følgende måde : 16.03.12 sådan at den ældste står øverst og hele rækken skal selvfølgelig følge med, og den skal gøre det automatisk.
Kan det lade sig gøre ??

Jeg har denne tråd kørende :
Skjule/fjerne en række, når der er sat X i sidste kolonne
Jeg har et regneark med flere rækker og kolonner A B C D E F G H I.
Jeg vil gerne have have, at når man sætter et X i I kolonnen ud for feks række 11, så bliver række 11 skjult, kan det lade sig gøre ?? Og hvordan.

Og den har jeg fået klaret, det er i det samme ark den næste makro skal sættes ind.
Avatar billede store-morten Ekspert
17. marts 2012 - 12:39 #1
Private Sub Worksheet_Change(ByVal Target As Range)

      If Not Intersect(Range("J2:J100"), Target) Is Nothing Then
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = True
        End If
    Next c
      End If
     
        If Not Intersect(Range("H2:H100"), Target) Is Nothing Then
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = False
        End If
    Next c
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("H2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").Sort
        .SetRange Range("H2:H100")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = True
        End If
    Next c
        End If
End Sub
Avatar billede store-morten Ekspert
17. marts 2012 - 13:20 #2
Prøver igen ;-)
Sorterer på område: A2:J100
Private Sub Worksheet_Change(ByVal Target As Range)

      If Not Intersect(Range("J2:J100"), Target) Is Nothing Then
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = True
        End If
    Next c
      End If

        If Not Intersect(Range("H2:H100"), Target) Is Nothing Then

    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = False
        End If
    Next c

            ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
            ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("H2:H100"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Ark1").Sort
                .SetRange Range("A2:J100")
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With

    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = True
        End If
    Next c
        End If
End Sub
Avatar billede hawkpapa Juniormester
17. marts 2012 - 14:41 #3
Det vil sige at jeg bare skal sætte denne ind, så kører det hele, både det med X i J kolonne og datoer i H kolonne, dato skal skrives 16-03-2012, er det korrekt??
Det er en langhåret en du her har fået lavet, jeg prøver den lige lidt senere, da jeg skal i byen.
På forhånd tak for det store arbejde.
Vender tilbage i morgen.
Avatar billede store-morten Ekspert
17. marts 2012 - 19:03 #4
Ja
Kode med kommentar (bliver lysegrønne, når du har sat koden ind)
Private Sub Worksheet_Change(ByVal Target As Range)

    '1 Ved ændring i område, og der er et x, skjules rækken
      If Not Intersect(Range("J2:J100"), Target) Is Nothing Then
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = True
        End If
    Next c
      End If
     
    '2 Ved ændring i område
        If Not Intersect(Range("H2:H100"), Target) Is Nothing Then
       
    '2,1 og der er et x, vises rækken inden sortering
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = False
        End If
    Next c
   
    '2,2 Sorterer område A2:J100 efter kolonne H med ældste først
            ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
            ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("H2:H100"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Ark1").Sort
                .SetRange Range("A2:J100")
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
           
    '2,3 og der er et x, skjules rækken igen
    For Each c In Range("J2:J100").Cells
        If c.Value = "x" Then
            c.EntireRow.Hidden = True
        End If
    Next c
        End If
End Sub

Du kunne sætte "datavalidering" på H2:H100
F.eks:
Fane: Indstillinger
Tilad: Dato
Data: Større end
Start dato: 01-01-1900

Fane: Fejlmeddelelse
Fejlmeddelelse
Du skal skrive Dato med formatet 01-01-2000 (binde streg)
Avatar billede hawkpapa Juniormester
20. marts 2012 - 16:18 #5
Tak for hjælpen, vil di lige smide et svar så får du dine velfortjente points.
Avatar billede store-morten Ekspert
20. marts 2012 - 17:41 #6
Velbekomme
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

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