05. august 2010 - 21:20Der er
8 kommentarer og 1 løsning
Excel opgave
Hej derude...
Håber der er en (eller flere) venlige sjæle, som kan hjælpe mig med en formel i Excel.
Jeg har et dokument, som skal udregne min brændstof økonomi, men da det ikke er altid at bilen bliver fyldt helt op, skal den ud fra en JA / NEJ værdi kunne tage højde for det, og så regne det ud således, at næste gang den bliver helt fyldt, skal den returnere værdien.
Dvs., at mit Excel regneark pt. ser sådan ud: EKSEMPEL:
Kolonne A: Dato Kolonne B: Odometer Kolonne C: Fyldt tank (JA / NEJ) Kolonne D: Liter tanket Kolonne E: Kr pr. ltr. brændstof Kolonne F: Total kr. Kolonne G: Triptæller (denne udregnes via odometer oplysn.) Kolonne H: Gns. pr. ltr.
Der hvor ændringen så er, at hvis man skriver værdien NEJ i kolonne C, skal den i stedet for Gns.pr. ltr. først udregne det ved næste værdi JA i kolonne C.
Håber det giver mening, for det er svært at forklare!
En som kan hjælpe? Kan evt. sende dokumentet på mail, hvis det er til nogen hjælp!
Hov, beklager fejlen, men tak for rettelsen! Håber der er en som kan hjælpe med det, for jeg kan ikke finde ud af, hvordan jeg får det til at virke...
Men som man kan se i række 12, så blev bilen ikke fyldt helt, hvilket vil sige, at den skal sammenlægge linie 12 samt 13 (og måske flere (hvem ved), og ligeledes sammenlægge samme linie med hensyn til kolonne G, for derefter at returnere værdien i kolonne H.
Udgangspunktet er dit eksempelark med de respektive kolonner.
Her og nu har jeg oprettet en kommandoknap, som via sin click-hændelse kalder VBA proceduren "JaEllerNej".
Proceduren gør følgende: - undersøger sidst udfyldte række for "ja" eller "nej" - hvis "nej" ... gør den ingenting. - hvis "ja" ... undersøger den rækken før ... indtil der stødes på et "ja" - Fra den sidst udfyldte række med et "ja" beregner den gennemsnittet "bagud" i rækkerne til forrige "ja"
Totalt volapyk ¤&%!!??¤/&%/ .... men håber det gi´r mening ??
Hvis du ikke vil bruge en knap til at aktivere beregningen efter hver indtastning ?? ... så finder vi sikkert også ud af det!
Men prøv lige om følgende kode virker ...
'Kommandoknap Private Sub cmdJaEllerNej_Click()
JaEllerNej
End Sub
'JaEllerNej proceduren Public Sub JaEllerNej()
Dim r As Long 'rækkenummeret på den sidst udfyldte række Dim i As Long 'tællevariabel til løkken der tæller ned fra sidst udfyldte række Dim v As Variant 'værdien af den aktive ja/nej celle Dim litertanket As Long 'værdien af liter tanket Dim triptæller As Long 'værdien af triptæller Dim gnsprltr 'værdien af gennemsnit pr. liter Dim tv As Integer 'tællevariabel til række Offset værdien, som tælles ned
'finder den sidste udfyldte ja/nej celle i kolonne C r = Range("C65536").End(xlUp).Row
'sætter den sidste udfyldte ja/nej celle i kolonne C ... aktiv Range("C" & r).Select
'værdien af den aktive ja/nej celle i kolonne C v = ActiveCell.Value
'undersøg værdien af den aktive ja/nej celle i kolonne C Select Case v
'hvis værdien af den aktive ja/nej celle i kolonne C er "ja" Case "ja"
'tildel variablerne de respektive værdier fra den aktive række (sidst udfyldte) litertanket = ActiveCell.Offset(0, 1).Value 'værdien fra kolonne D triptæller = ActiveCell.Offset(0, 4).Value 'værdien fra kolonne G
'tællevariablen til Offset værdien sættes til -1 (der tælles baglæns!) tv = -1
'tællevariabel i sættes = den sidste udfyldte rækkenummer For i = r To 1 Step -1
'hvis ja/nej værdien i rækken foran den aktive række er = "ja" If ActiveCell.Offset(tv, 0).Value = "ja" Then
'Gennemsnit pr. liter = liter tanket divideret med triptæller gnsprltr = triptæller / litertanket
'cellen i kolonne H i den aktive række tildeles kilometergennemsnitsværdien pr. liter. ActiveCell.Offset(0, 5).Value = gnsprltr
'forlad løkken Exit For
'hvis ja/nej værdien i rækken foran den aktive række er = "nej" ElseIf ActiveCell.Offset(tv, 0).Value = "nej" Then
'læg de respektive værdierne fra rækken foran den aktive række til variablerne litertanket = litertanket + ActiveCell.Offset(tv, 1).Value triptæller = triptæller + ActiveCell.Offset(tv, 4).Value
'tællevariablen til Offset værdien tælles ned med yderligere 1 (der tælles baglæns!) tv = tv - 1
'hvis ja/nej værdien i rækken foran den aktive række er alt andet end "ja" eller "nej" ?? Else
'Gennemsnit pr. liter = liter tanket divideret med triptæller gnsprltr = triptæller / litertanket
'cellen i kolonne H i den aktive række tildeles kilometergennemsnitsværdien pr. liter. ActiveCell.Offset(0, 5).Value = gnsprltr
Jeg har prøvet at lave en løsning her http://www.gratisupload.dk/download/47480/ hvor der ikke bruges makro. Men de første rækker skal udfyldes af dig (markeret med rødt), og så skal bilen have en fyld tank mindst hver 5 gang
Tror faktisk jeg har en brugbar løsning ... uden knap.
Når der er tastet data ind i kolonnerne fra A til E og kolonne F og G automatisk er beregnet af Excel ... aktiveres den underliggende vba kode, som beregner kolonne H udfra om der er "ja" eller "nej" i kolonne C.
Det eneste du umiddelbart skal gøre er: Skrive to små koder i første datarække (række 2) i kolonne F og G. Kopiere koderne nedad i kolonne F og G Slette koden i første datarække (række 2) i kolonne G Kopiere vba kode ind i arkets Change-hændelse. Kopiere vba kode ind i arkets generelle afsnit.
Og det var vist det ...
Er du interesseret ?, så gi´ lyd :o)
mvh Nicolai
Synes godt om
Ny brugerNybegynder
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.