Avatar billede HHA Professor
15. maj 2023 - 20:28 Der er 6 kommentarer

If spørgsmål

Hejsa,

Har nedenstående kode.
Det jeg søger er at hvis kolonne J bliver hævet med mere end 350 ift. kolonne E, så skal den sættes til værdien af kolonne E + 350.
Har kredset den ind nederst med en stribe x'er
Nogen som kan hjælpe mig her?


Sub Makro1()

        Dim LR1 As Long

    Application.ScreenUpdating = False
    Set ws1 = Sheets("Ark1")
    LR1 = ws1.Range("F" & Rows.Count).End(xlUp).Row
    For i = 1 To LR1
        If ws1.Range("F" & i).Value > 0 And ws1.Range("F" & i).Value <> ws1.Range("E" & i).Value Then
            Range("H" & i) = Range("E" & i) * 1.1
            Range("J" & i) = Range("E" & i) * 1.1
            Range("L" & i) = Range("F" & i)
            Range("N" & i) = Range("F" & i)
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
    Else
        If Range("E" & i) = Range("F" & i) Then
            If Range("E" & i) > 10000 Then
            Range("F" & i) = Range("E" & i) * 1.2
            Range("H" & i) = Range("E" & i) * 1.1
            Range("J" & i) = Range("E" & i) * 1.1
            Range("L" & i) = Range("E" & i) * 1.2
            Range("N" & i) = Range("E" & i) * 1.2
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
     
            If Range("E" & i) > 2500 Then
            Range("F" & i) = Range("E" & i) * 1.5
            Range("H" & i) = Range("E" & i) * 1.1
            Range("J" & i) = Range("E" & i) * 1.1
            Range("L" & i) = Range("E" & i) * 1.5
            Range("N" & i) = Range("E" & i) * 1.5
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
     
            If Range("E" & i) > 1000 Then
            Range("F" & i) = Range("E" & i) * 2
            Range("H" & i) = Range("E" & i) * 1.1
            Range("J" & i) = Range("E" & i) * 1.1
            Range("L" & i) = Range("E" & i) * 2
            Range("N" & i) = Range("E" & i) * 2
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
     
            If Range("E" & i) >= 0 Then
            Range("F" & i) = Range("E" & i) * 3
            Range("H" & i) = Range("E" & i) * 1.1
            Range("J" & i) = Range("E" & i) * 1.1
            Range("L" & i) = Range("E" & i) * 3
            Range("N" & i) = Range("E" & i) * 3
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            If Range("J" & i) > Range("E" & i + 350) Then
            Range("J" & i) = Range("E" & i + 350)
            GoTo Fortsæt
            End If
        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
        End If
    End If
Fortsæt:
    Next
    Application.ScreenUpdating = True
    MsgBox "Færdig!"
   
End Sub
Avatar billede jens48 Ekspert
15. maj 2023 - 20:46 #1
Du skal vel blot sætte de 350 udenfor parentesen? Altså:

If Range("J" & i) > Range("E" & i) + 350 Then
            Range("J" & i) = Range("E" & i) + 350
            GoTo Fortsæt
            End If
Avatar billede HHA Professor
15. maj 2023 - 21:12 #2
Ja, selvfølgelig...
Men det løser ikke problemet.
Den bliver ved med at ligge 10% eller gange 1.1 til.
og ikke max 350, hvis 10% eller gange 1.1 hvis det overstiger E + 350

Er det hvor det ligges ind i koden?

If Range("J" & i) > Range("E" & i) + 350 Then
            Range("J" & i) = Range("E" & i) + 350
            GoTo Fortsæt
            End If
Avatar billede ebea Ekspert
15. maj 2023 - 23:01 #3
#2 - Du har jo sat alle "J" tallene til at blive ganget med 1.1 så det vil de jo blive, uanset hvad du har af betingelser i dine IF opsætninger.
Du løber jo betingelser igennem, efter hvor højt beløbet skal/kan være, og der får du beregnet beløbet efter, som du har i IF betingelsen, og ikke hvad du har i din sidste IF betingelse (indkredset med xxxxxxx).
Avatar billede claes57 Ekspert
16. maj 2023 - 07:19 #4
du har 5 linjer med
Range("J" & i) = Range("E" & i) * 1.1

de skal alle rettes til
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If

og så skal rutinen mellem xxxxxxxxxxxx helt væk
Avatar billede HHA Professor
16. maj 2023 - 07:48 #5
Hejsa,
#3 det har du ret i, jeg søger også en løsning på det.
#4 Det hjælper en del. Har nu dette stående de 5 steder, som du sagde.
Men for at den regner rigtigt, altså det med de max 350, så skal jeg køre VBA 2 gange......

Nogen ide til det?

If Range("E" & i) >= 0 Then
            Range("F" & i) = Range("E" & i) * 3
            Range("H" & i) = Range("E" & i) * 1.1
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If
            Range("L" & i) = Range("E" & i) * 3
            Range("N" & i) = Range("E" & i) * 3
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
Avatar billede HHA Professor
16. maj 2023 - 09:36 #6
Eller rettere. den regner rigtigt hver anden gang VBA kører.
Har bemærket at det er hvis jeg skriver fx 10001, 8000 i kolonne E, så laver den en regnefejl hver anden gang, jeg kører koden.
Det er sgu da mærkeligt.

Har denne formel nu:
Set ws1 = Sheets("Ark1")
    LR1 = ws1.Range("F" & Rows.Count).End(xlUp).Row
    For i = 1 To LR1
        If ws1.Range("F" & i).Value > 0 And ws1.Range("F" & i).Value <> ws1.Range("E" & i).Value Then
            Range("H" & i) = Range("E" & i) * 1.1
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If
            Range("L" & i) = Range("F" & i)
            Range("N" & i) = Range("F" & i)
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
    Else
        If Range("E" & i) = Range("F" & i) Then
            If Range("E" & i) > 10000 Then
            Range("F" & i) = Range("E" & i) * 1.2
            Range("H" & i) = Range("E" & i) * 1.1
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If
            Range("L" & i) = Range("E" & i) * 1.2
            Range("N" & i) = Range("E" & i) * 1.2
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
     
            If Range("E" & i) > 2500 Then
            Range("F" & i) = Range("E" & i) * 1.5
            Range("H" & i) = Range("E" & i) * 1.1
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If
            Range("L" & i) = Range("E" & i) * 1.5
            Range("N" & i) = Range("E" & i) * 1.5
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
     
            If Range("E" & i) > 1000 Then
            Range("F" & i) = Range("E" & i) * 2
            Range("H" & i) = Range("E" & i) * 1.1
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If
            Range("L" & i) = Range("E" & i) * 2
            Range("N" & i) = Range("E" & i) * 2
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
     
            If Range("E" & i) >= 0 Then
            Range("F" & i) = Range("E" & i) * 3
            Range("H" & i) = Range("E" & i) * 1.1
            If Range("J" & i) > Range("E" & i) + 350 Then
              Range("J" & i) = Range("E" & i) + 350
            Else
              Range("J" & i) = Range("E" & i) * 1.1
            End If
            Range("L" & i) = Range("E" & i) * 3
            Range("N" & i) = Range("E" & i) * 3
            ws1.Range("I" & i).Value = "DKK"
            ws1.Range("K" & i).Value = "DKK"
            ws1.Range("M" & i).Value = "DKK"
            ws1.Range("O" & i).Value = "DKK"
            GoTo Fortsæt
            End If
                   
        End If
    End If
Fortsæt:
    Next
    Application.ScreenUpdating = True
    MsgBox "Færdig!"
   
End Sub


Kan den laves enklere med noget så som?
Ved bare ikke lige hvordan den skal kodes ind.....

If Range("E" & i) > 3500 Then
            Range("J" & i) = Range("E" & i) + 350
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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