Tạo 1 dãy số ngẫu nhiên không trùng

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Trong VBA, việc tạo 1 dãy số ngẫu nhiên ko trùng đã có nói rất nhiều... Thế nhưng nếu tôi muốn làm điều này bằng công thức thì phải làm như thế nào nhỉ?
Ví dụ tôi muốn tạo 1 dãy từ 1 đến 100 nhưng chỉ lấy 10 số và phải bảo đãm 10 số này hoàn toàn ko trùng nhau!
Các cao thủ góp ý giùm với
ANH TUẤN
 
anhtuan1066 đã viết:
Trong VBA, việc tạo 1 dãy số ngẫu nhiên ko trùng đã có nói rất nhiều... Thế nhưng nếu tôi muốn làm điều này bằng công thức thì phải làm như thế nào nhỉ?
Ví dụ tôi muốn tạo 1 dãy từ 1 đến 100 nhưng chỉ lấy 10 số và phải bảo đãm 10 số này hoàn toàn ko trùng nhau!
Các cao thủ góp ý giùm với
ANH TUẤN
X1=1
X2=X1+n
...
n cho tùy ý n=2n+1 hay n=2n...
Còn hàm rand() cứ mỗi lần edit là sẽ change.
 
ThuNghi đã viết:
X1=1
X2=X1+n
...
n cho tùy ý n=2n+1 hay n=2n...
Còn hàm rand() cứ mỗi lần edit là sẽ change.
Nếu vậy thì đâu thể gọi là ngẫu nhiên nữa... có quy luật rồi... Hàm RAND ác 1 cái là nó cứ thay đỗi liên tục nên ko thể xác định trước dc dử liệu đang tồn tại là cái giống gì... Khó nhỉ... VBA thì người ta cho nó thành VALUE luôn, hết nhúc nhích... công thức chẵng lẽ ko khả thi ???
 
Mình có cách củ chuối nước đây!

Dùng hàm =RANDBETWEEN(B1;10*ROW()) tại ô B2 trở đi
Còn tại B1 thì =RANDBETWEEN(1;10)

Bổ sung: Sau đó Copy & Paste Special!/-*+/
 
Lần chỉnh sửa cuối:
Tạo 1 dãy số ngẫu nhiên không trùng
Số ngẫu nhiên mà lại đòi không trùng vậy có còn ngẫu nhiên?
Mà Bác tính làm gì vậy?
Có thể 10 số trong 100 số thì 10 ct khác nhau.
Còn 30 trong 100 thì hết biết.
 
ThuNghi đã viết:
Số ngẫu nhiên mà lại đòi không trùng vậy có còn ngẫu nhiên?
Mà Bác tính làm gì vậy?
Có thể 10 số trong 100 số thì 10 ct khác nhau.
Còn 30 trong 100 thì hết biết.
Cái vụ này có chứ... VBA đã làm dc nhưng còn công thức thì tôi ko nghĩ ra dc...
Đại khái mỗi lần tôi chạy công thức thì nó sẽ xuất cho 10 số (giới hạn từ 1 đến 100) nhưng 10 số này hoàn toàn ko trùng nhau...
Ứng dụng thì thiếu gì... chẳng hạn như chọn 5 đề thi ngẫu nhiên trong 100 đề thi... Chọn 5 người ngẫu nhiên đễ bốc thăm trúng thưởng...
 
Ý bác Tuấn nói số ngẫu nhiên không trùng, Hix...cũng khó đấy
 
ThuNghi đã viết:
Số ngẫu nhiên mà lại đòi không trùng vậy có còn ngẫu nhiên?
Mà Bác tính làm gì vậy?
Có thể 10 số trong 100 số thì 10 ct khác nhau.
Còn 30 trong 100 thì hết biết.

cũng có thể ThuNghi ah, số ngẫu nhiên ko trùng với các số ngẫu nhiên tạo ra trước đó
+ Viết công thức dùng RAND nhưng nhưng phải thủ công lần lượt tạo từng số sau đó paste special value luông
+ Hoặc có thể viết VBA.
 
Tôi thấy VBA là dc điều này (MS có cho đoạn code mẫu).. nhưng cảm giác rằng với công thức thì ko thể... Vì đã gọi là ngẫu nhiên thì đương nhiên ta phải bám vào hàm RAND rồi... mà RAND thì biết trời đất nào mà lần... vì phải xem xét cái vừa xuất hiện ở cell trên có trùng với cái tại ActiveCell ko? COUNIF có vẽ ko khả thi, vì ngay khi vừa phát hiện ko trùng thì thằng ông nội phía trên nó đã change tá lã rồi...
Cảm giác là thế nhưng tôi vẫn post lên hỏi thử, biết đâu có người biết cách làm khác... ấy là đang nói công thức nha, chứ ko phải VBA (vì VBA đương nhiên làm dc điều này)
ANH TUẤN
 
Mình có cách này :
Cột A dùng hàm :=ODD(RAND()*100) kéo fill tới A100
Cột B dùng hàm :=(IF(COUNTIF($A$1:$A$100;A1)=1;A1;""))kéo fill tới B100
Cột C dùng hàm :=IF(COUNT(B1:B100)<=10;B1;"") Cũng kéo Fill như vậy
Việc còn lại là nhặt ra các ô kết quả rời rạc cho vào bảng xếp theo thứ tự.
 
He... he... xem ra cũng có cách đó chứ nhỉ! Đễ kiểm tra kỹ lại... Cảm ơn bạn!
ANH TUẤN

Ôi... sao ko dảy số lại xuất hiện số 101 nhỉ (>100)... Làm sao giới hạn dc đây?
ANH TUẤN
 
Chỉnh sửa lần cuối bởi điều hành viên:
Số 101 là kết quả của phép tính ODD không phải là dữ liệu Rand bạn yên tâm . Nếu cần thì dùng If loaị luôn kết quả lớn hơn 100
 
Có đó... cột C cho ra số 101... bạn test thử xem
Và số 100 này ko thể loại ra dc... tại có khi tôi cần chọn nó thì sao?
 
oh, đó là do bạn kongcom dùng hàm odd() -> trả về số lẻ - muốn sửa lấy số <=100 thì ODD(RAND()*99). TUY NHIÊN lúc này số ngẫu nhiên chỉ là cac số lẻ, ko đạt mục tiêu như atuan đề ra là số ngẫu nhiên từ 1 đến 100...

@TigerTiger đã đổi mới hẳn rồi (nhân đây cám ơn kongcom)-> chỉ cần 1 cột phụ thôi (cột A) và đã cho 10 số ngẫu nhiên trong khoảng 1..100 (có sử dụng đặt name):

+Cột A dùng công thức=ROUND(RAND()*99+1,0) kéo fill tới A100 và đặt 2 name:
PHP:
 TIM =IF(COUNTIF(Sheet1!$A$1:$A$100,Sheet1!$A$1:$A$100)=1,ROW(Sheet1!$A$1:$A$100),"") 
 
LIST =SMALL(TIM,ROW(INDIRECT("1:"&COUNT(TIM))))
- tại các ô B1:B10: dùng công thức =INDIRECT("A"&INDEX(LIST,ROW())) -> giá trị cần tìm

*mở rộng tìm hơn 10 giá trị - hết giá trị khác nhau tạo ra - tại cột D (trong file gửi kèm)

xem file gửi kèm,
 

File đính kèm

Lần chỉnh sửa cuối:
He... he...
Cái vụ tưởng chừng ko lối thoát, vậy mà các bạn cũng nghĩ ra dc... Phải nói sức mạnh cộng đồng là vô địch...
 
He... he...
Cái vụ tưởng chừng ko lối thoát, vậy mà các bạn cũng nghĩ ra dc... Phải nói sức mạnh cộng đồng là vô địch...

Vẫn còn vấn đề đó atuan... anh nghiên cứu bỏ cột A lun đi -> tigertiger thử mà chưa được,
 
tigertiger đã viết:
Vẫn còn vấn đề đó atuan... anh nghiên cứu bỏ cột A lun đi -> tigertiger thử mà chưa được,
Ái dza... con người ko bao giờ hài lòng với thực tại... nhưng cũng vì thể mà xã hội phát triễn..
Hic.. nãy giờ cũng đang thử đây mà chưa tìm ra cách! Nếu có thể tạo 1 mãng gồm 100 số 1 thì OK
ANH TUẤN
 
Đâu có được atuan... ơi - a thử chưa, chỉ thấy toàn #REF
mà LIST công thức trên có thay đổi gì k nhỉ?
 
Sao thể áp dụng bài toán LOC DS DUY NHẤT vào đây dc vậy ta?
 
Web KT

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

Back
Top Bottom