hoangtuaotrang_hp_vn
Thành viên tích cực
- Tham gia
- 17/5/09
- Bài viết
- 973
- Được thích
- 846
Cám ơn bác, kết quả đúng hết rồi a,Làm đại bằng VBA, dù chưa hiểu lắm.
Nhấn nút RUN để ra kết quả.
Cách làm của mình như sau:PHP:Option Explicit Sub golf() Dim i&, j&, t&, rng, sum&, dic As Object, index, score, myScore&, res(), id As String Set dic = CreateObject("Scripting.Dictionary") index = Range("C4:T4").Value score = Range("B7:V10").Value For i = 1 To UBound(score) For j = 1 To UBound(score) id = score(i, 1) & "|" & score(j, 1) If Not dic.exists(id) Then dic.Add id, Round((score(j, 21) - score(i, 21)) * 0.7, 0) End If Next Next ReDim res(1 To UBound(score), 1 To 18) For j = 2 To 19 For i = 1 To UBound(score) myScore = score(i, j): sum = 0 For t = 1 To UBound(score) If i <> t Then If score(t, j) < myScore Then sum = sum + 1 ElseIf score(t, j) > myScore Then sum = sum - 1 Else id = score(i, 1) & "|" & score(t, 1) If index(1, j - 1) <= Abs(dic(id)) Then sum = sum + IIf(dic(id) < 0, 1, -1) End If End If Next res(i, j - 1) = sum Next Next Range("C12").Resize(UBound(res), 18).Value = res End Sub
1- Tạo dictionary để lưu trữ handicap, ví dụ:
Key: Player1 | Player2
Item: -6
Hiểu là giá trị index là <=6 thì áp dụng Player1 được chấp bởi Player2 (item <0)
Nếu là +6 thì ngược lại: Player1 chấp Player2
2- Code sẽ duyệt từng cột từ 1 tới 18
Trong từng cột, 1 player (myScore) sẽ lần lượt so sánh với các player còn lại (Score(t,j)):
Nếu mScore lớn hơn: sum = sum +1
Nếu nhỏ hơn: sum = sum-1
Nếu bằng: So sánh handicap
Nếu kết quả sai thì bạn tô màu ô đó, ghi chú kết quả muốn có và giải thích nhé.
Xin lỗi bác lỗi đánh máy ạ player 2 trả cho player 1 ạ chứ ko phải player 3Trích: "player 1 đánh 0 gậy và player 2 đánh 3 gậy ( giả sử có 1 sẹo phạt) thì player 3 trả cho player 2 là 3 skin..."
Hỏi:
Player 3 ở đâu vào trả tiền cho player 2? Và player 1 và player 2 ai hơn ai?
Bạn ơi cho mình hỏi nếu chỉ có 3 người chơi và 2 người chơi thì code trên cần sửa đoạn nào nhỉ?Làm đại bằng VBA, dù chưa hiểu lắm.
Nhấn nút RUN để ra kết quả.
Cách làm của mình như sau:PHP:Option Explicit Sub golf() Dim i&, j&, t&, rng, sum&, dic As Object, index, score, myScore&, res(), id As String Set dic = CreateObject("Scripting.Dictionary") index = Range("C4:T4").Value score = Range("B7:V10").Value For i = 1 To UBound(score) For j = 1 To UBound(score) id = score(i, 1) & "|" & score(j, 1) If Not dic.exists(id) Then dic.Add id, Round((score(j, 21) - score(i, 21)) * 0.7, 0) End If Next Next ReDim res(1 To UBound(score), 1 To 18) For j = 2 To 19 For i = 1 To UBound(score) myScore = score(i, j): sum = 0 For t = 1 To UBound(score) If i <> t Then If score(t, j) < myScore Then sum = sum + 1 ElseIf score(t, j) > myScore Then sum = sum - 1 Else id = score(i, 1) & "|" & score(t, 1) If index(1, j - 1) <= Abs(dic(id)) Then sum = sum + IIf(dic(id) < 0, 1, -1) End If End If Next res(i, j - 1) = sum Next Next Range("C12").Resize(UBound(res), 18).Value = res End Sub
1- Tạo dictionary để lưu trữ handicap, ví dụ:
Key: Player1 | Player2
Item: -6
Hiểu là giá trị index là <=6 thì áp dụng Player1 được chấp bởi Player2 (item <0)
Nếu là +6 thì ngược lại: Player1 chấp Player2
2- Code sẽ duyệt từng cột từ 1 tới 18
Trong từng cột, 1 player (myScore) sẽ lần lượt so sánh với các player còn lại (Score(t,j)):
Nếu mScore lớn hơn: sum = sum +1
Nếu nhỏ hơn: sum = sum-1
Nếu bằng: So sánh handicap
Nếu kết quả sai thì bạn tô màu ô đó, ghi chú kết quả muốn có và giải thích nhé.
Gửi lại file mới đi bạnBạn ơi cho mình hỏi nếu chỉ có 3 người chơi và 2 người chơi thì code trên cần sửa đoạn nào nhỉ?
Thanks bạn
nó vẫn vậy bạn à chỉ là nếu có 3 người so 3 người với nhau và có 2 người thì so 2 người với nhau, nếu cái code nó chung được cho cả 3 trường hợp chơi 4 người, chơi 3 người và chơi 2 người được thì tốt thanks bạnGửi lại file mới đi bạn
Bạn hướng dẫn mình cách chạy VBA với, mình tải về nhưng báo lỗi macro. Mình không rành lắm, cảm ơn bạn nhiều. File này mình rất cần bạn ạ.nó vẫn vậy bạn à chỉ là nếu có 3 người so 3 người với nhau và có 2 người thì so 2 người với nhau, nếu cái code nó chung được cho cả 3 trường hợp chơi 4 người, chơi 3 người và chơi 2 người được thì tốt thanks bạn
bác làm được chưa bác, giờ mà có giải pháp chơi everthing thì ngon bác nhỉ. ngồi ăn tổng kết thì quá tuyệt vờiEm đang nghĩ công thức cách tính điểm hố golf tự động cho người chơi khi nhập điểm mà nó hơi vượt quá khả năng mình ( cột màu cam em đã làm mẫu tay 3 hố đầu) , trong file excel em đã giải thích quy tắc tính, bác nào biết chơi golf thì hiểu ngay nhưng ai chưa chơi thì hơi khó hiểu chút. Mong các bác giúp thanks.