Bạn dùng hàm sau:Giả sử tôi có danh sách học sinh (B2:B30), ở ô C1 tôi muốn chọn ngẫu nhiên tên học sinh có trong danh sách đó được không? Đại khái như là phải trả bài ngày hôm đó. Rất mong mọi người giúp đỡ.
Rất cảm ơn!
=INDEX($B$2:$B$17,INT(RAND()*16)+1)
Bạn sử dụng Index() kết hợp với hàm Rand(). Xem cách dùng trong file nha.Giả sử tôi có danh sách học sinh (B2:B30), ở ô C1 tôi muốn chọn ngẫu nhiên tên học sinh có trong danh sách đó được không? Đại khái như là phải trả bài ngày hôm đó. Rất mong mọi người giúp đỡ.
Rất cảm ơn!
Đương nhiên là được! Giả sử bạn có 1 danh sách đặt tại A1:A30 (tức 30 phần tử)... Để lấy ra 1 danh sách ngẫu nhiên 10 phần tử từ danh sách trên thì giải thuật sẽ thế này:Hi,
Theo chủ đề này thì cho em hỏi, nếu phải lấy danh sách ngẫu nhiên từ 1 danh sách thì làm thế nào?
Thanks
Đương nhiên là được! Giả sử bạn có 1 danh sách đặt tại A1:A30 (tức 30 phần tử)... Để lấy ra 1 danh sách ngẫu nhiên 10 phần tử từ danh sách trên thì giải thuật sẽ thế này:
- Tạo 10 số ngẫu nhiên không trùng từ 1 đến 30 (tạm gọi là số thứ tự)
- Dùng hàm INDEX, lọc trong danh sách 30 phần tử theo chỉ số dòng chính là số thứ tự vừa tìm
----------------
Về việc tạo dãy số ngẫu nhiên không trùng ta dùng lập trình VBA đề tạo! Xem chi tiết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?27286-Tạo-dãy-số-ngẫu-nhiên-không-trùng
Giờ tôi làm thử cho bạn 1 file như yêu cầu (lấy 10 người ngẫu nhiên trong danh sách 30 người) ---> Xem thế nào nhé
Dữ liệu của bạn bố trí theo kiểu khác nên có lẽ phải viết cho bạn 1 hàm để phục vụ riêngEm đã đọc theo link kia rồi, nhưng do trình kém nên hok hiểu...nếu như file của em thế này thì bốc ra 10 số bất kỳ cho giải nhất, 10 số bất kỳ cho giải nhì thì làm sao anh nhỉ?
Function GetRngList(SourceRange As Range, Amount As Long)
Dim TmpArr, Tmp, Item, ul As New Collection, n As Long
Application.Volatile '<--- Neu muon ket qua thay doi khi bam F9
TmpArr = SourceRange.Value
GetRngList = ""
Set ul = New Collection
On Error Resume Next
If Amount > SourceRange.Count Then Amount = SourceRange.Count
With CreateObject("Scripting.Dictionary")
For Each Item In TmpArr
If Not IsEmpty(Item) Then ul.Add Item, CStr(Item)
Next
If ul.Count = 0 Then Exit Function
If Amount > ul.Count Then Amount = ul.Count
Do
n = Int(Rnd() * ul.Count) + 1
Tmp = ul.Item(n)
If Not .Exists(Tmp) Then .Add Tmp, ""
Loop Until .Count = Amount
GetRngList = WorksheetFunction.Transpose(.Keys)
End With
End Function
Dữ liệu của bạn bố trí theo kiểu khác nên có lẽ phải viết cho bạn 1 hàm để phục vụ riêng
Xem filePHP:Function GetRngList(SourceRange As Range, Amount As Long) Dim TmpArr, Tmp, Item, ul As New Collection, n As Long Application.Volatile '<--- Neu muon ket qua thay doi khi bam F9 TmpArr = SourceRange.Value GetRngList = "" Set ul = New Collection On Error Resume Next If Amount > SourceRange.Count Then Amount = SourceRange.Count With CreateObject("Scripting.Dictionary") For Each Item In TmpArr If Not IsEmpty(Item) Then ul.Add Item, CStr(Item) Next If ul.Count = 0 Then Exit Function If Amount > ul.Count Then Amount = ul.Count Do n = Int(Rnd() * ul.Count) + 1 Tmp = ul.Item(n) If Not .Exists(Tmp) Then .Add Tmp, "" Loop Until .Count = Amount GetRngList = WorksheetFunction.Transpose(.Keys) End With End Function
Trong file bạn có tí code nào đâu mà chẳng lỗi #NAME! chứtại sao em lam giống vậy thì bị lỗi "#Name?" ?
Trong file bạn có tí code nào đâu mà chẳng lỗi #NAME! chứ
Trong file bạn có tí code nào đâu mà chẳng lỗi #NAME! chứ
Đương nhiên là được rồi ---> Cứ đưa code vào rồi gõ công thức như file cũ thôisao attach file ko dc nhi?
Thế anh ndu96081631 bốc 10 số trong file zip trước em gửi dc hok? tại em cung làm mà bi lỗi mà ko save lai, bay h thì e ko attach file dc.
Function GetRngList(SrcRng As Range, Amount As Long)
Dim Tmp, ul As New Collection, n As Long
Application.Volatile '<--- Neu muon ket qua thay doi khi bam F9
GetRngList = ""
Set ul = New Collection
On Error Resume Next
If Amount > SrcRng.Count Then Amount = SrcRng.Count
With CreateObject("Scripting.Dictionary")
Do
n = Int(Rnd() * SrcRng.Count) + 1
Tmp = SrcRng(n).Value
ul.Add Tmp, SrcRng(n).Address
If Not .Exists(Tmp) And Not IsEmpty(Tmp) Then .Add Tmp, ""
If ul.Count = SrcRng.Count Then Exit Do
Loop Until .Count = Amount
If .Count Then GetRngList = WorksheetFunction.Transpose(.Keys)
End With
End Function
Tôi sửa lại code ở bài trên để cho tốc độ nhanh hơn:
Code này nhanh hơn code cũ ít nhất từ 5 đến 10 lần ---> Với dữ liệu 6000 dòng, 26 cột (tương đương 156000 cell) khi bấm F9 để cập nhật, kết quả ra ngay lập tứcPHP:Function GetRngList(SrcRng As Range, Amount As Long) Dim Tmp, ul As New Collection, n As Long Application.Volatile '<--- Neu muon ket qua thay doi khi bam F9 GetRngList = "" Set ul = New Collection On Error Resume Next If Amount > SrcRng.Count Then Amount = SrcRng.Count With CreateObject("Scripting.Dictionary") Do n = Int(Rnd() * SrcRng.Count) + 1 Tmp = SrcRng(n).Value ul.Add Tmp, SrcRng(n).Address If Not .Exists(Tmp) And Not IsEmpty(Tmp) Then .Add Tmp, "" If ul.Count = SrcRng.Count Then Exit Do Loop Until .Count = Amount If .Count Then GetRngList = WorksheetFunction.Transpose(.Keys) End With End Function
Bạn dùng hàm sau:
Cứ bấm F9 sẽ thấy nó chọn ngẩu nhiênPHP:=INDEX($B$2:$B$17,INT(RAND()*16)+1)
Bạn cho mình hỏi tại sao lại không *17 mà phải +1 vậy?Bạn dùng hàm sau:
Cứ bấm F9 sẽ thấy nó chọn ngẩu nhiênPHP:=INDEX($B$2:$B$17,INT(RAND()*16)+1)
Thì cứ tính đi sẽ biếtBạn cho mình hỏi tại sao lại không *17 mà phải +1 vậy?
Lấy được rồi thì sẽ LIỆT KÊ vào đâu? Trên Excel chăng?Chào mọi người, mọi người giúp em với ạ.
Trong 1 dãy số từ 0 đến 9. Em muốn liệt kê tất cả các số. Số này phải có tối thiểu 4 chữ số và tối đa 8 chữ số, bao gôm cả số trùng lặp. Vậy phải dùng hàm nào ạ?
Mục đích là muốn lấy lại password cho điện thoại thôi ạ.
Lấy được rồi thì sẽ LIỆT KÊ vào đâu? Trên Excel chăng?
Nên nhớ trên Excel chỉ có tối đa 1,048,576 dòng thôi nha (Excel 2003 còn ít hơn)
Đương nhiên là được! Giả sử bạn có 1 danh sách đặt tại A1:A30 (tức 30 phần tử)... Để lấy ra 1 danh sách ngẫu nhiên 10 phần tử từ danh sách trên thì giải thuật sẽ thế này:
- Tạo 10 số ngẫu nhiên không trùng từ 1 đến 30 (tạm gọi là số thứ tự)
- Dùng hàm INDEX, lọc trong danh sách 30 phần tử theo chỉ số dòng chính là số thứ tự vừa tìm
----------------
Về việc tạo dãy số ngẫu nhiên không trùng ta dùng lập trình VBA đề tạo! Xem chi tiết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?27286-Tạo-dãy-số-ngẫu-nhiên-không-trùng
Giờ tôi làm thử cho bạn 1 file như yêu cầu (lấy 10 người ngẫu nhiên trong danh sách 30 người) ---> Xem thế nào nhé
Cho mình hỏi: INT(RAND()*16 + 1) và RANDBETWEEN(1,16) có gì khác nhau không? Tại sao mọi người lại thích dùng INT(RAND()*16 + 1) hơn vậy? Mình không hỏi về kết quả, mình hỏi về cách thức sử dụng!Thì cứ tính đi sẽ biết
- RAND()*16 sẽ cho 1 số ngẫu nhiên trong khoảng từ 0 đến số < 16
- RAND()*16 + 1 sẽ cho 1 số ngẫu nhiên trong khoảng từ 1 đến số < 17
- INT(RAND()*16 + 1) sẽ cho 1 số nguyên ngẫu nhiên trong khoảng từ 1 đến 16
Còn nếu là:
- RAND()*17 thì sẽ cho 1 số ngẫu nhên trong khoảng từ 0 đến số <17
- INT(RAND()*17) sẽ cho 1 số ngẫu nhiên trong khoảng từ 0 đến 16
Hai cách cho kết quả khác nhau
sử dụng file của bạn ChanhTQ@ và vọoc lung tung, còn nhiều thứ muốn làm nhưng không biết lệnhChào anh ndu96081631 anh có thể giúp em tạo ra nút chỉnh ngẫu nhiên lịch trực như file đinh kèm với được không ạ.
Ý em là từ thứ 2 đến chủ nhật khi bấm ngẫu nhiên trong 1 vùng thì mỗi người sẽ nhận được 1 chữ T (trực) và mỗi ngày chỉ 1 người nhận được chữ T, trong 1 tuần thừ thứ 2 đến chủ nhật ai cũng sẽ nhận được ngẫu nhiên 1 chữ T, và cứ mỗi lần bấm nút là nó sẽ thay đổi.
Rất mong anh giúp đỡ.
.....sử dụng file của bạn ChanhTQ@ và vọoc lung tung, còn nhiều thứ muốn làm nhưng không biết lệnh
Giả sử tôi có danh sách học sinh (B2:B30), ở ô C1 tôi muốn chọn ngẫu nhiên tên học sinh có trong danh sách đó được không? Đại khái như là phải trả bài ngày hôm đó. Rất mong mọi người giúp đỡ.
Rất cảm ơn!
chỉ có 7 ngày nên phải có 7 người, mỗi người trực 1 ngày, trên 7 người sẽ có người nghĩ trong tuần, code sẽ khác nhiều, và chạy cho cả tháng mới tính được số lần trực tương đối đồng đều.....trên cả điều em cần....Không biết nói gì hơn. Em xin chân thành cảm ơn.
Anh cho em hỏi thêm 1 câu nữa là nếu mình muốn chèn thêm người thì mình phải làm những bước nào ạ.
Sub Main()
Dim d1 As Object, d2 As Object, Arr(), i As Integer, Srow As Integer
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
Srow = Range("B65000").End(xlUp).Row - 3
ReDim Arr(1 To Srow, 1 To 7)
Randomize
For i = 1 To 7
lap1:
dong = Int(Srow * Rnd + 1)
If Not d1.exists(dong) Then
d1.Add dong, ""
lap2:
cot = Int(7 * Rnd + 1)
If Not d2.exists(cot) Then
d2.Add cot, ""
Arr(dong, cot) = "T"
Else
GoTo lap2
End If
Else
GoTo lap1
End If
Next i
Cells(4, Fistweek).Resize(Srow, 7) = Arr
Set d1 = Nothing: Set d2 = Nothing
End Sub
Cảm ơn anh, 1 lần nữa anh giúp em code, nếu 7 người 7 ngày không trùng, thì cứ dưới 14 người thì ngẫu nhiên 2 người trùng trong 1 tuần, dưới 21 người thì 3 người trùng trong 1 tuần, dưới 28 người thì 4 người trùng trong 1 tuần,....cứ như vậy mình lấy 7 ngày mình x số người trong tuần trùng ngẫu nhiên cũng được ạ.chỉ có 7 ngày nên phải có 7 người, mỗi người trực 1 ngày, trên 7 người sẽ có người nghĩ trong tuần, code sẽ khác nhiều, và chạy cho cả tháng mới tính được số lần trực tương đối đồng đều
sửa tạm sub Main để chọn ngẫu nhiên 7 người trong số người từ 7 trở lên, chưa tính số lần trực tương đối đồng đều trong tháng
Mã:Sub Main() Dim d1 As Object, d2 As Object, Arr(), i As Integer, Srow As Integer Set d1 = CreateObject("Scripting.Dictionary") Set d2 = CreateObject("Scripting.Dictionary") Srow = Range("B65000").End(xlUp).Row - 3 ReDim Arr(1 To Srow, 1 To 7) Randomize For i = 1 To 7 lap1: dong = Int(Srow * Rnd + 1) If Not d1.exists(dong) Then d1.Add dong, "" lap2: cot = Int(7 * Rnd + 1) If Not d2.exists(cot) Then d2.Add cot, "" Arr(dong, cot) = "T" Else GoTo lap2 End If Else GoTo lap1 End If Next i Cells(4, Fistweek).Resize(Srow, 7) = Arr Set d1 = Nothing: Set d2 = Nothing End Sub
công thức ô A1, và dùng format theo điều kiện các ôXin chào các anh chị,
Nhờ các anh chị chỉ giúp cho công thức tính lựa chọn ngẫu nhiên 1 bạn nam và 1 bạn nữ để trực vệ sinh lớp học như file đính kèm. Mình có thử làm kết hợp bằng hàm index và rand rồi nhưng không được, vd như chạy random ra ô c5 thì bạn nam 4 và nữ 2 sẽ là team trực nhật hộm đó, cũng không cần phân bổ công bằng, chỉ cần ngẫu nhiên, nếu không công bằng có thể nhấn f9 tiếp để chọn cặp khác. Mong các anh chị giúp đỡ sớm, xin cảm ơn các anh chị trước
công thức ô A1, và dùng format theo điều kiện các ô[/QUOTE
Xin cảm ơn anh HieuCD rất nhiều. Vợ em thấy hay quá nên muốn nhờ em chọn random món ăn cho đỡ đau đầu. Em OK luôn nhưng mày mò theo cách của anh HieuCD hướng dẫn theo file trước có lẽ lại không áp dụng được. Em mày mò từ tối hôm qua tới giờ chưa ra, mong các anh chị em chỉ giáo thêm cho em ở file đính kèm nhé. Em xin cảm ơn trước
Bạn thử công thức nàycông thức ô A1, và dùng format theo điều kiện các ô[/QUOTE
Xin cảm ơn anh HieuCD rất nhiều. Vợ em thấy hay quá nên muốn nhờ em chọn random món ăn cho đỡ đau đầu. Em OK luôn nhưng mày mò theo cách của anh HieuCD hướng dẫn theo file trước có lẽ lại không áp dụng được. Em mày mò từ tối hôm qua tới giờ chưa ra, mong các anh chị em chỉ giáo thêm cho em ở file đính kèm nhé. Em xin cảm ơn trước
Mã:=INDEX(B2:D4,RANDBETWEEN(1,3),RANDBETWEEN(1,3))
Bạn thử công thức này
Mã:=INDEX(B2:D4,RANDBETWEEN(1,3),RANDBETWEEN(1,3))
Cảm ơn bạn nhé, excel thật tuyệt
Lần này em bị sếp giao cho 1 việc không giống ai, mong được chỉ giúp:
Số là ra cái loại xổ số Vietlot, ông sếp em thì nhiều tiền, ông ấy bảo rảnh thì chọn cho anh một bảng số để anh chuyển cho đại lý nó in vé, mỗi lần ổng bắt em chọn khoảng 2000 số ngẫu nhiên không trùng.
Nghe thì dễ, nhưng bắt tay vào làm em thấy nó thật rối rắm. Chung quy lại đề bài ổng đưa ra được tóm lược như sau: chọn ngẫu nhiên dãy số bao gồm 06 số tự nhiên trong 45 số tự nhiên có thứ tự từ 01-45. Chọn ra khoảng 1000-2000 dãy số như vậy và không trùng lắp. Sau đó thiết lập công thức để kiểm tra một dãy số bất kỳ mình nhập vào xem có nằm trong 2000 dãy số đã chọn không (cái này phục vụ cho việc khi đã có kết quả xổ số). Bác chỉ cho em với, đội ơn bác.
Sub Tao2000So()
Dim J As Long, Tmp As Integer, W As Integer, Rws As Double
Dim StrC As String, MyStr As String, C6 As String
Const fS As String = "GPE"
For J = 1 To 45
StrC = StrC & Right("0" & CStr(J), 2)
Next J
Randomize:
Sheet2.Columns("B:B").ClearContents
MyStr = fS: Sheet2.[b1].Value = fS
Do
For J = 1 To 999
Tmp = 9 + (Rnd() * 9) \ 1
If Tmp Mod 2 = 0 Then Tmp = Tmp + 1
If Tmp > 14 Then
StrC = Mid(StrC, Tmp, 10) & Left(StrC, Tmp - 1) & Mid(StrC, Tmp + 10, Len(StrC))
Else
StrC = Mid(StrC, Tmp + 10, Len(StrC)) & Left(StrC, Tmp - 1) & Mid(StrC, Tmp, 10)
End If
Next J
For J = 1 To 42 Step 12
C6 = Mid(StrC, J, 12)
For W = 1 To 12 Step 2
MyStr = MyStr & Mid(C6, W, 2)
Next W
Sheet2.[B65500].End(xlUp).Offset(1).Value = MyStr
MyStr = fS
Next J
Rws = Sheet2.[b2].End(xlDown).Row
If Rws > 2590 Then Exit Do
Loop
End Sub
Bạn nhận file xem thử, muốn thay đổi bạn bấm F9 là được, sử dụng CT nên hơi chậm tý, mình làm 2000 số, muốn nhiều hơn thì bạn kéo xuống nữa!!!Chào mọi người,
Xin mọi người giúp đỡ, sếp tôi dạo này chơi cái món Vietlot, mỗi lần mua cả 2000 vé, bắt tôi lúc rảnh ngồi chọn. Xin các bác chỉ cho tôi cách lấy 2000 dãy số không trùng nhau, mỗi dãy số có 06 chữ số được chọn ngẫu nhiên từ 1-45. Nếu có thể các bác chỉ cho luôn công thức nhập một dãy số bất kỳ để kiểm tra có nằm trong 2000 dãy số đã chọn không (cái này phục vụ cho so sánh kết quả).
Chân thành cảm ơn./.
không hiểu sao sếp bạn mua 20tr/ ngày, thì thu nhập 1 năm ít nhất 10 tỷ, như vậy cần gì phải mua vé số ta!!!
Bạn lập topic mới. Nêu yêu cầu và điều kiện cụ thể (ví dụ mỗi phòng thi có mấy chục giám thị). Không viết tắt. Đính kèm file...Em có một bài toán như thế này xin nhờ anh chị giải quyết giúp ạ
Em xin cảm ơn anh chị trước ạ
- Có một ds cán bộ và ds phòng thi
- Yêu cầu: Phân công cán bộ coi thi ngẫu nhiên mà không phải bốc phiếu thủ công và đưa ra kết quả vào vùng kết quả em đã tô vàng
Vâng ạ. Em đã bổ sung Edit trong bài viết để yêu cầu rõ hơnBạn lập topic mới. Nêu yêu cầu và điều kiện cụ thể (ví dụ mỗi phòng thi có mấy chục giám thị). Không viết tắt. Đính kèm file...
Phần mềm chắc là khó đấy, nhưng mà code chap 2 của n phần tử chắc là làm được. Bạn làm một file ví dụ xem sao.Mọi người ơi, cho em hỏi muốn viết một phần mềm chọn ngẫu nhiên 2 ô dử liệu trên cùng một dòng, trong vùng dữ liệu cho trước và thông báo hết khi các dữ liệu trong vùng dữ liệu đã được chọn qua hết rồi. thì phải làm như thế nào ạ...mong mọi ngưới giúp e với...với mục đích tạo phần mềm học tập ạ
Theo bạn thì bạn sẽ học được những gì qua bài tập này?Mọi người ơi, cho em hỏi muốn viết một phần mềm chọn ngẫu nhiên 2 ô dử liệu trên cùng một dòng, trong vùng dữ liệu cho trước và thông báo hết khi các dữ liệu trong vùng dữ liệu đã được chọn qua hết rồi. thì phải làm như thế nào ạ...mong mọi ngưới giúp e với...với mục đích tạo phần mềm học tập ạ
Dạ .. e muốn tạo một cái phần mêm flashcard để học tiếng nhật cụ thể là học chử kanjiTheo bạn thì bạn sẽ học được những gì qua bài tập này?
Nói mục đích cụ thể, tôi hướng dẫn trực tiếp vào phần đó, khỏi phải học vòng vo.
Phần mềm chắc là khó đấy, nhưng mà code chap 2 của n phần tử chắc là làm được. Bạn làm một file ví dụ xem sao.
Tháo bỏ merge cells vùng a2:e14 rồi dùng đọan code này xem saoDạ .. e muốn tạo một cái phần mêm flashcard để học tiếng nhật cụ thể là học chử kanji
Bài đã được tự động gộp:
e có một file excel như vậy nhửng nó chỉ hiển thị ngẫu nhiên mot du liệu trong vùng dữ liệu cho trước thôi...nhưng e muốn nó hiển thị một cách ngẫu nhiên nhưng nó biết đến khi nào là đã hiển thị hết vùng du liệu và e muôn khi một dử liệu cột A hiên lên trên nếu muốn xem dữ liệu cột B tương đối với cột A thì phải làm sao e không biết làm mọi người giúp e với
Option Explicit
Public PArr As Variant
Public Num As Long
Public Num1 As Long
Sub Random_()
Dim i, j
If Num = 0 Then
Dim Sarr As Variant
Sarr = Sheet1.Range("a30").CurrentRegion
ReDim PArr(1 To 3, 1 To UBound(Sarr))
For i = 1 To UBound(Sarr)
PArr(1, i) = Sarr(i, 1)
PArr(2, i) = Sarr(i, 2)
Next i
Num1 = UBound(Sarr)
End If
If Num = Num1 Then
MsgBox "Da het so lieu"
Exit Sub
End If
Randomize
j = UBound(PArr, 2) * 10
i = (Rnd() * (j - 1)) \ 10 + 1
Do While PArr(3, i) = 1
i = (Rnd() * (j - 1)) \ 10 + 1
Loop
PArr(3, i) = 1
Num = Num + 1
Sheet1.Range("a2") = PArr(1, i)
Sheet1.Range("b2") = PArr(2, i)
End Sub
Public Sub Random2()
Static soCau As Long
Static dArr As Variant
Static k As Long
Dim sArr(), i As Long, r As Long
If soCau = 0 Then
sArr = Range("A30:B" & Range("B" & Rows.Count).End(xlUp).Row).Value
k = UBound(sArr, 1)
ReDim dArr(1 To k, 1 To 2)
Randomize
For i = 1 To k
r = Int(Rnd() * (k - i + 1)) + 1
dArr(i, 1) = sArr(r, 1)
dArr(i, 2) = sArr(r, 2)
sArr(r, 1) = sArr(k - i + 1, 1)
sArr(r, 2) = sArr(k - i + 1, 2)
Next
End If
If soCau = k Then
MsgBox "Da hêt so cau"
Else
soCau = soCau + 1
Range("A15") = dArr(soCau, 1)
Range("B15") = dArr(soCau, 2)
End If
End Sub
code nay được nek ad...cám ơn ad nhiu lắmHoăc thử code này:
Mã:Public Sub Random2() Static soCau As Long Static dArr As Variant Static k As Long Dim sArr(), i As Long, r As Long If soCau = 0 Then sArr = Range("A30:B" & Range("B" & Rows.Count).End(xlUp).Row).Value k = UBound(sArr, 1) ReDim dArr(1 To k, 1 To 2) Randomize For i = 1 To k r = Int(Rnd() * (k - i + 1)) + 1 dArr(i, 1) = sArr(r, 1) dArr(i, 2) = sArr(r, 2) sArr(r, 1) = sArr(k - i + 1, 1) sArr(r, 2) = sArr(k - i + 1, 2) Next End If If soCau = k Then MsgBox "Da hêt so cau" Else soCau = soCau + 1 Range("A15") = dArr(soCau, 1) Range("B15") = dArr(soCau, 2) End If End Sub
code nay s e bấm chạy code thi nó không nhảy j hết ad ơiTháo bỏ merge cells vùng a2:e14 rồi dùng đọan code này xem sao
Mã:Option Explicit Public PArr As Variant Public Num As Long Public Num1 As Long Sub Random_() Dim i, j If Num = 0 Then Dim Sarr As Variant Sarr = Sheet1.Range("a30").CurrentRegion ReDim PArr(1 To 3, 1 To UBound(Sarr)) For i = 1 To UBound(Sarr) PArr(1, i) = Sarr(i, 1) PArr(2, i) = Sarr(i, 2) Next i Num1 = UBound(Sarr) End If If Num = Num1 Then MsgBox "Da het so lieu" Exit Sub End If Randomize j = UBound(PArr, 2) * 10 i = (Rnd() * (j - 1)) \ 10 + 1 Do While PArr(3, i) = 1 i = (Rnd() * (j - 1)) \ 10 + 1 Loop PArr(3, i) = 1 Num = Num + 1 Sheet1.Range("a2") = PArr(1, i) Sheet1.Range("b2") = PArr(2, i) End Sub
khi thông báo hết số câu thì có cách nào cho nó chạy lại mà không cần tắt bảng tính không Bạn. và khi dử liệu cột A hiện lên mình nhập một dữ liệu vào một ô quy định nếu trùng với dữ liệu cột B mà tương đối với cột A trong vùng dử liệu chó trước thì sẻ cộng điểm vào ô điểm qui định nếu không trùng thì không cộng điểm...có cách nào làm được như v không Bạn giúp mình với...Hoăc thử code này:
Mã:Public Sub Random2() Static soCau As Long Static dArr As Variant Static k As Long Dim sArr(), i As Long, r As Long If soCau = 0 Then sArr = Range("A30:B" & Range("B" & Rows.Count).End(xlUp).Row).Value k = UBound(sArr, 1) ReDim dArr(1 To k, 1 To 2) Randomize For i = 1 To k r = Int(Rnd() * (k - i + 1)) + 1 dArr(i, 1) = sArr(r, 1) dArr(i, 2) = sArr(r, 2) sArr(r, 1) = sArr(k - i + 1, 1) sArr(r, 2) = sArr(k - i + 1, 2) Next End If If soCau = k Then MsgBox "Da hêt so cau" Else soCau = soCau + 1 Range("A15") = dArr(soCau, 1) Range("B15") = dArr(soCau, 2) End If End Sub
Thay câu:khi thông báo hết số câu thì có cách nào cho nó chạy lại mà không cần tắt bảng tính không .
minh bo roi ma minh bam môt lan no hien rk mk bam f9 thi no dung im luon@nguyendat3498p Bạn đã bỏ merge cells chưa vậy
Yêu cầu của bạn là bấm tới khi nào hết thì thôi, vậy thì bạn cứ việc bấm thôi chứ f9 gì vậy bạn.minh bo roi ma minh bam môt lan no hien rk mk bam f9 thi no dung im luon
Thay câu:
MsgBox "Da hêt so cau"
bằng câu:
If MsgBox("Da hêt so cau" & ChrW(10) & " Ban muon chay lai?", vbOKCancel, "Thong bao") = vbOK Then soCau = 0
Anh ơi, Với một dãy số trùng lặp thì nên làm như thế nào vậy ạ?Đương nhiên là được! Giả sử bạn có 1 danh sách đặt tại A1:A30 (tức 30 phần tử)... Để lấy ra 1 danh sách ngẫu nhiên 10 phần tử từ danh sách trên thì giải thuật sẽ thế này:
- Tạo 10 số ngẫu nhiên không trùng từ 1 đến 30 (tạm gọi là số thứ tự)
- Dùng hàm INDEX, lọc trong danh sách 30 phần tử theo chỉ số dòng chính là số thứ tự vừa tìm
----------------
Về việc tạo dãy số ngẫu nhiên không trùng ta dùng lập trình VBA đề tạo! Xem chi tiết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?27286-Tạo-dãy-số-ngẫu-nhiên-không-trùng
Giờ tôi làm thử cho bạn 1 file như yêu cầu (lấy 10 người ngẫu nhiên trong danh sách 30 người) ---> Xem thế nào nhé
Mình có cách cù lần, như sau:Anh ơi, Với một dãy số trùng lặp thì nên làm như thế nào vậy ạ?
Giả sử tôi có danh sách học sinh (B2:B30), ở ô C1 tôi muốn chọn ngẫu nhiên tên học sinh có trong danh sách đó được không? Đại khái như là phải trả bài ngày hôm đó. Rất mong mọi người giúp đỡ.
Rất cảm ơn!
bác ơi! sao em vào file của bác thì có hàm UniqueRandomNum còn file khác thì ko có hàm đó? Vậy thì mình nên làm sao để tất cả file Excel có hàm UniqueRandomNum ?Đương nhiên là được! Giả sử bạn có 1 danh sách đặt tại A1:A30 (tức 30 phần tử)... Để lấy ra 1 danh sách ngẫu nhiên 10 phần tử từ danh sách trên thì giải thuật sẽ thế này:
- Tạo 10 số ngẫu nhiên không trùng từ 1 đến 30 (tạm gọi là số thứ tự)
- Dùng hàm INDEX, lọc trong danh sách 30 phần tử theo chỉ số dòng chính là số thứ tự vừa tìm
----------------
Về việc tạo dãy số ngẫu nhiên không trùng ta dùng lập trình VBA đề tạo! Xem chi tiết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?27286-Tạo-dãy-số-ngẫu-nhiên-không-trùng
Giờ tôi làm thử cho bạn 1 file như yêu cầu (lấy 10 người ngẫu nhiên trong danh sách 30 người) ---> Xem thế nào nhé
Nếu mà ko muốn dừng ở 2000 mà muốn nó chạy hết tất cả các cách thì làm như thế nào v ạBạn nhận file xem thử, muốn thay đổi bạn bấm F9 là được, sử dụng CT nên hơi chậm tý, mình làm 2000 số, muốn nhiều hơn thì bạn kéo xuống nữa!!!
P/s: không hiểu sao sếp bạn mua 20tr/ ngày, thì thu nhập 1 năm ít nhất 10 tỷ, như vậy cần gì phải mua vé số ta!!!