Avatar billede birkus Nybegynder
01. februar 2009 - 14:32 Der er 9 kommentarer og
1 løsning

Simplificere kode

Jeg vil bare lige høre om man kan simplificere denne kode:

    j = 2
    Do Until IsEmpty(Cells(j, 1))
        If Cells(j, 1) = "DK10" And _
          Cells(j, 8) = "KG" Then
        DK103md = DK103md + Cells(j, 11)
        ElseIf Cells(j, 1) = "DK10" And _
          Cells(j, 8) = "KA" Then
        DK103md = DK103md + Cells(j, 11)
        ElseIf Cells(j, 1) = "DK10" And _
          Cells(j, 8) = "KR" Then
        DK103md = DK103md + Cells(j, 11)
        ElseIf Cells(j, 1) = "DK10" And _
          Cells(j, 8) = "RE" Then
        DK103md = DK103md + Cells(j, 11)
        ElseIf Cells(j, 1) = "DK10" And _
          Cells(j, 8) = "YG" Then
        DK103md = DK103md + Cells(j, 11)
        ElseIf Cells(j, 1) = "DK10" And _
          Cells(j, 8) = "YR" Then
        DK103md = DK103md + Cells(j, 11)
        End If
       
    j = j + 1
    Loop

Kan man putte noge "or" ind et eller andet sted, så jeg ikke behøver så mange linier kode?

Jeg skal bruge det til at løbe et ark igennem og finde linier der indeholder "DK10" i kolonne 1, "KG","KR","KA","RE","YG" eller "YR" i kolonne 8 og så sammenlægge værdierne fra kolonne 11.

Burde jeg måske istedet lave det som et Case statement?
Avatar billede excelent Ekspert
01. februar 2009 - 15:24 #1
Hvad med en formel ?

=SUMPRODUKT((A2:A30="DK10")*(H2:H30={"KG";"KR";"KA";"RE";"YG";"YR"})*(K2:K30))
Avatar billede birkus Nybegynder
01. februar 2009 - 15:34 #2
Tjaa. hvorfor ikke.
Det prøver jeg lige.
Avatar billede excelent Ekspert
01. februar 2009 - 15:42 #3
ellers måske
rk = Cells(1000, 1).End(xlUp).Row
For t = 2 To rk
c = Cells(t, 8).Value
If Cells(t, 1).Value = "DK10" Then
If c = "KG" Or c = "KA" Or c = "KR" Or c = "RE" Or c = "YG" Or c = "YR" Then
DK103md = DK103md + Cells(t, 11)
End If
End If
Next
Avatar billede birkus Nybegynder
01. februar 2009 - 15:48 #4
Jeg kan desværre ikke få det til at gøre som jeg gerne vil.
Jeg tror ikke =sumprodukt er vejen frem.
Avatar billede birkus Nybegynder
01. februar 2009 - 15:51 #5
Ja jeg tror 2. forslag er bedre.
Det tester jeg lige :o)
Avatar billede excelent Ekspert
01. februar 2009 - 15:55 #6
Vær opmærksom på at formlen kun virker i række 2 til 30
ret til aktuel
Avatar billede birkus Nybegynder
01. februar 2009 - 16:02 #7
Hvilke Dimmensioneringer har vil du lave til:
rk, c og t ?
Avatar billede excelent Ekspert
01. februar 2009 - 16:08 #8
dim rk,c,t
Avatar billede birkus Nybegynder
01. februar 2009 - 16:13 #9
Det lykkedes for mig.
Koden hedder nu:

Sub test()

Dim dk103md As Double
Dim j As Integer
Dim c As String

    j = 2
    Do Until IsEmpty(Cells(j, 1))
       
        c = Cells(j, 8).Value
   
        If Cells(j, 1).Value = "DK10" Then
        If c = "KG" Or c = "KA" Or c = "KR" Or c = "RE" Or c = "YG" Or c = "YR" Then
        dk103md = dk103md + Cells(j, 11)
       
        End If
        End If
    j = j + 1
    Loop

End Sub

Laver du et "svar", så jeg kan give dig point?
Avatar billede excelent Ekspert
01. februar 2009 - 16:15 #10
ok
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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