Tạo dãy số ngẫu nhiên (6 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tran Mui

Thành viên thường trực
Tham gia
29/12/07
Bài viết
237
Được thích
56
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
 

File đính kèm

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.
 

File đính kèm

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.
 
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ưng em thấy chủ topic có nói gì đến so sánh sum giữa các cột đau anh nhỉ ?

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

Bạn dùng thử macro này:
PHP:
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

Chủ đề này đã có trên diễn đàn:
http://www.giaiphapexcel.com/forum/showthread.php?27286-Tạo-dãy-số-ngẫu-nhiên-không-trùng
Lý ra bạn theo đó cũng có thể áp dụng được
Ví dụ:
Mã:
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
Assign Macro nút nhấn của bạn với Sub Main rồi nhấn nút 1 phát thử
--------------------------------------
Bạn dùng thử macro này:
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ôn
 
Lần chỉnh sửa cuối:
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.......
 
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.......

Hướng dẫn bạn cách đơn giản nhất:
- Quét chọn A2:A50
- Bấm tổ hợp phím Ctrl + Shift + @
- Xong, gõ vào cell A2 công thức =RANDBETWEEN(28800,32400)/86400
- Kéo fill công thức ở A2 xuống đến A50
Xong
 
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.

Bác ơi cho em hỏi khi e dùng cái bảng của bác làm thì vẫn có giá trị "0". Em muốn giá trị từ 1 trở lên thì làm thế nào ạ. Mong bác hướng dẫn giúp em với ạ. Em đang cần quá
 
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.

Em đã làm được tuy nhiên là các số cùng hàng lại có trường hợp bị trùng nhau. Làm sao để các số này không trung nhau trong một hàng ạ
 
Web KT

Bài viết mới nhất

Back
Top Bottom