Mình đang gặp khó khăn về việc chan 1 số ra nhiều ô trong 1 sheet

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Hiện tại mình đang có 1 bài tập đối với trình của mình quá hóc búa. mình đưa lên để xin ý kiến các bạn
O A1 mình có 1 số 22.000 mình dùng số này chia đều co 7 ô.....B1 C1 ......vị chi mỗi ô sẽ đc 3000, còn thừa lại 1000. mình muốn +1000 này vào 1 ô ngẫu nhiên nào đó trong 7 ô B1,C1.....
vì mình có nhiều dòng nên việc chọn "ngẫu nhiên" 1 ô thuộc dòng để công vô cho nó khác biệt.
 

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Bạn có up bao nhiêu lần cũng vậy thôi. Nếu bạn muốn có cấu trả lời thì up file lên, mô tả chi tiêt trong file và cụ thể hóa bằng cách cho đáp án khi phải làm thủ công
cám ơn bạn. Mình xin up file và ghi chi tiết hướng giải quyết
 

File đính kèm

vodoi2x

Nothing & Nothing
Tham gia ngày
16 Tháng năm 2011
Bài viết
1,592
Được thích
1,656
Điểm
560
Hiện tại mình đang có 1 bài tập đối với trình của mình quá hóc búa. mình đưa lên để xin ý kiến các bạn
O A1 mình có 1 số 22.000 mình dùng số này chia đều co 7 ô.....B1 C1 ......vị chi mỗi ô sẽ đc 3000, còn thừa lại 1000. mình muốn +1000 này vào 1 ô ngẫu nhiên nào đó trong 7 ô B1,C1.....
vì mình có nhiều dòng nên việc chọn "ngẫu nhiên" 1 ô thuộc dòng để công vô cho nó khác biệt.
Chan ở đây nghĩa là gì?

Xem file bạn rồi, nhưng dồn ngẫu nhiên kiểu gì, lúc bạn cộng +1 lúc +2,vvv không có quy luật, +1 +2 hay hôm sau lại +0,5 thì ?

Vậy thì bạn cứ tự chia đều và sau đó phân bố ngẫu nhiên số dư xem có được không
 

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Chan ở đây nghĩa là gì?

Xem file bạn rồi, nhưng dồn ngẫu nhiên kiểu gì, lúc bạn cộng +1 lúc +2,vvv không có quy luật, +1 +2 hay hôm sau lại +0,5 thì ?

Vậy thì bạn cứ tự chia đều và sau đó phân bố ngẫu nhiên số dư xem có được không
vấn đề là phân bố ngẫu nhiên số dư vì như mình nói có cả trăm dòng có khi gần cả ngàn mà ......tự tay thế này thì.......mình đang cần tìm giải pháp nào nhanh hơn
 

quanghai1969

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,620
Được thích
7,024
Điểm
860
Nơi ở
Thuận An, Bình Dương
cám ơn bạn. Mình xin up file và ghi chi tiết hướng giải quyết
Xem file đính kèm coi được chưa, hy vọng trúng ý tác giả. Nói thiệt viết ra được cái code này muốn bệnh luôn, thấy đơn giản nhưng khó quá trời.
PHP:
Sub chiaso()
Dim kq(), dl, i, j, a, sole, so
dl = Range([g8], [g65536].End(3)).Value
ReDim kq(1 To UBound(dl), 1 To 5)
For i = 1 To UBound(dl)
   For j = 1 To 5
      so = dl(i, 1) / 5
         If InStr(so, ".") > 0 Then sole = sole + Val(Right(so, InStrRev(so, ".") - 1))
         If InStr(so, ".") > 0 Then so = Left(so, InStr(so, "."))
         If sole > 5 Then
            a = 1:      sole = sole - 10
         End If
         If InStr(so, ".") = 0 Then
            kq(i, j) = so
         Else
            kq(i, j) = so + a
         End If
      a = 0
   Next
   sole = 0
Next
[B8].Resize(i - 1, 5) = kq
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,289
Được thích
16,102
Điểm
1,860
Tuổi
60
Nơi ở
An Giang
Xem file đính kèm coi được chưa, hy vọng trúng ý tác giả. Nói thiệt viết ra được cái code này muốn bệnh luôn, thấy đơn giản nhưng khó quá trời.
PHP:
Sub chiaso()
Dim kq(), dl, i, j, a, sole, so
dl = Range([g8], [g65536].End(3)).Value
ReDim kq(1 To UBound(dl), 1 To 5)
For i = 1 To UBound(dl)
   For j = 1 To 5
      so = dl(i, 1) / 5
         If InStr(so, ".") > 0 Then sole = sole + Val(Right(so, InStrRev(so, ".") - 1))
         If InStr(so, ".") > 0 Then so = Left(so, InStr(so, "."))
         If sole > 5 Then
            a = 1:      sole = sole - 10
         End If
         If InStr(so, ".") = 0 Then
            kq(i, j) = so
         Else
            kq(i, j) = so + a
         End If
      a = 0
   Next
   sole = 0
Next
[B8].Resize(i - 1, 5) = kq
End Sub
Bảo đảm là "Hổng trúng"!
Ẹc...
 

quanghai1969

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,620
Được thích
7,024
Điểm
860
Nơi ở
Thuận An, Bình Dương
Lần chỉnh sửa cuối:

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,289
Được thích
16,102
Điểm
1,860
Tuổi
60
Nơi ở
An Giang
Hic em có test rồi mà, test kỹ lắm đó nha. Nhưng nếu không đúng thì sửa tiếp anh ơi. Sai chỗ nào vậy anh? Nói không không sao em biết chỗ nào mà sửa chứ
Tác giả muốn kết quả là các số chẵn bằng nhau, sau đó cộng thêm ngẫu nhiên vào "nhiều cell" nào đó để tổng bằng số có sẵn trong cột G.
Ví dụ từ B8:F8 đầu tiên gán mỗi cell giá trị =4, tổng sẽ =20, sau đó trong 5 cell này có 2 cell cộng thêm 1, hoặc có 1 cell cộng thêm 2 để tổng =22 như cell G8.
Kết quả của quanghai là chia đều hết vào các ô, giống như lấy số cột G chia đều cho các cell.
HongTrung.JPG
 
Lần chỉnh sửa cuối:

quanghai1969

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,620
Được thích
7,024
Điểm
860
Nơi ở
Thuận An, Bình Dương
Tác giả muốn kết quả là các số chẵn bằng nhau, sau đó cộng thêm ngẫu nhiên vào "nhiều cell" nào đó để tổng bằng số có sẵn trong cột G.
Ví dụ từ B8:F8 đầu tiên gán mỗi cell giá trị =4, tổng sẽ =20, sau đó trong 5 cell này có 2 cell cộng thêm 1, hoặc có 1 cell cộng thêm 2 để tổng =22 như cell G8.
Kết quả của quanghai là chia đều hết vào các ô, giống như lấy số cột G chia đều cho các cell.
Cái này hơi lạ nghen, trên máy tính của em chia ra hết như yêu cầu đó anh ơi. Em tải lại file đã gởi cũng đâu có sai đâu.
 
Lần chỉnh sửa cuối:

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,269
Được thích
52,662
Điểm
11,910
cám ơn bạn. Mình xin up file và ghi chi tiết hướng giải quyết
Áp dụng hàm Draw của siwtom là được rồi
1> Hàm hổ trợ
PHP:
Function Draw(Arr, Amount As Long)
  Application.Volatile
  Dim index As Long, k As Long, d As Long, c As Long, tmpArr, original
  If Amount > UBound(Arr) - LBound(Arr) + 1 Then Exit Function
  original = Arr
  ReDim tmpArr(1 To Amount)
  d = LBound(original)
  c = UBound(original)
  Randomize
  For k = 1 To Amount
    index = Int(Rnd() * (c - d + 1)) + d
    tmpArr(k) = original(index)
    original(index) = original(k + LBound(original) - 1)
    d = d + 1
  Next k
  Draw = tmpArr
End Function
2> Hàm chính
PHP:
Function DistNum(ByVal Num As Long, ByVal Amount As Long)
  Dim lRem As Long, lQuot As Long, i As Long
  Dim Arr() As Long
  On Error Resume Next
  ReDim Arr(1 To Amount)
  lRem = Num Mod Amount
  lQuot = Int(Num / Amount)
  For i = 1 To Amount
    Arr(i) = lQuot - (lRem > 0)
    lRem = lRem - 1
  Next
  DistNum = Draw(Arr, Amount)
End Function
3> Áp dụng:
- Quét chọn B8:F8 rồi gõ vào thanh Formula công thức:
Mã:
=DistNum($G8,COUNTA($B$7:$F$7))
- Bấm tổ hợp phím Ctrl + Shift + Enter để kết thúc
- Keo fill xuống
- Có thể bấm F9 để tạo phân bổ mới
 

File đính kèm

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36

chân thành cảm ơn các bạn. Mình đang tìm hiểu và áp dụng xem thế nào. sẽ báo cáo kq đến mọi người sớm nhất
 
Lần chỉnh sửa cuối:

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
xin 1 lần nữa cám ơn 2 tiền bối quanghai1969,ndu96081631 cho mình có thêm sự hiểu biết và giúp mình giải quyết đc vấn đề mà mình làm thủ công lâu nay. Mình đã test và thấy rất ổn.

Nếu được mong mọi người chỉ cho mình thêm 1 vấn đề nữa là nếu cột G của mình là 1 số lẻ thì trong bảng B8:F15 sẽ cho ra 1 kết quả làm cho cột I phát sinh những chênh lệch nguyên. vậy trường hợp này mình nên giải quyết them hướng nào....nếu phải bắt buộc có thể để 1 ô nào đó trong 1 dòng của khung B8:F15 có 1 ô chứa phần lẻ cho phù hợp.
Gửi lời cám ơn đến tất cả và chúc sức khỏe.
 

File đính kèm

Lần chỉnh sửa cuối:

vodoi2x

Nothing & Nothing
Tham gia ngày
16 Tháng năm 2011
Bài viết
1,592
Được thích
1,656
Điểm
560
xin 1 lần nữa cám ơn 2 tiền bối quanghai1969,ndu96081631 cho mình có thêm sự hiểu biết và giúp mình giải quyết đc vấn đề mà mình làm thủ công lâu nay. Mình đã test và thấy rất ổn.
Các cách hay
Tuy nhiên, tất cả đều chưa ổn vì cả 2 cách này đều phân bố đều +1 mà thôi, không có trường hợp nào +2,+3,... như ví dụ bạn đã đưa ra

bác quanghai1969 cho hỏi tại sao lại có lệnh này nhỉ


Nếu được mong mọi người chỉ cho mình thêm 1 vấn đề nữa là nếu cột G của mình là 1 số lẻ thì trong bảng B8:F15 sẽ cho ra 1 kết quả làm cho cột I phát sinh những chênh lệch nguyên. vậy trường hợp này mình nên giải quyết them hướng nào....nếu phải bắt buộc có thể để 1 ô nào đó trong 1 dòng của khung B8:F15 có 1 ô chứa phần lẻ cho phù hợp.
Gửi lời cám ơn đến tất cả và chúc sức khỏe.
Đúng như tôi nói trên: bạn sẽ đưa ra thêm trường hợp lẻ, thế là lại khác rồi,
Bạn nên đưa ra 1 lần lun tránh sửa đi sửa lại ==> không được giải pháp như mong muốn
 
Lần chỉnh sửa cuối:

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Các cách hay
Tuy nhiên, tất cả đều chưa ổn vì cả 2 cách này đều phân bố đều +1 mà thôi, không có trường hợp nào +2,+3,... như ví dụ bạn đã đưa ra

bác quanghai1969 cho hỏi tại sao lại có lệnh này nhỉ






Đúng như tôi nói trên: bạn sẽ đưa ra thêm trường hợp lẻ, thế là lại khác rồi,
Bạn nên đưa ra 1 lần lun tránh sửa đi sửa lại ==> không được giải pháp như mong muốn
quả thực giải pháp chỉ có một và là tối ưu nhất. Và đi đến đến cái cuối cùng thì cũng cần có sự trải nghiệm và thực tế kiểm chức ( nói đại khái là test) Khi mình gặp vấn đề này mình đã k nghĩ ra thêm tình huống mới. Khi đc 2 đồng nghiệp trên hướng dẫn mình mang về và test sau đó thử nghiệm và thấy vấn đề mới. vì vậy đã đăng lên để xin thêm ý kiến.
 

quanghai1969

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,620
Được thích
7,024
Điểm
860
Nơi ở
Thuận An, Bình Dương
quả thực giải pháp chỉ có một và là tối ưu nhất. Và đi đến đến cái cuối cùng thì cũng cần có sự trải nghiệm và thực tế kiểm chức ( nói đại khái là test) Khi mình gặp vấn đề này mình đã k nghĩ ra thêm tình huống mới. Khi đc 2 đồng nghiệp trên hướng dẫn mình mang về và test sau đó thử nghiệm và thấy vấn đề mới. vì vậy đã đăng lên để xin thêm ý kiến.
Có gì đâu, chưa đạt được kết quả thì làm tiếp, thắc mắc tiếp. Dú sao đây cũng chỉ là sân chơi kiến thức thôi
Minh chưa có nhiều kinh nghiệm nên chỉ xài code bình dân thôi, nhưng cũng khoái tham gia cho vui và luyện võ công

Xem file của mình nhé
 

File đính kèm

Lần chỉnh sửa cuối:

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Có gì đâu, chưa đạt được kết quả thì làm tiếp, thắc mắc tiếp. Dú sao đây cũng chỉ là sân chơi kiến thức thôi
Minh chưa có nhiều kinh nghiệm nên chỉ xài code bình dân thôi, nhưng cũng khoái tham gia cho vui và luyện võ công

Xem file của mình nhé
siêu :)) cám ơn bạn vô cùng. File của bạn thật sự rất tuyệt
chắc chờ thêm anh ndu96081631 vào cho thêm ý kiến.
 

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Có gì đâu, chưa đạt được kết quả thì làm tiếp, thắc mắc tiếp. Dú sao đây cũng chỉ là sân chơi kiến thức thôi
Minh chưa có nhiều kinh nghiệm nên chỉ xài code bình dân thôi, nhưng cũng khoái tham gia cho vui và luyện võ công

Xem file của mình nhé
File bạn là trường hợp 1 số lẽ sẽ đc phần cho 1 Ô ngẫu nhiên nào đó đúng k? Nếu trường hợp là lẻ 3 số và phân đều cho 3 ô và giới hạn phân cho mỗi ô là 1 số nào đó. ví dụ như là "giá trần" vậy đó. Bạn thấy vấn đề này thế nào. Code bạn mình đang xem thấy rất thích thú
P/s: Mình xem cái code có đoạn
For i = 1 To UBound(dl)
For j = 1 To 5
có nghĩa là chỉ 5 cột thôi đúng k bạn..nếu 20 cột thì thêm thế nào vậy
 
Lần chỉnh sửa cuối:

quanghai1969

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,620
Được thích
7,024
Điểm
860
Nơi ở
Thuận An, Bình Dương
File bạn là trường hợp 1 số lẽ sẽ đc phần cho 1 Ô ngẫu nhiên nào đó đúng k? Nếu trường hợp là lẻ 3 số và phân đều cho 3 ô và giới hạn phân cho mỗi ô là 1 số nào đó. ví dụ như là "giá trần" vậy đó. Bạn thấy vấn đề này thế nào. Code bạn mình đang xem thấy rất thích thú
Mình không có ý kiến về vấn đề của bạn. Nếu bạn thấy gì đó chưa đã, chưa thật sự khoái thì cứ trình bày. Làm được thì mình sẽ làm, không làm được thì cũng làm, sai bạn chịu mà.... hic
 

po_op_po_op

Thành viên mới
Tham gia ngày
9 Tháng mười một 2006
Bài viết
30
Được thích
0
Điểm
663
Tuổi
36
Mình không có ý kiến về vấn đề của bạn. Nếu bạn thấy gì đó chưa đã, chưa thật sự khoái thì cứ trình bày. Làm được thì mình sẽ làm, không làm được thì cũng làm, sai bạn chịu mà.... hic
Nếu trong 5 cột B-C-D-E-F và có cột D mình để trống k thêm dữ liệu vào thì mình phải làm sao với code vậy bạn.
P/s: bạn có nhận trò k.:)
 

quanghai1969

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,620
Được thích
7,024
Điểm
860
Nơi ở
Thuận An, Bình Dương
Top Bottom