Excel cho Microsoft 365 Excel cho Microsoft 365 dành cho máy Mac Excel cho web Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel 2016 for Mac Excel 2013 Excel 2010 Excel 2007 Excel for Mac 2011 Excel Starter 2010 Xem thêm...Ít hơn
Bài viết này mô tả cú pháp công thức và cách dùng hàm RAND trong Microsoft Excel.
Mô tả
Hàm RAND trả về một số thực ngẫu nhiên được phân bố đều, lớn hơn hoặc bằng 0 và nhỏ hơn 1. Một số thực ngẫu nhiên mới được trả về mỗi khi trang tính được tính toán.
Cú pháp
RAND[]
Cú pháp hàm RAND không có đối số nào.
Chú thích
Để tạo một số thực ngẫu nhiên nằm giữa a và b, hãy dùng:
=RAND[]*[b-a]+a
Nếu bạn muốn dùng hàm RAND để tạo một số ngẫu nhiên nhưng không muốn các số thay đổi mỗi khi ô được tính toán, bạn có thể nhập =RAND[] vào thanh công thức, rồi nhấn F9 để thay đổi công thức thành số ngẫu nhiên. Công thức sẽ tính toán và chỉ trả về một giá trị.
Ví dụ
Sao chép dữ liệu của ví dụ trong bảng sau đây và dán vào ô A1 của một trang tính Excel mới. Để công thức hiển thị kết quả, hãy chọn công thức, nhấn F2 rồi nhấn Enter. Bạn có thể điều chỉnh độ rộng cột để xem tất cả dữ liệu, nếu cần.
=RAND[] | Số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 1 | biến đổi |
=RAND[]*100 | Số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 100 | biến đổi |
=INT[RAND[]*100] | Số nguyên ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 100 | biến đổi |
Lưu ý: Khi trang tính được tính toán lại bằng cách nhập công thức hay dữ liệu vào một ô khác hoặc bằng cách tính toán lại thủ công [nhấn F9], một số ngẫu nhiên mới sẽ được tạo ra cho mọi công thức sử dụng hàm RAND. |
Bạn cần thêm trợ giúp?
Bạn luôn có thể hỏi một chuyên gia trong Cộng đồng Kỹ thuật Excel hoặc nhận sự hỗ trợ trongCộng đồng trả lời.
Xem thêm
Giải thuật Mersenne Twister
RANDBETWEEN [Hàm RANDBETWEEN]
Cần thêm trợ giúp?
MÌnh lấy tạm 1 VD như sau:
-Mình cần lập 1 bảng số liêu về Thời gian học và Thời gian chơi của 100 người trong 1 tuần[168h][ học +chơi có thể bằng 168h]
-Mình định dùng hàm RAND[] trong khoảng 0-168 cho 2 cột Học và Chơi nhưng Làm thế nào để sau khi lấy tổng lại không vượt quá 168
Thanks mọi
người
- #2
MÌnh lấy tạm 1 VD như sau:
-Mình cần lập 1 bảng số liêu về Thời gian học và Thời gian chơi của 100 người trong 1 tuần[168h][ học +chơi có thể bằng 168h]
-Mình định dùng hàm RAND[] trong khoảng 0-168 cho 2 cột Học và Chơi nhưng Làm thế nào để sau khi lấy tổng lại không vượt quá 168
Thanks mọi
người
Mình cao có 1,65 mét hè, hổng phải cao nhân, bạn thử cái này xem sao
Nói "dzui" thôi nhé, đừng giận
-
ngau nhien.xls
45 KB · Đọc: 214
- #3
Mình cao có 1,65 mét hè, hổng phải cao nhân, bạn thử cái này xem sao Nếu ko phải là 2 cột mà tổng của 4 cột thì mình chỉ cần thêm :
Nói "dzui" thôi nhé, đừng giận
Cột 3=thu[168-A1-B1]
Cột 4 =thu[168-A1-B1-C1]
đúng không
bác
Lần chỉnh sửa cuối: 2/4/10
- #4
Mình không hiểu về hàm Rand lắm. Bạn có thể cho mình biết ý nghĩa của nó được không. Hàm rand[] trả về giá trị là một số thực ngẫu nhiên tứ 0 đến 1, trong đề bài muốn xuất hiện số ngẫu nhiên từ 0 đến 168 nên trong công thức mình chỉ
lấy phần nguyên của số thực ngẫu nhiên từ 0 đến 1 * 168
Ví dụ của bạn là như thế nào?
Thân!
- To MDmen:
Riêng vấn đề của bạn đặt ra mình thấy có mâu thuẫn: cột thứ nhất lấy số ngẫu nhiên tư 0 đến 168, cột thứ hai cũng vậy mà tổng 2 cột không được lớn hơn 168 thì hơi bị ...vô lý, nên mình chỉ cho cột thứ hai là một số ngẫu nhiên trong khoảng 168 - số ngẫu nhiên của cột thứ nhất. Còn cột thứ 3, thứ 4 .. bạn thử là biết liền chứ gì
Thân
- #5
Con cò già có nhận thấy rằng tổng của 2 cột đạt yêu cầu không vượt quá 168, nhưng không bao giờ đạt đúng 168 không? Bên công thức thôi, bên VBA thì đúng.
167 là tối đa hà cò ơi. Thiếu 1 tí tôm tép rồi.
________________
Lần chỉnh sửa cuối: 2/4/10
- #6
Hàm rand[] trả về giá trị là một số thực ngẫu nhiên tứ 0 đến 1, trong đề bài muốn xuất hiện số ngẫu nhiên từ 0 đến 168 nên trong công thức mình chỉ lấy phần nguyên của số thực ngẫu nhiên từ 0 đến 1 * 168 Có chút sai lầm anh à! Vì vậy, nếu anh muốn tạo số ngẫu nhiên từ 0 đến 168 thì công thức phải là: : Để tạo số nguyên ngẫu nhiên từ a đến b [a < b] thì công thức sẽ là:
Hàm RAND[] trả về
=INT[RAND[]*169]
=INT[RAND[]*[b - a + 1]] + a
- #7
Có chút sai lầm anh à! Vì vậy, nếu anh muốn tạo số ngẫu nhiên từ 0 đến 168 thì công thức phải là: : Để tạo số nguyên ngẫu nhiên từ a
đến b [a < b] thì công thức sẽ là: Cám ơn 2 Thầy Ptm và Ndu, mình sử dụng từ chưa chuẩn, đúng ra phải nói là : kết quả trả về là số ngẫu nhiên nằm ở khoảng giữa 0 và 1
Hàm RAND[] trả về
=INT[RAND[]*169]
=INT[RAND[]*[b - a + 1]] + a
Trong cái hàm tự tạo mình đã cộng 1 vào nó "zồi" để nó có thể ra kết quả tối đa là 168, nhưng nghĩ lại rủi ngẫu nhiên "thằng" cột 1 nó ra 168 thì cột 2 nó ra cái chi chi, lại sai yêu cầu của bài nên khi dùng công thức mình chỉ cho nó tới 167 thôi là lý do như
vậy
Làm như Thầy Ndu là đúng rồi, mình nghĩ chưa tới cái đó, cột 1 mà 168 thì cột 2 bằng 0 cũng đúng đề bài
Qua cái bài ngẫu nhiêu này, ngẫu nhiên học được thêm vài cái ngẫu nhiên
Hôm nào phải cụng "zí" Thầy Ptm một phát
- #8
Thanks các bác.Mình làm tổng của 4 cột rồi dựa trên hàm =thu của bác concogia .Nhưng mà cột tổng thì phải đến trên 90% là ra gần 168[toàn 16x với 15x] Như thế chưa ngẫu nhiên cho lắm.Các bác xem có cách nào xử lý cái này không nhỉ
- #9
cột tổng thì phải đến trên 90% là ra gần 168 phải đến 90% là bạn muốn trên 90%, hay bạn muốn rải đều từ 1x đến 15x? nghía qua cái hàm RandBetween 1 cái nữa nha. Còn muốn 100% có tổng 168 thì dễ òm à.
Cột cuối lấy 168 trừ mấy số kia cộng lại, 1 phát ra ngay. Random 2 l_n.rar 15.2 KB · Đọc: 64
Muốn chia bớt xuống dưới thì nhân thêm 1 lần Rand[] nữa.
Lần chỉnh sửa cuối: 3/4/10
- #10
phải đến 90% là bạn muốn trên 90%, hay bạn muốn rải đều từ 1x đến 15x? nghía qua cái hàm RandBetween 1 cái nữa nha.
Muốn chia bớt xuống dưới thì nhân thêm 1 lần Rand[] nữa.
Còn muốn 100% có tổng 168 thì dễ òm à. Cột cuối lấy 168 trừ mấy số kia cộng lại, 1 phát ra ngay.
Thanks bác mình muốn nó rải đều từ 1x đến 168 .Đang nghiên cứu cái file của bác
VD :150-168 :20
141-150:18
131-140:16
................
thế là sao bác nhỉ
Lần chỉnh sửa cuối: 3/4/10
- #11
.Phần RandBetween bị lỗi bác ah Bạn vào menu Tools\Add-Ins và check vào mục Analysis ToolPak thì mới xài được hàm RANDBETWEEN
- #12
Còn phân kia mình nhận thấy Tổng càng thấp đi thì số người càng ít. Thống kê 100 người thì hơi ít để có thể kết luận.
Tuy vậy có thể tăng số người trong mức tổng thấp lên bằng cách dựa vào nguyên lý tăng rất chậm của hàm luỹ thừa trong phạm vi [0, 0.5] và tăng nhanh hơn trong khoảng [0.5,
1]. Số mũ càng lớn, sự khác biệt càng nhiều.
K2=INT[RAND[]^5*[169-SUM[$J2:J2]]]
Fill Right to N2, then Fill Down
See attached file.
-
Rand5lần.rar
19.5 KB · Đọc: 9
Lần chỉnh sửa cuối: 3/4/10
- #13
Thống kê 100 người thì hơi ít để có thể kết luận.
View attachment 43904 K2=INT[RAND[]^5*[169-SUM[$J2:J2]]] Fill Right to N2, then Fill Down See attached file. Vẫn có cảm giác cột đầu tiên được ưu tiên hơn sư phụ à!
Tuy vậy có thể tăng số người trong mức tổng thấp lên bằng cách dựa vào nguyên lý tăng rất chậm của hàm số mũ trong phạm vi [0, 0.5] và tăng nhanh hơn trong khoảng [0.5, 1]. Số mũ càng lớn, sự khác biệt càng nhiều.
Em nghĩ dùng VBA sẽ hay hơn! Bằng cách gán giá trị ngẫu nhiên vào 1 cell ngẫu nhiên ---> Như vậy mức ưu tiên sẽ chia đều cho 4 cell
- #14
Em đề xuất code này, bảo đảm mức ưu tiên sẽ chia đều cho các cell [trong 1 hàng] PHP: Sub CreateRandomNum[]
Dim i As Long, j As Long, Tmp1 As Long, Tmp2 As Long
With CreateObject["Scripting.Dictionary"]
For i = 1 To 100
Tmp1 = 0: Tmp2 = 0: .RemoveAll
Do
Randomize
j = Int[Rnd[] * 4] + 1
If Not .Exists[j] Then
Tmp1 = Int[Rnd[] * [169 - Tmp2]]
Tmp2 = Tmp2 + Tmp1
.Add j, Tmp1
Range["A2"][i, j] = Tmp1
End If
Loop Until .Count = 4
Next i
End With
End Sub
-
CreateRandomNum.xls
25.5 KB · Đọc: 15
- #15
Vẫn có cảm giác cột đầu tiên được ưu tiên hơn sư phụ à! Công thức Rand[]^5 nhằm giải quyết việc anh Bill ưu tiên các số tổng lớn hơn 150 mà ndu! Nghĩa là với 4 cột thì xác suất cả 4 số đều nhỏ [để cho tổng số nhỏ] là rất thấp so với xác suất để cho cả 4 ô đều lớn [để cho tổng số lớn]. Nghĩa là
trong trường hợp này phân bố ngẫu nhiên không đồng đều. Còn biện pháp của ndu là nhằm cải thiện việc phân bố theo cột: Hiển nhiên là cột nào tính trước sẽ ưu tiên hơn nhưng không thoát ra ngoài cái "phân bố ngẫu nhiên không đồng đều" nói trên. Để xét sự phân bố theo khoảng từ 0 đến 1 của Rand[], anh đã có cột count[] để kiểm tra. Kết quả: Vậy kết hợp 2 cách, dùng VBA của ndu, chỉ thêm đúng 2 ký tự "^5" vào, sẽ thấy sự khác biệt. Lạ 1 điều là VBA chạy chậm hơn công
thức. Xem trong file, với các ô kiểm tra ở sheet "2 cách" sẽ so sánh được hơn và kém trong việc giải quyết 2 vấn đề, mỗi cách chỉ giải quyết 1. Sheet "1 cách kết hợp" là gần như tối ưu. CreateRandomNum2.rar 24.9 KB · Đọc: 23
Việc luỹ thừa Rand[] lên nhằm phân bố không đồng đều ngược lại để bù vào.
Để xét sự phân bô theo cột, ta tính tổng từng cột
để kiểm tra [xem file].
Cách của anh thì giải quyết vấn đề 1, vấn đề 2 vẫn còn.
Cách của ndu giải quyết vấn đề 2, vấn đề 1 còn nguyên, ý tác giả muốn phân bố tổng đều từ 1x đến 16x cơ.
Lý do ^5 mà không phải số khác: Đã test tăng dần từ 2 lên, tới 5 là đạt yêu cầu. Test theo nguyên lý đã nói ở bài trên.
Lần chỉnh sửa cuối: 4/4/10
- #16
Lạ 1 điều là VBA chạy chậm hơn công thức. Sheet "1 cách kết hợp" là gần như tối ưu. Gán giá trị cho từng cell, đương
nhiên tốc độ sẽ chậm PHP:
Xem trong file, với các ô kiểm tra ở sheet "2 cách" sẽ so sánh được hơn và kém trong việc giải quyết 2 vấn đề, mỗi cách chỉ giải quyết 1.
Sư phụ sửa code thành vầy:Sub CreateRandomNum2[]
Dim i As Long, j As Long, Tmp1 As Long, Tmp2 As Long, Arr, TG
TG = Timer
ReDim Arr[199, 3]
With CreateObject["Scripting.Dictionary"]
For i = 0 To 199
Tmp1 = 0: Tmp2 = 0: .RemoveAll
Do
Randomize
j = Int[Rnd[] * 4]
If Not .Exists[j] Then
Tmp1 = Int[Rnd[] ^ 5 * [169 - Tmp2]]
Tmp2 = Tmp2 + Tmp1
.Add j, Tmp1
Arr[i, j] = Tmp1
End If
Loop Until .Count = 4
Next i
End With
Range["A2:D201"].Value = Arr
MsgBox Timer - TG
End Sub
Nó sẽ chạy... như điên
- #17
cho em hỏi thêm về vấn đề này: Rand-weight.xlsx 10.4 KB · Đọc: 2
Nếu e cần lấy số RAND[] cho 8 số hạng [là tỉ trọng danh mục] với điều kiện như sau:
- Từng số hạng lấy RAND[] đều có Min vs Max có thể thay đổi đc theo ý ng sử dụng;
- Tổng RAND[] của 8 số hạng ko vượt 100% [vì đây là tỉ trọng];
Các pp trên đưa ra đều thõa yêu cầu là lấy số ngẫu nhiên không vượt 100% nhưng chưa thõa đc đk từng tỉ trọng có Min
và Max riêng nên e đang chưa biết xử lý ntn.
Nhờ các anh/chị giúp đỡ, em xin cảm ơn!