Avatar billede mercu Nybegynder
29. november 2009 - 20:14 Der er 1 kommentar og
1 løsning

Løbende "summer" ?

Jeg har følgende kode og den kører fint, jeg får udskrevet pointene fra den enkelte runde og det passer fint.

Jeg vil dog gerne have den til at lave "løbende" summer således pointene hele tiden bliver lagt sammen.

fx. runde 3 = Point runde 1 + runde 2 + runde 3.

Koden er som følger:

Option Explicit


Public Sub obl4()

Dim rngStil As Range
Dim rngKamp As Range
Dim AntalHold As Integer
Dim i As Integer
Dim resultat As String, stregpos As String, HjmHoldMål As Integer, UdeHoldMål As Integer
Dim j As Integer
Dim runde As Integer
Dim hold_check As Boolean

Worksheets.Add().Name = "still"


Set rngStil = Worksheets("still").Range("A4")

Set rngKamp = ThisWorkbook.Worksheets("kampprogram").Range("A4").CurrentRegion

    'Kopier komplet holdliste til stillingsarket
    rngKamp.Columns(6).Copy 'Destination:=rngStil.Cells(1, 2)
    rngStil.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
    rngStil.Cells(1, 1).CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
   
'Find antal hold i ligaen - fratrækker én pga. overskriftsrække
    AntalHold = rngStil.Cells(1, 2).CurrentRegion.Rows.Count - 1
   

'Der loopes over alle kampene
    For i = 2 To rngKamp.Rows.Count
   
        'Hvis der ikke er flere resultater afbrydes for-løkken
        If rngKamp.Cells(i, 9) = "" Then Exit For
       
        'Indlæs resultat, find "-", indlæs mål for og i mod
        resultat = rngKamp.Cells(i, 9).Value
        stregpos = InStr(resultat, "-")
        HjmHoldMål = CInt(Left(resultat, stregpos - 1))
        UdeHoldMål = CInt(Right(resultat, Len(resultat) - stregpos))

        'Der loopes over alle holdene i stillingen
        For j = 1 To AntalHold
        hold_check = False
        If rngStil.Cells(j + 1, 1) = rngKamp.Cells(i, 6) Then hold_check = True
       
        If hold_check = True Then runde = CInt(rngKamp.Cells(i, 2).Value)
       
        If hold_check = True And HjmHoldMål > UdeHoldMål Then rngStil.Cells(j + 1, runde + 1).Value = 3
       
      If hold_check = True And HjmHoldMål = UdeHoldMål Then rngStil.Cells(j + 1, runde + 1).Value = 1
       
        If hold_check = True And HjmHoldMål < UdeHoldMål Then rngStil.Cells(j + 1, runde + 1).Value = 0

       
        'Næste hold i stillingstabellen
        Next j
   
    'Næste kamp i kampoversigten
    Next
   
' jeg gør det samme for udeholdet
   
    For i = 2 To rngKamp.Rows.Count
 
        'Hvis der ikke er flere resultater afbrydes for-løkken
        If rngKamp.Cells(i, 9) = "" Then Exit For
       
        'Indlæs resultat, find "-", indlæs mål for og i mod
        resultat = rngKamp.Cells(i, 9).Value
        stregpos = InStr(resultat, "-")
        HjmHoldMål = Int(Left(resultat, stregpos - 1))
        UdeHoldMål = Int(Right(resultat, Len(resultat) - stregpos))

        'Der loopes over alle holdene i stillingen
        For j = 1 To AntalHold
        hold_check = False
        'udeholdet
        If rngStil.Cells(j + 1, 1) = rngKamp.Cells(i, 7) Then hold_check = True
   
       
        If hold_check = True Then runde = CInt(rngKamp.Cells(i, 2).Value)
       
        If hold_check = True And HjmHoldMål > UdeHoldMål Then rngStil.Cells(j + 1, runde + 1).Value = 0
       
      If hold_check = True And HjmHoldMål = UdeHoldMål Then rngStil.Cells(j + 1, runde + 1).Value = 1
       
        If hold_check = True And HjmHoldMål < UdeHoldMål Then rngStil.Cells(j + 1, runde + 1).Value = 3
       
       
        'Næste hold i stillingstabellen
        Next j
   
    'Næste kamp i kampoversigten
    Next i




End Sub



   
    '
Avatar billede mercu Nybegynder
29. november 2009 - 20:54 #1
Jeg har ændret kodenn lidt således der kommer en runde 0 med også. Dette burde gøre det lettere at bruge R1C1 til at finde summerne løbende? - hvis jeg har ret?

Option Explicit


Public Sub obl4()

Dim rngStil As Range
Dim rngKamp As Range
Dim AntalHold As Integer
Dim i As Integer
Dim resultat As String, stregpos As String, HjmHoldMål As Integer, UdeHoldMål As Integer
Dim j As Integer, k As Integer, l As Integer
Dim runde As Integer
Dim hold_check As Boolean

'slå advsarsler fra
Application.DisplayAlerts = False
On Error Resume Next

'sletter arket still hvis det skulle være der
Sheets("still").Delete
'slå advarsler til
Application.DisplayAlerts = True
On Error GoTo 0
'tilføjer det ny ark
Sheets.Add().Name = "still"


Set rngStil = Worksheets("still").Range("A4")

Set rngKamp = ThisWorkbook.Worksheets("kampprogram").Range("A4").CurrentRegion

    'Kopier komplet holdliste til stillingsarket
    rngKamp.Columns(6).Copy 'Destination:=rngStil.Cells(1, 2)
    rngStil.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
    rngStil.Cells(1, 1).CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
   
'Find antal hold i ligaen - fratrækker én pga. overskriftsrække
    AntalHold = rngStil.Cells(1, 2).CurrentRegion.Rows.Count - 1
   
   
   
    For k = 1 To AntalHold
rngStil.Offset(k, 1).Value = 0
   

'Der loopes over alle kampene
    For i = 2 To rngKamp.Rows.Count
   
        'Hvis der ikke er flere resultater afbrydes for-løkken
        If rngKamp.Cells(i, 9) = "" Then Exit For
       
        'Indlæs resultat, find "-", indlæs mål for og i mod
        resultat = rngKamp.Cells(i, 9).Value
        stregpos = InStr(resultat, "-")
        HjmHoldMål = CInt(Left(resultat, stregpos - 1))
        UdeHoldMål = CInt(Right(resultat, Len(resultat) - stregpos))

        'Der loopes over alle holdene i stillingen
        For j = 1 To AntalHold
        hold_check = False
        If rngStil.Cells(j + 1, 1) = rngKamp.Cells(i, 6) Then hold_check = True
       
        If hold_check = True Then runde = CInt(rngKamp.Cells(i, 2).Value)
       
        If hold_check = True And HjmHoldMål > UdeHoldMål Then rngStil.Cells(j + 1, runde + 2).Value = 3
       
      If hold_check = True And HjmHoldMål = UdeHoldMål Then rngStil.Cells(j + 1, runde + 2).Value = 1
       
        If hold_check = True And HjmHoldMål < UdeHoldMål Then rngStil.Cells(j + 1, runde + 2).Value = 0

       
        'Næste hold i stillingstabellen
        Next j
   
    'Næste kamp i kampoversigten
    Next
   
' jeg gør det samme for udeholdet
   
    For i = 2 To rngKamp.Rows.Count
 
        'Hvis der ikke er flere resultater afbrydes for-løkken
        If rngKamp.Cells(i, 9) = "" Then Exit For
       
        'Indlæs resultat, find "-", indlæs mål for og i mod
        resultat = rngKamp.Cells(i, 9).Value
        stregpos = InStr(resultat, "-")
        HjmHoldMål = Int(Left(resultat, stregpos - 1))
        UdeHoldMål = Int(Right(resultat, Len(resultat) - stregpos))

        'Der loopes over alle holdene i stillingen
        For j = 1 To AntalHold
        hold_check = False
        'udeholdet
        If rngStil.Cells(j + 1, 1) = rngKamp.Cells(i, 7) Then hold_check = True
   
        If hold_check = True Then runde = CInt(rngKamp.Cells(i, 2).Value)
       
        If hold_check = True And HjmHoldMål > UdeHoldMål Then rngStil.Cells(j + 1, runde + 2).Value = 0
       
      If hold_check = True And HjmHoldMål = UdeHoldMål Then rngStil.Cells(j + 1, runde + 2).Value = 1
       
        If hold_check = True And HjmHoldMål < UdeHoldMål Then rngStil.Cells(j + 1, runde + 2).Value = 3
       
       
        'Næste hold i stillingstabellen
        Next j
   
    'Næste kamp i kampoversigten
    Next i


For l = 0 To runde
rngStil.Offset(0, l + 1).Value = "runde " & l
Next


Next

End Sub
Avatar billede mercu Nybegynder
29. november 2009 - 21:31 #2
Problemet er nu løst.
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
Kurser inden for grundlæggende programmering

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