Avatar billede hans.simon22 Juniormester
28. maj 2020 - 18:45 Der er 59 kommentarer

VBA: hvad er der forkert?

Er igang med at finde summen af alle betalinger i det seneste 14 dage.
hvis antal dage er under eller lig med  14 og beløbet er > 4000 kr, så skal den ganges med infonr. og 0,6.
hvis antal dage er under eller lig med  14 og beløbet er < 3000 kr, så skal den ganges med infonr. og 1,6




Sub ny()

Dim antalDage As Double
Dim beløbet As Double
Dim infonr As Double


    antalDage = Worksheets("Hjem").Range("A1").End(xlDown).Row
    beløbet = Worksheets("Hjem").Range("B1").End(xlDown).Row
    infonr =Worksheets("Hjem").Range("C1").End(xlDown).Row
   
       
    If (antalDage < 14 And  beløbet > 4000 ) Then
        Range("E2:E").Formula = "=B2*C2*0.6"
    ElseIf (antalDage = 14 And patientensAlder > 7000) Then
        Range("E2:E").Formula = "=B2*C2*0.6"
    End If
   
    If (antalDage < 14 And beløbet < 3000) Then
        Range("F2:F").Formula = "=B2*C2*1.6"
    ElseIf (antalDage = 14 And patientensAlder < 3000) Then
        Range("F2:F").Formula = "=B2*C2*1.6"
    End If

End Sub

Den første del kører, men anden viser debug.

Ups! summen vil finde til sidst
Avatar billede store-morten Ekspert
28. maj 2020 - 19:30 #1
Range("E2:E?") og Range("F2:F?")
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 19:50 #2
#1 Der er mange værdier.

Skal jeg så finde den sidste række med tallet og skrive der?
Avatar billede store-morten Ekspert
28. maj 2020 - 20:04 #3
Du vil skrive formlen i et område der ikke er komplet.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 20:07 #4
#3 har fundet fejlen, men den stadig viser debug.

Sub ny()

Dim antalDage As Double
Dim beløbet As Double
Dim infonr As Double


    antalDage = Worksheets("Hjem").Range("A1").End(xlDown).Row
    beløbet = Worksheets("Hjem").Range("B1").End(xlDown).Row
    infonr =Worksheets("Hjem").Range("C1").End(xlDown).Row
   
       
    If (antalDage < 14 And  beløbet > 4000 ) Then
        Range("E2:E").Formula = "=B2*C2*0.6"
    ElseIf (antalDage = 14 And patientensAlder > 7000) Then
        Range("E2:E").Formula = "=B2*C2*0.6"
    End If
   
    If (antalDage < 14 And beløbet < 3000) Then
        Range("E2:E").Formula = "=B2*C2*1.6"
    ElseIf (antalDage = 14 And patientensAlder < 3000) Then
        Range("E2:E").Formula = "=B2*C2*1.6"
    End If

End Sub
Avatar billede store-morten Ekspert
28. maj 2020 - 20:21 #5
Der mangler stadig række nr.
Range("E2:E")
Fra E2 til E ?
Avatar billede store-morten Ekspert
28. maj 2020 - 20:23 #6
Eller vil du kun skrive i celle E2 ?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 20:33 #7
#5
har 162 rækker i alt. Har skrevet fra Range("E2:E162")

men nu kommer der ikke noget frem, som er meget mærkeligt.

Er der ikke andre metoder for at beregne det?
Avatar billede store-morten Ekspert
28. maj 2020 - 20:38 #8
Vil du skrive formlen =B2*C2*0.6 i 161 celler?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 20:39 #9
#7

Nu ser den således ud. Men kommer ikke noget resultat frem.

Sub ny()

Dim antalDage As Double
Dim beløbet As Double
Dim infonr As Double


    antalDage = Worksheets("Hjem").Range("A1").End(xlDown).Row
    beløbet = Worksheets("Hjem").Range("B1").End(xlDown).Row
    infonr =Worksheets("Hjem").Range("C1").End(xlDown).Row
   
       
    If (antalDage < 14 And  beløbet > 4000 ) Then
        Range("E2:E162").Formula = "=B2*C2*0.6"
    ElseIf (antalDage = 14 And patientensAlder > 7000) Then
        Range("E2:E162").Formula = "=B2*C2*0.6"
    End If
   
    If (antalDage < 14 And beløbet < 3000) Then
        Range("E2:E162").Formula = "=B2*C2*1.6"
    ElseIf (antalDage = 14 And patientensAlder < 3000) Then
        Range("E2:E162").Formula = "=B2*C2*1.6"
    End If

End Sub
Avatar billede store-morten Ekspert
28. maj 2020 - 20:46 #10
Du svare ikke på #8

A    antalDage
B    beløbet
C    infonr

Er det bare sidste række med indhold du skal bruge?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 20:50 #11
#10

jeg prøver igen.

Er i gang med at finde summen af alle betalinger for de seneste 14 dage.
(Det skal beregnes til sidst) 
Først har jeg beregnet forskellen mellem de to dage, og alle de værdier står i Worksheets("Hjem").Range("A1").End(xlDown).Row.

hvis antal dage er under eller lig med 14 og beløbet er > 4000 kr, så skal jeg gange beløbet med infonr. og 0,6.
hvis antal dage er under eller lig med  14 og beløbet er < 3000 kr, så skal jeg gange beløbet med infonr og 1,6

antalDage = Worksheets("Hjem").Range("A1").End(xlDown).Row
    beløbet = Worksheets("Hjem").Range("B1").End(xlDown).Row
    infonr =Worksheets("Hjem").Range("C1").End(xlDown).Row
 
Har værdier fra celle 2 til celle 168 i alle kolonner, nemlig A1, B1, C1, beregningen skal indsættes i fra E2 til E168.
Avatar billede store-morten Ekspert
28. maj 2020 - 20:55 #12
"Først har jeg beregnet forskellen mellem de to dage, og alle de værdier står i Worksheets("Hjem").Range("A1").End(xlDown).Row."

Worksheets("Hjem").Range("A1").End(xlDown).Row.

Vil give dig den sidste række i kolonne A med indhold.
Avatar billede store-morten Ekspert
28. maj 2020 - 20:59 #13
Hvis betingelsen er opfyldt... vil:
Range("E2:E162").Formula = "=B2*C2*0.6"

skrive: =B2*C2*0.6
I E2, E3, E4, E4...........E162 altså den samme formel i alle celler?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:02 #14
#13 nemlig.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:03 #15
#12 har ikke forstået det :(

Jeg har mange arks med nogle info, og nemlig dato og tidspunkter står i arket "Dato".

Jeg har beregnet forskelen mellem i dag og den sidste betalingsdato, og forskellen af de to dato har jeg indsat i et nyt ark, som hedder "Hjem"(A2:A168).
Avatar billede store-morten Ekspert
28. maj 2020 - 21:04 #16
"Har værdier fra celle 2 til celle 168 i alle kolonner, nemlig A1, B1, C1"

Så vil:
    antalDage = Worksheets("Hjem").Range("A1").End(xlDown).Row være =168
    beløbet = Worksheets("Hjem").Range("B1").End(xlDown).Row være =168
    infonr =Worksheets("Hjem").Range("C1").End(xlDown).Row være =168
Avatar billede store-morten Ekspert
28. maj 2020 - 21:07 #17
Undskyld... Det giver ingen menig at gentage den samme formel/resultat i 167 celler?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:08 #18
#16 nemlig.


Harallerede prøvet at skrive:
antalDage = Worksheets("Hjem").Range("A1:A168")
    beløbet = Worksheets("Hjem").Range("B1:B168")
    infonr =Worksheets("Hjem").Range("C1:168")

men den viser debug, lige fra første linje.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:13 #19
#17 hvis er der forskellige værdier, såsom forskellige beløb og infonr. samt betingelser,  så hvordan skal den samme formel køres fra celle 2 til celle 168.

har nogle datoer, hvor forskellen mellem idag og betalingsdag er over 160 dag, som betyder, at jeg skal ikke have det med.
Avatar billede store-morten Ekspert
28. maj 2020 - 21:16 #20
Jeg tror nu, jeg forstår hvad du vil :-)

Så vi prøve at bygge en kode op.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:20 #21
# 20

Jeg har prøvet på mange forskellige måder, men uden held. Håber du kan hjælpe mig :)
Avatar billede store-morten Ekspert
28. maj 2020 - 21:21 #22
Har du overskrifter i A, B og C?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:23 #23
# 22

ja.

nemlig i A1, B1, og C1
Avatar billede store-morten Ekspert
28. maj 2020 - 21:31 #24
Så starter du med at løbe cellerne i A igennem.
Her en lille test på de 5 øverst celler:

Sub test()
    For Each c In Range("A2:A6").Cells
   
    MsgBox "Antal dage: " & c.Value
   
    Next c
End Sub

Prøv at kører den og se om det ser rigtigt ud.
Der kommer en besked 5 gange.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:38 #25
#24 skal jeg ikke gøre det kun i Worksheets("Hjem")?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:41 #26
#24 den virker, har prøvet i Worksheets("hjem")

når jeg kører makroen, så kommer en messagbox frem med den første værdi i celle A2, og når jeg trykker på ok, så kommer den næste værdi frem nemlig A3 osv. Det samme gentages 5 gange
Avatar billede store-morten Ekspert
28. maj 2020 - 21:41 #27
Jo, kør koden når du står på fanen "Hjem"
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 21:43 #28
#28 har allerede gjort. Den virker.
Avatar billede store-morten Ekspert
28. maj 2020 - 21:45 #29
Fint, så tilføjer vi lidt mere:

Sub test()
p = 1
    For Each c In Range("A2:A6").Cells
   
        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
   
    MsgBox "Post" & p & ":  Antal: " & c.Value & "  Beløb: " & beløbet & "  Infonr: " & infonr
   
   
p = p + 1
   
    Next c
End Sub
Avatar billede store-morten Ekspert
28. maj 2020 - 21:47 #30
Hvor får: patientensAlder sin værdi?
Avatar billede store-morten Ekspert
28. maj 2020 - 21:56 #31
Er det i orden at skrive resultat i kolonne F i stedet for en formel?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:00 #32
#31 hvis vi kan skrive resultatet ind i kolonne F uden formel, bare med disse betingelser, så det er helt fint.
Avatar billede store-morten Ekspert
28. maj 2020 - 22:02 #33
Og hvor får: patientensAlder sin værdi?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:02 #34
#31 koden kører
Avatar billede store-morten Ekspert
28. maj 2020 - 22:04 #35
Sub test()

    For Each c In Range("A2:A6").Cells
   
        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
       
        If (antalDage < 14 And beløbet > 4000) Then
            c.Offset(0, 5) = beløbet * infonr * 0.6
        ElseIf (antalDage = 14 And patientensAlder > 7000) Then
            c.Offset(0, 5) = beløbet * infonr * 0.6
        End If
       
        If (antalDage < 14 And beløbet < 3000) Then
            c.Offset(0, 5) = beløbet * infonr * 1.6
        ElseIf (antalDage = 14 And patientensAlder < 3000) Then
            c.Offset(0, 5) = beløbet * infonr * 1.6
        End If
   
    Next c
End Sub
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:06 #36
#33 har genbrugt min anden kode. Der skal står beløb i stedet for patientensAlder. Jeg retter også i min, måske derfor kommer debug frem

Jeg prøver
Avatar billede store-morten Ekspert
28. maj 2020 - 22:12 #37
Er kolonne G ledig til test info?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:12 #38
#35 formlen kører, men har fået det samme resultat i alle celler, nemlig 0.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:14 #39
#37 yes.

Har værdier kun i kolonner A, B og C
Avatar billede store-morten Ekspert
28. maj 2020 - 22:16 #40
Sub test()

    For Each c In Range("A2:A6").Cells
   
        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
       
        If (antalDage < 14 And beløbet > 4000) Then
            c.Offset(0, 5) = beløbet * infonr * 0.6
            c.Offset(0, 6) = "Antal dage er < 14 og Beløbet er > 4000"
        ElseIf (antalDage = 14 And beløbet > 7000) Then
            c.Offset(0, 5) = beløbet * infonr * 0.6
            c.Offset(0, 6) = "Antal dage er = 14 og Beløbet er > 7000"
        End If
       
        If (antalDage < 14 And beløbet < 3000) Then
            c.Offset(0, 5) = beløbet * infonr * 1.6
            c.Offset(0, 6) = "Antal dage er < 14 og Beløbet er < 3000"
        ElseIf (antalDage = 14 And beløbet < 3000) Then
            c.Offset(0, 5) = beløbet * infonr * 1.6
            c.Offset(0, 6) = "Antal dage er = 14 og Beløbet er < 4000"
        End If
   
    Next c
End Sub
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:21 #41
#40 https://ibb.co/d58hk3G
kig på billedet. I stedet for den tekst, vil jeg helst have et tal.
Avatar billede store-morten Ekspert
28. maj 2020 - 22:23 #42
Du skal vist kikke på kriterier og række følge!

15 dage og 4001 i beløb, springes over?
Avatar billede store-morten Ekspert
28. maj 2020 - 22:26 #43
Tallet skrive stadig i kolonne F
Kolonne G skriver hvilket kriterier der beregnes med, kan slettes fra kode når den virker ;-)
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:30 #44
#43 https://ibb.co/kB2mwxT

Her kan du se at antal dage og beløbet fra række 2 og 4 opfylder kriterier, så hvorfor kommer ikke noget tal frem?
Avatar billede store-morten Ekspert
28. maj 2020 - 22:37 #45
Antal dage over 14 har kriterie? så de beregnes ikke.
Avatar billede store-morten Ekspert
28. maj 2020 - 22:38 #46
Antal dage over 14 har ingen kriterie? så de beregnes ikke.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 22:42 #47
#46 det skal beregne det, idet hvis antal dag mellem (i dag og betalingsdag ) er
< eller = 14, og beløbet er >end 4000 eller <3000, så skal beløbet ganges med infonr og dermed  ganges med 0,6 eller 1,6.
Avatar billede store-morten Ekspert
28. maj 2020 - 22:56 #48
Har prøvet at omskrive dine kriterier:
Sub test()

    For Each c In Range("A2:A6").Cells
   
        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
       
        If antalDage < 14 Then
            If beløbet < 3000 Then
                c.Offset(0, 5) = beløbet * infonr * 1.6
                c.Offset(0, 6) = "Antal dage er < 14 og Beløbet er < 3000"
            End If
            If beløbet > 4000 Then
                c.Offset(0, 5) = beløbet * infonr * 0.6
                c.Offset(0, 6) = "Antal dage er < 14 og Beløbet er > 4000"
            End If
        End If

        If antalDage = 14 Then
            If beløbet < 3000 Then
                c.Offset(0, 5) = beløbet * infonr * 1.6
                c.Offset(0, 6) = "Antal dage er = 14 og Beløbet er < 4000"
            End If
            If beløbet > 7000 Then
                c.Offset(0, 5) = beløbet * infonr * 0.6
                c.Offset(0, 6) = "Antal dage er = 14 og Beløbet er > 7000"
            End If
        End If
   
    Next c
End Sub


1. Antal dage under 14
1a. < 3000
1b. > 4000

Hvad med beløb mellem 3000 og 4000 ?

2.Antal dage =14
2a. < 3000
2b. > 7000

Hvad med beløb mellem 3000 og 7000 ?

Hvad med Antal dage over 14 ?
Avatar billede store-morten Ekspert
28. maj 2020 - 22:57 #49
Kommer til at slutte for nu, skal tidligt op og sprøjte :-)
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 23:03 #50
#48 ups, igen min tastfejl.


Der er kun to beløbsbegrænsninger: nemlig hvis beløbet ligger mellem 3000 eller 4000, så skal der skrives kun 0.



Jeg siger, tak for hjælpen. Jeg prøver at kigge på det igen og igen, for at se om det virker. Hvis det lykkes ikke, vil jeg muligvis forstyre dig igen. På forhånd tak
Avatar billede store-morten Ekspert
28. maj 2020 - 23:10 #51
Hvad med: Antal dage over 14 ?
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 23:20 #52
#51
hvis antal dage er over 14, så skal der indsættes 0 i de celler hvor antal dag er over 14.

Har allerede prøvet koden. Den viser ikke noget debug, men værdier kommer ikke frem. Da jeg har tastet informationen forkert, så vil jeg ændre det lidt og indsætte den her igen:


Sub test()

Dim c
Dim antalDage
Dim beløbet
Dim infonr
Dim p


    For Each c In Worksheets("Hjem").Range("A2:A6").Cells

        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
       
        If antalDage < 14 Then
            If beløbet < 3000 Then
                c.Offset(0, 5) = beløbet * infonr * 1.6
                c.Offset(0, 6) = "Antal dage er < 14 og Beløbet er < 3000"
            End If
            If beløbet > 4000 Then
                c.Offset(0, 5) = beløbet * infonr * 0.6
                c.Offset(0, 6) = "Antal dage er < 14 og Beløbet er > 4000"
            End If
        End If

        If antalDage = 14 Then
            If beløbet < 3000 Then
                c.Offset(0, 5) = beløbet * infonr * 1.6
                c.Offset(0, 6) = "Antal dage er = 14 og Beløbet er < 3000"
            End If
            If beløbet > 4000 Then
                c.Offset(0, 5) = beløbet * infonr * 0.6
                c.Offset(0, 6) = "Antal dage er = 14 og Beløbet er > 4000"
            End If
        End If
   
    Next c
   

     
End Sub
Avatar billede store-morten Ekspert
28. maj 2020 - 23:33 #53
Hvis Antal dage < 14 og Beløb < 3000 ganges med 1,6
Hvis Antal dage < 14 og Beløb > 4000 ganges med 0,6
Hvis Antal dage = 14 og Beløb < 3000 ganges med 1,6
Hvis Antal dage = 14 og Beløb > 4000 ganges med 0,6

Så hvis beløbet er > 3000 og < 4000 sker der ikke en skid ;-)
Hvis Antal dage er > 14 sker der heller ikke en skid ;-)

Så der skal laves en tilpasning.
Kikke i morgen.
Avatar billede hans.simon22 Juniormester
28. maj 2020 - 23:36 #54
#53 nemlig.

Super. 1000 tak for hjælpen
Avatar billede store-morten Ekspert
29. maj 2020 - 05:56 #55
Sub test()
Dim c As Variant
Dim antalDage As Integer
Dim beløbet As Integer
Dim infonr As Integer

    For Each c In Range("A2:A168").Cells
   
        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
       
        If antalDage < 14 Then
            If beløbet < 3000 Then
                c.Offset(0, 5) = beløbet * infonr * 1.6
            End If
            If beløbet > 4000 Then
                c.Offset(0, 5) = beløbet * infonr * 0.6
            End If
           
            'Hvis beløbet er mellem 3000 og 4000
            If beløbet > 3000 And beløbet < 4000 Then
            c.Offset(0, 5) = 0
            End If
        End If

        If antalDage = 14 Then
            If beløbet < 3000 Then
                c.Offset(0, 5) = beløbet * infonr * 1.6
            End If
            If beløbet > 7000 Then
                c.Offset(0, 5) = beløbet * infonr * 0.6
              End If
        End If
       
            'Hvis antalDage > 14 skrives: 0
            If antalDage > 14 Then
            c.Offset(0, 5) = 0
            End If
   
    Next c
End Sub
Avatar billede hans.simon22 Juniormester
29. maj 2020 - 12:27 #56
#55 den viser debug ved infonr = c.Offset(0, 2)
Avatar billede hans.simon22 Juniormester
29. maj 2020 - 12:36 #57
#55 Hurra, den kører nu.

1000 tak.

kan jeg ikke skrive celle nr.  her i stedet for  fx c.Offset(0, 0). Dermed vil jeg meget derne at beregninger skal indsættes nemlig i Kolonne E2:E168
Da jeg kommer til at indsætte nogle ekstra informationer i kolonne D og H
Avatar billede store-morten Ekspert
29. maj 2020 - 17:16 #58
Fik lige kikket på:
If antalDage = 14 Then

Gør den ikke det samme som:
If antalDage < 14 Then, hvis den ændres til < 15 ?

c.Offset(0, 5) rettet til c.Offset(0, 4) så skriver den i kolonne E.

Tilføjet GoTo Næste, så kører koden hurtigere.
Sub test()
Dim c As Variant
Dim antalDage As Integer
Dim beløbet As Integer
Dim infonr As Integer

    For Each c In Range("A2:A168").Cells
   
        antalDage = c.Offset(0, 0)
        beløbet = c.Offset(0, 1)
        infonr = c.Offset(0, 2)
       
            'Hvis antalDage > 14 skrives: 0
            If antalDage > 14 Then
            c.Offset(0, 4) = 0
            GoTo Næste
            End If
           
            'Hvis beløbet er mellem 3000 og 4000
            If beløbet > 3000 And beløbet < 4000 Then
            c.Offset(0, 4) = 0
            GoTo Næste
            End If
       
        If antalDage < 15 Then
            If beløbet < 3000 Then
                c.Offset(0, 4) = beløbet * infonr * 1.6
            End If
            If beløbet > 4000 Then
                c.Offset(0, 4) = beløbet * infonr * 0.6
            End If
        End If
Næste:
    Next c
End Sub
Avatar billede hans.simon22 Juniormester
29. maj 2020 - 19:04 #59
#58 Super. Den kører nu. Endnu engang 1000 tak
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