Avatar billede dane022 Seniormester
31. august 2006 - 21:16 Der er 7 kommentarer

Afrunding af dato til nærmeste dato i liste

Jeg vil høre om følgende kan lade sig gøre:

Hvis jeg i en liste har stående flere datoer, f.eks.
1/4-2004
1/8-2004
1/10-2004
1/4-2005

Hvis jeg så i b2 skriver en dato, så vil jeg gerne have det sådan at der bliver nedrundet til den nærmeste dato.
Så hvis jeg skrev 2/5-04, så skal det være 1/4-04. Hvis jeg skrev 31/7-04, så skal det også være 1/4-04
Avatar billede kabbak Professor
31. august 2006 - 21:42 #1
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2")) Is Nothing Then
        Dim I As Long, Dato As Variant
        Dato = [DATOLISTE]
        For I = UBound(Dato) To 1 Step -1
            If Target > Dato(I, 1) Then
            Application.EnableEvents = False
                Target = Dato(I, 1)
              Application.EnableEvents = True
                Exit Sub
            End If
        Next
    End If
End Sub


Navngiv din liste med datoer som DATOLISTE

sæt koden ind i arkmodulet på det ark som den skal virke på.
Avatar billede excelent Ekspert
31. august 2006 - 21:53 #2
et alternativ: put i arkets kodemodul

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:B100")) Is Nothing Then Exit Sub
Dim r
  For r = 2 To Range("A65536").End(xlUp).Row
  If Target < Cells(r, 1) Then Target = Cells(r - 1, 1): Exit Sub
  Next
Target = Range("A65536").End(xlUp).Value
End Sub
Avatar billede dane022 Seniormester
31. august 2006 - 22:38 #3
Jeg har prøvet den første og den virker. Men hvad nu hvis jeg ikke vil have den skal afrunde datoen i b2, men skrive den afrundede dato i en anden celle ?
Avatar billede dane022 Seniormester
31. august 2006 - 22:43 #4
En anden ting er at hvis jeg skriver f.eks. 1/8-04 så nedrundes der til 1/4-04. Der skal den blive på 1/8-04
Avatar billede excelent Ekspert
31. august 2006 - 23:06 #5
ret B2:B100 i linie 2 til det område du vil indtaster datoer i

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:B100")) Is Nothing Then Exit Sub
Dim r
If Target < Range("A2") Then Target = Range("A2"): Exit Sub
  For r = 2 To Range("A65536").End(xlUp).Row
  If Target < Cells(r, 1) Then Target = Cells(r - 1, 1): Exit Sub
  Next
If Target > Range("A65536").End(xlUp).Value Then Target = Range("A65536").End(xlUp).Value
End Sub
Avatar billede kabbak Professor
31. august 2006 - 23:27 #6
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
        Dim I As Long, Dato As Variant
        Dato = [DATOLISTE]
        For I = UBound(Dato) To 1 Step -1
            If Target >= Dato(I, 1) Then
            Application.EnableEvents = False
                Target = Dato(I, 1)
              Application.EnableEvents = True
                Exit Sub
            End If
        Next
    End If
End Sub
Avatar billede kabbak Professor
06. september 2006 - 12:36 #7
dane022 > hvordan går det med denne sag
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