Avatar billede zenorph Nybegynder
05. august 2010 - 21:20 Der 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!
Avatar billede zenorph Nybegynder
05. august 2010 - 21:30 #1
Her kan ses et lille billede...

www.lrq.dk/downloads/diesel.jpg
Avatar billede vejmand Juniormester
05. august 2010 - 21:41 #2
Linket virker ikke?
Avatar billede vejmand Juniormester
05. august 2010 - 21:42 #3
Avatar billede zenorph Nybegynder
05. august 2010 - 21:47 #4
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.

Håber det gav mening... :-)
Avatar billede Ialocin Novice
06. august 2010 - 03:22 #5
Hej zenorph

Kan dette evt. bruges:

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
                       
                            'forlad løkken
                            Exit For
                                           
                                           
                        End If
               
                           
                Next
       


        Case "nej"

            'Vent med at beregne til vi støder på et "ja" !!!
           
           
    End Select
   
   
 
End Sub



Med venlig hilsen, Nicolai
Avatar billede zenorph Nybegynder
06. august 2010 - 14:38 #6
Troede slet ikke det ville være så indviklet :-(

Er slet ikke dygtig nok til at lave det du skriver :-(
Så skal jeg hellere finde en, som er Excel haj, som kan danne dokumentet, hehe!

Men tusind tak for hjælpen, og du er naturligvis helt velkommen til at smide et svar :-)
Avatar billede Ialocin Novice
06. august 2010 - 22:19 #7
Hej zenorph

Hermed et "svar" ... men det er nu ikke så langhåret endda :o)

Hvis du er interesseret, så vil jeg gerne hjælpe dig med at oprette knappen (eller aktivere koden på anden vis)+ kopiere koden ind i dit Excel ark ??

Du kan evt. maile arket til mig.
Adressen finder du under profiloplysningerne.

mvh Nicolai
Avatar billede ulykken-smed Juniormester
07. august 2010 - 00:18 #8
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
Avatar billede Ialocin Novice
08. august 2010 - 02:22 #9
Hej zenorph

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
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