- Tham gia
- 18/3/08
- Bài viết
- 8,310
- Được thích
- 15,867
- Giới tính
- Nam
- Nghề nghiệp
- Làm ruộng.
Tôi nhớ không lầm thì giá trị âm dùng để đặt hạt giống cho hàm.Cháu đọc trên goolge thấy bảo là hàm rnd nếu đưa tham số nhận giá trị âm vào thì nó có chức năng giống hàm randomize, mà đến khi chạy thử để test thì nó lại khác nhau, thế là sao hả bác?, có khi nào không cần dùng hàm randomize mà vẫn ngẫu nhiên thật sự không ạ.
Đúng như bác nói luôn.Tôi nhớ không lầm thì giá trị âm dùng để đặt hạt giống cho hàm.
a = Rnd(-2)
b = Rnd(-3)
c = Rnd(-2)
===> a = c, và a <> b
Vào cửa sổ immediate gõ cái này
? Rnd(-1) = Rnd(-1); Rnd(1) = Rnd(1)
Kết quả
True False
Debug.Print Rnd(-10)
Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
0.3276443
0.9140207
0.5095669
0.8464025
0.9029734
Randomize -10
Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
Cái này sách viết rõ lém rồi, cơ mà vẫn sai, tóm lại đẳng cấp của chúng ta không thể hiện qua việc viết tắt. Dùng cái đầu đậu hũ để quan tâm những chuyện trăng sao thì hay hơn, chứ nhớ mấy cái viết tắt này mệt lemsmmmmmmmmmmm.Rất nhiều người thường hay mắc lỗi nhỏ nhưng kết quả lỗi không hề nhỏ về khai báo biến như thế này. Các biến trên khi đọc vào ta nghĩ nó là kiểu Integer, nhưng thực chất chỉ có biến pt mới là kiểu Integer, các biến còn lại là Variant.
View attachment 229751
....
Mã:Randomize -10 Debug.Print Rnd() Debug.Print Rnd() Debug.Print Rnd() Debug.Print Rnd() Debug.Print Rnd()
code này thì nó chạy chằng lần nào giống lần nào, có cái gì đó sai sai hay sao ý ạ.
Sub XUATGT()
Application.ScreenUpdating = False
Dim i&, j&, k&, cc&, lra&, lrb&, pt&
Dim C&, M&, N&
Dim GT As String, KT As Boolean
lra = Cells(Rows.Count, 1).End(xlUp).Row
lrb = WorksheetFunction.CountIf(Range("F9:F" & lra), "x")
pt = lra - Cells(6, 3).Value2 * 2
Columns("H:BB").Delete
Cells(1, 10).Value = lra: Cells(1, 11).Value = lrb: Cells(1, 12).Value = pt
Matrix1: C = 10: GoSub Matrix
Matrix2: C = 11: GoSub Matrix
GoSub Check
Matrix3: C = 16: GoSub Matrix
Matrix4: C = 17: GoSub Matrix
GoSub Check
'Call DINHDANG
Application.ScreenUpdating = False
Exit Sub
Matrix:
For i = 9 To Cells(6, 3) + 8
Do
GT = Range("B9")(Int(Rnd() * ((lrb + 1) - 1) + 1), 1).Value2
KT = False
For M = 3 To 14
For N = 10 To 11
KT = (GT = ThisWorkbook.Worksheets(M).Cells(i, N).Value2) _
Or (GT = ThisWorkbook.Worksheets(M).Cells(i, N + 6).Value2)
If KT Then Exit For
Next N
If KT Then Exit For
Next M
k = 0
For j = 9 To Cells(6, 3) + 8
If (C = 10 And GT = Cells(j, C)) _
Or (C = 11 And (GT = Cells(j, 10).Value2 Or GT = Cells(j, 11).Value2)) _
Or (C = 16 And (GT = Cells(j, 10).Value2 Or GT = Cells(j, 16).Value2)) _
Or (C = 17 And GT = Cells(j, 16).Value2 Or GT = Cells(j, 17).Value2 Or GT = Cells(j, 11).Value2) _
Then k = k + 1
Next j
Loop Until k = 0 And KT = False
If k = 0 Then Cells(i, C).Value = GT
Next i
Return
Check:
For i = 9 To pt
Do
k = 0
GT = Range("B9")(Int(Rnd() * (lra - 7 - 1)) + 1, 1).Value2
For j = 9 To pt + 8
KT = GT = Cells(j, C - 1).Value2 Or GT = Cells(j, C).Value2 Or GT = Cells(j, C + 1).Value2
If KT = True Then k = k + 1
Next j
Loop Until k = 0 And KT = False
If k = 0 Then Cells(i, C + 1).Value = GT
Next i
Return
End Sub