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