Tách tổng ngẫu nhiên ? (1 người xem)

Người dùng đang xem chủ đề này

Miền Cát Trắng

Thành viên hoạt động
Tham gia
18/5/13
Bài viết
171
Được thích
37
Xin chào các bạn!
Tôi đang gặp một vấn đề như đã nêu trong file kèm,nhờ các bạn giúp đỡ.
Xin cảm ơn
 

File đính kèm

Có anh đi học VBA suốt mà không nhờ --=0. Tạm có cái code đây, hàm Rnd cho giá trị ngẫu nhiên từ 0 đến 1 nên có thể bạn thay đổi theo ý muốn bằng cách nhân thêm giá trị nào đó như 50 chẳng hạn. Có 6 giá trị đơn lẻ thì lấy 100/6 để nhân với Rnd cũng tạm ổn. Nếu không khống chế thì giá trị cuối có thể mang dấu âm.

Mã:
Sub CreateRnd()
    Dim RndRange As Range, Cel As Range, TongRnd As Integer
    Set RndRange = Range("E7:I7")
    TongRnd = 0
    For Each Cel In RndRange
        Cel.Value = Round(Rnd * 50, 0)
        TongRnd = TongRnd + Cel.Value
    Next
    Range("J7").Value = Range("D7") - TongRnd
    Set RndRange = Nothing
End Sub
 
Có anh đi học VBA suốt mà không nhờ --=0. Tạm có cái code đây, hàm Rnd cho giá trị ngẫu nhiên từ 0 đến 1 nên có thể bạn thay đổi theo ý muốn bằng cách nhân thêm giá trị nào đó như 50 chẳng hạn. Có 6 giá trị đơn lẻ thì lấy 100/6 để nhân với Rnd cũng tạm ổn. Nếu không khống chế thì giá trị cuối có thể mang dấu âm.

Mã:
Sub CreateRnd()
    Dim RndRange As Range, Cel As Range, TongRnd As Integer
    Set RndRange = Range("E7:I7")
    TongRnd = 0
    For Each Cel In RndRange
        Cel.Value = Round(Rnd * 50, 0)
        TongRnd = TongRnd + Cel.Value
    Next
    Range("J7").Value = Range("D7") - TongRnd
    Set RndRange = Nothing
End Sub

Oái,Thầy nhớ vậy ta , hihi... nhà em đi học cả khóa được có 2 buổi thôi bỏ mặc cả bạn của anh ấy đi học một mình Thầy ạ, do công việc bận quá và anh ấy cũng chưa tiếp xúc với vba nên cũng lười.Hix tiếc thật chắc phải hẹn gặp Thầy dịp khác vậy :-=.

Về kết quả em test thấy đúng với câu hỏi đặt ra rồi nhưng ý của em muốn đưa vào box công thức để làm bằng công thức vì em muốn kéo fill xuống.
Nếu bằng vba thì cũng không vấn đề gì cả nhưng em chưa biết cách viết vba để fill xuống hơn nữa là có thể lấy toàn bộ giá trị dương (>0) (Thập phân cũng được) được không Thầy, không lấy giá trị âm phiền Thầy xem giúp ạ.
 

File đính kèm

Còn muốn FillDown thì thử ghi bằng bộ thu macro xem sao

PHP:
Option Explicit
Sub CreateRnd()
    Dim Rng As Range, Cls As Range
    Dim J As Byte, TongRnd As Long
    
    Set Rng = Range("E7:I7")
    TongRnd = [d7].Value \ (Rng.Cells.Count + 1)
    For Each Cls In Rng
        J = J + 1:              Randomize
        Cls.Value = TongRnd - (2 * Rnd())
    Next
    Range("J7").Value = [d7].Value - Application.WorksheetFunction.Sum(Rng)
    Set Rng = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Randomize chỉ cần chạy 1 lần thôi. Hình như code của bạn bỏ nó trong vòng lặp thì nó sẽ chạy đủ n lần.
 
Tại ô E7:

=RANDBETWEEN(0,100)

F7=RANDBETWEEN(0,$D$7-SUM($E$7:E7))

Copy F7 đến G,H,I

J7=$D$7-SUM($E$7:I7)
 

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

Back
Top Bottom