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)