Avatar billede denero Juniormester
08. april 2014 - 10:13 Der er 14 kommentarer og
1 løsning

Udregning af dato 1 år tilbage, vba excel 2010

Har flg kode:

Private Sub RDMålerkode_Change()
   
    Dim test1 As String
    Dim FoundRange As Range
   
    test1 = RDMålerkode.Value
   
    Application.ScreenUpdating = False
   
    Worksheets("Stamdata").Activate
   
    Set FoundRange = Sheets("Stamdata").Cells.Find(What:=test1, LookIn:=xlFormulas, LookAt:=xlWhole)
   
    If FoundRange Is Nothing Then
        ArtAflæs.Caption = "Ikke fundet"
        ArtOmfatter.Caption = "Ikke fundet"
        Sted.Caption = "Ikke fundet"
        Placering.Caption = "Ikke fundet"
        Målernavn.Text = ""
   
    Else
        ArtAflæs.Caption = FoundRange.Offset(0, 3).Value
        ArtOmfatter.Caption = FoundRange.Offset(0, 4).Value
        Sted.Caption = FoundRange.Offset(0, -2).Value
        Placering.Caption = FoundRange.Offset(0, -1).Value
        Målernavn.Text = FoundRange.Offset(0, 1).Value
    End If
 
    'Finder ark
    Dim Searchdata As String

    Searchdata = RDMålerkode.Value

    If Searchdata <> vbNullString Then
    On Error Resume Next
    Sheets(Searchdata).Activate
    If Err.Number <> 0 Then MsgBox "Kan ikke finde det søgte!: " & Searchdata
    On Error GoTo 0
    End If
   
    'Opdaterer aflæsningsdata
    Range("D10000").Select
    Selection.End(xlUp).Select
    SenesteAflæsning.Value = ActiveCell.Value
   
    With ActiveCell.Offset(0, -3).Select
    End With
    SenestAflæsningsDato.Value = ActiveCell.Value
    SenestAflæsningsDato.Value = Format(SenestAflæsningsDato.Text, "DD-MMMM-YYYY")
   
    'Finder sidste års/måneds forbrug
    Range("A1").Select

    AflæsDato1ÅrSiden.Value = SenestAflæsningsDato.Value
    AflæsDato1ÅrSiden.Value = Format(DateAdd("yyyy", -1, SenestAflæsningsDato.Value), "DD-MMMM-YYYY")
Avatar billede denero Juniormester
08. april 2014 - 10:15 #1
UPS - Sådan skulle det have set ud:

Private Sub RDMålerkode_Change()
   
    Dim test1 As String
    Dim FoundRange As Range
   
    test1 = RDMålerkode.Value
   
    Application.ScreenUpdating = False
   
    Worksheets("Stamdata").Activate
   
    Set FoundRange = Sheets("Stamdata").Cells.Find(What:=test1, LookIn:=xlFormulas, LookAt:=xlWhole)
   
    If FoundRange Is Nothing Then
        ArtAflæs.Caption = "Ikke fundet"
        ArtOmfatter.Caption = "Ikke fundet"
        Sted.Caption = "Ikke fundet"
        Placering.Caption = "Ikke fundet"
        Målernavn.Text = ""
   
    Else
        ArtAflæs.Caption = FoundRange.Offset(0, 3).Value
        ArtOmfatter.Caption = FoundRange.Offset(0, 4).Value
        Sted.Caption = FoundRange.Offset(0, -2).Value
        Placering.Caption = FoundRange.Offset(0, -1).Value
        Målernavn.Text = FoundRange.Offset(0, 1).Value
    End If
 
    'Finder ark
    Dim Searchdata As String

    Searchdata = RDMålerkode.Value

    If Searchdata <> vbNullString Then
    On Error Resume Next
    Sheets(Searchdata).Activate
    If Err.Number <> 0 Then MsgBox "Kan ikke finde det søgte!: " & Searchdata
    On Error GoTo 0
    End If
   
    'Opdaterer aflæsningsdata
    Range("D10000").Select
    Selection.End(xlUp).Select
    SenesteAflæsning.Value = ActiveCell.Value
   
    With ActiveCell.Offset(0, -3).Select
    End With
    SenestAflæsningsDato.Value = ActiveCell.Value
    SenestAflæsningsDato.Value = Format(SenestAflæsningsDato.Text, "DD-MMMM-YYYY")
   
    'Finder sidste års/måneds forbrug
    Range("A1").Select

    AflæsDato1ÅrSiden.Value = SenestAflæsningsDato.Value
    AflæsDato1ÅrSiden.Value = Format(DateAdd("yyyy", -1, SenestAflæsningsDato.Value), "DD-MMMM-YYYY")

Her ønsker jeg at fortsætte med ( tekstboks) seneste forbrug 1 år siden, men der kan være forskel på datoer i måneden fra år til år, dog er der kun en dato i hver måned. I arket er datoerne eks. 28-02-14 og 29-02-13.
Til slut skal der være 2 tekstbokse, en med samlet forbrug indtil dato indeværende år og en med samlet forbrug svarende til 1 år siden. Eks hvis sidste måned i 2014 er juli, skal forbruget også være juli 2013
Datoer står i kolonne A og forbrug står i kolonne G
Avatar billede claes57 Ekspert
08. april 2014 - 10:19 #2
den sidste dag i måned er let at finde.
Tag dato den første i efterfølgende måned, og træk en dag fra.
Det giver altid korrekt resultat.
Avatar billede denero Juniormester
08. april 2014 - 10:26 #3
Kan du være lidt mere konkret.
Avatar billede claes57 Ekspert
08. april 2014 - 11:09 #4
AflæsDato1ÅrSiden.Value = SenestAflæsningsDato.Value
' i morgen er så den første i næste måned, fx 1. marts 2014
AflæsDato1ÅrSiden.Value = DateAdd("d", 1, SenestAflæsningsDato.Value)
' så skal vi et år tilbage, fx 1. marts 2013
AflæsDato1ÅrSiden.Value = DateAdd("yyyy", -1, SenestAflæsningsDato.Value)
' og tilbage en dag, fx 28. feb 2013 (rammer altid korrekt)
AflæsDato1ÅrSiden.Value = DateAdd("d", -1, SenestAflæsningsDato.Value)
Avatar billede claes57 Ekspert
08. april 2014 - 11:11 #5
sorry - glemte lige at rette et felt 2 steder
AflæsDato1ÅrSiden.Value = SenestAflæsningsDato.Value
' i morgen er så den første i næste måned, fx 1. marts 2014
AflæsDato1ÅrSiden.Value = DateAdd("d", 1, SenestAflæsningsDato.Value)
' så skal vi et år tilbage, fx 1. marts 2013
AflæsDato1ÅrSiden.Value = DateAdd("yyyy", -1, AflæsDato1ÅrSiden.Value)
' og tilbage en dag, fx 28. feb 2013
AflæsDato1ÅrSiden.Value = DateAdd("d", -1, AflæsDato1ÅrSiden.Value)
Avatar billede denero Juniormester
08. april 2014 - 11:23 #6
Umiddelbart har jeg et spørgsmål:
Hvis dato i 2014 ikke er den sidste i måneden, får det så indflydelse på udregningen?
Det er datoen du har regnet på - har du et bud på det andet. Man skal bruge dato fra 2013 til at søge i kolonne G efter forbrug. Vil det være bedre at søge med eks:"*" + value dato for et år siden(mm-YYYY).Ved ikke lige hvordan det skal kodes?
Avatar billede claes57 Ekspert
08. april 2014 - 11:41 #7
ok - denne tager højde for at du starter en tilfældig dag i en måned. Der er lagt en workdato ind til udregningen

AflæsDato1ÅrSiden.Value = SenestAflæsningsDato.Value
' en dag i næste måned, fx 25 mar 2014
AflæsDato1ÅrSiden.Value = DateAdd("m", 1, AflæsDato1ÅrSiden.Value.Value)
' den første i den måned, fx 1 mar 2014
workdato = cDate("1/" & DatePart("m",AflæsDato1ÅrSiden.Value) & "/" & DatePart("yyyy",AflæsDato1ÅrSiden.Value))
' så skal vi et år tilbage, fx 1 marts 2013
AflæsDato1ÅrSiden.Value = DateAdd("yyyy", -1, workdato)
' og tilbage en dag, fx 28 feb 2013
AflæsDato1ÅrSiden.Value = DateAdd("d", -1, AflæsDato1ÅrSiden.Value)
Avatar billede denero Juniormester
08. april 2014 - 20:53 #8
Hej Claes57
Tak for dit svar - er det ok, at jeg kigger på det senere, da arbejdet kalder?
Det er ikke synderlig fikst - men håber du forstår.
Jeg skal nok vende tilbage!
Avatar billede claes57 Ekspert
09. april 2014 - 06:17 #9
Du lukker bare hvis det er ok, ellers vend tilbage.
Avatar billede denero Juniormester
15. april 2014 - 08:55 #10
Hej Claes57

Håber ikke du har mistet tålmodigheden?

AflæsDato1ÅrSiden.Value = DateAdd("m", 1, AflæsDato1ÅrSiden.Value.Value)

Har der ikke sneget sig et ekstra "Value" ind?

Når 31-marts-2014 skal beregnes, giver det 01-marts-2013, altså første dag i den måned i 2013 - det skulle helst være den sidste dag.
Avatar billede claes57 Ekspert
15. april 2014 - 09:22 #11
det er den .value for meget, der gør, at den ikke først går ind i næste måned. Jeg ved ikke hvor hurtigt det er i excel at regne på et felt som redigeres flere gane, så jeg har sat en variabel ind i stedet, og sætter først feltet til sidst.

enDato = SenestAflæsningsDato.Value
' en dag i næste måned, fx 25 mar 2014
enDato = DateAdd("m", 1, enDato)
' den første i den måned, fx 1 mar 2014
workdato = cDate("1/" & DatePart("m",enDato) & "/" & DatePart("yyyy",enDato))
' så skal vi et år tilbage, fx 1 marts 2013
enDato = DateAdd("yyyy", -1, workdato)
' og tilbage en dag, fx 28 feb 2013
AflæsDato1ÅrSiden.Value = DateAdd("d", -1, enDato)
Avatar billede denero Juniormester
15. april 2014 - 10:23 #12
Det virker. Tak for det Claes57.

Den sidste del af spørgsmålet ved jeg ikke om du har et bud på ellers opretter jeg det som nyt spørgsmål.

Til slut skal der være 2 tekstbokse, en med samlet forbrug indtil dato indeværende år og en med samlet forbrug svarende til 1 år siden. Eks hvis sidste måned i 2014 er juli, skal forbruget også være juli 2013
Datoer står i kolonne A og forbrug står i kolonne G

Hvis ikke læg et svar.
Avatar billede claes57 Ekspert
15. april 2014 - 10:30 #13
den del vil jeg godt holde mig ude af - og bare luk selv.
Avatar billede denero Juniormester
15. april 2014 - 12:27 #14
Du har hjulpet, så jeg synes du skal lægge et svar.
Avatar billede claes57 Ekspert
15. april 2014 - 12:41 #15
ok,kun fordi det er dig... ;)
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