Giúp em viết code chọn số ngẫu nhiên

Liên hệ QC

xkibboy

Thành viên mới
Tham gia
7/9/11
Bài viết
7
Được thích
0
Hix, tình hình em mới tập tành viết VBA. Viết mãi mà vẫn chưa ra được.-=09=

Ý tưởng em muốn như sau: từ A1:A8 là các số ngẫu nhiên từ 0 đến 1 sao cho cộng lại bằng 1.
Lập lại 100 lần, ra một dãy các số ngẫu nhiên điều kiện giống như trên.
Hi, mong nhận được sự giúp đỡ từ các anh chị ^^
 
Thật sự chưa rõ í đồ của bạn đạt kết quả là gì; nhưng có vài thắc mắc sau:

Số ngẫu nhiên này từ bộ tạo số ngẫu là các số vô tỉ; Khi cộng chúng lại từng cặp sẽ ít khi đạt con số 1 tròn trịa được, nếu ta không xà xẻo, cắt tỉa nó.

Nếu í đồ của bạn cộng cả tám số =1 thì mình nghỉ cũng vậy thôi, . . . Nói chung là khó, nếu không gương ép
 
Upvote 0
Thật sự chưa rõ í đồ của bạn đạt kết quả là gì; nhưng có vài thắc mắc sau:

Số ngẫu nhiên này từ bộ tạo số ngẫu là các số vô tỉ; Khi cộng chúng lại từng cặp sẽ ít khi đạt con số 1 tròn trịa được, nếu ta không xà xẻo, cắt tỉa nó.

Nếu í đồ của bạn cộng cả tám số =1 thì mình nghỉ cũng vậy thôi, . . . Nói chung là khó, nếu không gương ép

Hi, cảm ơn a đã nhắc nhở. E vốn dân kinh tế, muốn xác định tỷ trọng cho danh mục đầu tư của mình như bị cái dốt IT. Thực ra, e chỉ muốn làm tròn tới 2 số thập phân ví dụ như 0.25-0.23... là ok rồi. Mong các anh chị đóng góp thêm ^^.
 
Upvote 0
Hi, cảm ơn a đã nhắc nhở. E vốn dân kinh tế, muốn xác định tỷ trọng cho danh mục đầu tư của mình như bị cái dốt IT. Thực ra, e chỉ muốn làm tròn tới 2 số thập phân ví dụ như 0.25-0.23... là ok rồi. Mong các anh chị đóng góp thêm ^^.
Thử dùng SOLVER của Excel xem thế nào... Tôi nghĩ là được
(tiếc là tôi không có điều kiện để thử nghiệm)
 
Upvote 0
Thử dùng SOLVER của Excel xem thế nào... Tôi nghĩ là được
(tiếc là tôi không có điều kiện để thử nghiệm)
Solver thì làm được ạ. Nhưng phải có điều kiện và nó chỉ đưa ra một dãy duy nhất. Muốn làm dãy khác thì phải phải khai báo điều kiện lại. E muốn lặp lại tới 100 lần cơ, hix làm solver 100 lần thì hơi mệt a c nhỉ :(
 
Upvote 0
Vấn đề này mình từng gặp, hơi khó giải quyết Vì cứ mỗi lần thao tác, cụ thể là nhấn enter là mỗi lần hàm rand khởi tạo một giá trị mới. Nghĩa là giá trị của nó động, không cố định. Nếu bạn có thể cố định được thì cách sau có thể làm được:
Tại ô A1 bạn gõ công thức
=Rand()
Ô A2 bạn gõ công thức:
=(1-SUM(A$1:A1))*RAND()

Phân tích lý thuyết thì cách làm này không có vấn đề, nhưng làm sao để mỗi hàm rand chỉ khởi tạo giá trị chỉ 01 lần? Đây là vấn đề rắc rối, mong các cao thủ cho lời đáp.

Còn một vấn đề là: Khi bạn tính tổng của các số từ A1 - A8, kết quả phải nhỏ hơn 1 (xác suất bằng 1 rất hiếm gặp, xem như không có). Và càng về cuối số sẽ càng nhỏ (chỉ là tổng quát thôi chứ cũng hẻm chắc hen).

Để chắc chắn tổng nó bằng 1, ở ô cuối cùng bạn chỉ việc xóa phần "*RAND()" thôi


Với cách trên, bạn dễ dàng mở rộng không chỉ 08
 
Lần chỉnh sửa cuối:
Upvote 0
Mình chưa hiểu ý của bạn VietDaSau lắm. Mong bạn giải thích thêm được ko
 
Upvote 0
Mình chưa hiểu ý của bạn VietDaSau lắm. Mong bạn giải thích thêm được ko
Bạn chỉ việc copy lại công thức mình nói ở trên thôi Tại lâu lắm rồi mình mới đụng đến excel. Bạn cứ việc copy từ A2 đến A7, muốn mở rộng thêm cũng được. :">

Trên lý thuyết, càng nhiều ô thì tổng càng tiệm cận đến 1. Vì vậy mình mới nói bạn là ở ô cuối cùng là phải bỏ phần *Rand() thì tổng A1:A7 mới bằng 1.

Bạn có thể xem file đính kèm.
 

File đính kèm

Upvote 0
hihi, cám ơn bạn vietdasau nhiều.
Mình là dân nông nghiệp, sống rày đây mai đó. Từ đầu năm đến giờ lãi suất ngân hàng lên cao quá, hẻm ai vay được tiền để thuê mình làm dự án hết. Vì vậy mới rảnh rỗi lên đây ôn lại mấy công thức ấy mà. xkibboy có thể cho mình xin nick để giao lưu làm quen không? Ý tưởng của bạn rất lạ mình chưa thấy ai dùng hết...
 
Upvote 0
Mình là dân nông nghiệp, sống rày đây mai đó. Từ đầu năm đến giờ lãi suất ngân hàng lên cao quá, hẻm ai vay được tiền để thuê mình làm dự án hết. Vì vậy mới rảnh rỗi lên đây ôn lại mấy công thức ấy mà. xkibboy có thể cho mình xin nick để giao lưu làm quen không? Ý tưởng của bạn rất lạ mình chưa thấy ai dùng hết...
Hi, Ym! của e là poseidon1412_nt@yahoo.com. Add vào mình trao đổi thêm nhé ^^.
 
Upvote 0
Web KT

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

Back
Top Bottom