Tôi cần một dãy số ngẫu nhiên trên các cột, khi cho số cuối cùng.
Nhấn nút tạo dãy số sẽ cho 8 cột, sắp xếp ngẫu nhiên từ các số đã có theo ban đầu
Nhờ các bạn chỉ giúp
File mô tả đính kèm
xin cám ơn
Macro thì mình mình không biết, nhưng theo mình bài này cũng có thể làm bằng công thức. Bạn thử tham khảo file đính kèm xem sao nhé. Nhấn F9 để thấy sự biến đổi.
Làm vậy đâu được. Bạn thử cộng sum mỗi cột xem chúng có bằng nhau không.
Nhờ các bạn giúp tôi như sau:
Khi tôi nhập vào ô C2 một số, thì cột từ A5, trở đi sẽ đánh số thứ tự từ 1 đến số cuối đã nhập ở C2.
Cùng lúc đó từ B5 trở đi sẽ ghi lại số thứ tự này ( Như tôi đã làm )
Các bạn giúp tôi tạo macro cho nút tao day so ngau nhien để các cột lần 1 đến 8, sắp xếp ngẫu nhiên cột từ B5 đến hết, mỗi lần đều khác nhau,
Xin cám ơn
Tôi ghi ví dụ lần 1 và lần 2 để các bạn hiểu ý nhé
Bạn Nhung ơi HuuThang nói đúng rồi, động tác cộng là để kiểm tra các số trong cột từ B5 đến hết đó. Tôi muốn đâỏ ngẫu nhiên các số đã chấp nhận trong cột B5 đến hết mà
Sub Test()
Dim Num As Long, Arr() As Double, RArr() As Long, i As Long, j As Long, k As Long, Tmp As Double
Num = [C2].Value
ReDim Arr(1 To Num, 1 To 1)
ReDim RArr(1 To Num, 1 To 1)
Application.ScreenUpdating = False
With [A4].CurrentRegion.Offset(1)
.Resize(, 1).ClearContents
.Offset(, 2).Resize(, 8).ClearContents
End With
For i = 1 To 8
Randomize
For j = 1 To Num
Arr(j, 1) = Rnd()
RArr(j, 1) = j
Next
If i = 1 Then [A5].Resize(Num).Value = RArr
For j = 1 To Num - 1
For k = j + 1 To Num
If Arr(j, 1) > Arr(k, 1) Then
Tmp = Arr(k, 1): Arr(k, 1) = Arr(j, 1): Arr(j, 1) = Tmp
Tmp = RArr(k, 1): RArr(k, 1) = RArr(j, 1): RArr(j, 1) = Tmp
End If
Next
Next
Cells(5, 2 + i).Resize(Num).Value = RArr
Next
Application.ScreenUpdating = True
End Sub
Tôi cần một dãy số ngẫu nhiên trên các cột, khi cho số cuối cùng.
Nhấn nút tạo dãy số sẽ cho 8 cột, sắp xếp ngẫu nhiên từ các số đã có theo ban đầu
Nhờ các bạn chỉ giúp
File mô tả đính kèm
xin cám ơn
Function UniqueRandomNum(Bottom As Long, Top As Long, Amount As Long)
Dim tmp As Long, Arr(), n As Long
If Amount > Top - Bottom + 1 Then Amount = Top - Bottom + 1
ReDim Arr(1 To Amount, 1 To 1)
Randomize
With CreateObject("Scripting.Dictionary")
Do
tmp = Int(Rnd() * (Top - Bottom + 1)) + Bottom
If Not .Exists(tmp) Then
n = n + 1
.Add tmp, n
Arr(n, 1) = tmp
End If
Loop Until .Count = Amount
UniqueRandomNum = Arr
End With
End Function
Sub Main()
Dim Top As Long, i As Long
Dim aRnd
With Sheet1
On Error Resume Next
Top = .Range("C2").Value
On Error GoTo 0
If Top > 0 Then
.Range("A5:J10000").ClearContents
.Range("A5:B5").Resize(Top).Value = Evaluate("ROW(A:A)")
For i = 1 To 8
aRnd = UniqueRandomNum(1, Top, Top)
.Range("C5").Offset(, i - 1).Resize(Top).Value = aRnd
Next
End If
End With
End Sub
Code này chậm lắm Thắng ơi. Gõ vào C2 số 5000 rồi nhấn nút 1 phát ---> Chờ mệt mỏi luônBạn dùng thử macro này:
Các cao thủ giúp em giải bài toán này với ạ, tạo một dãy thời gian ngẫu nhiên không được trùng lắp hoặc trùng lắp không nhiều trải trên cột A (từ A2 đến A50), sao cho dữ liệu trong mỗi cell là dữ liệu kiểu thời gian dạng hh:mm và giá trị trong khoảng từ 8h00 đến 9h00. Kiểu như này ạ A1-8h00, A2:8h03, A3:8h09.......
Macro thì mình mình không biết, nhưng theo mình bài này cũng có thể làm bằng công thức. Bạn thử tham khảo file đính kèm xem sao nhé. Nhấn F9 để thấy sự biến đổi.
Macro thì mình mình không biết, nhưng theo mình bài này cũng có thể làm bằng công thức. Bạn thử tham khảo file đính kèm xem sao nhé. Nhấn F9 để thấy sự biến đổi.