Mình đang gặp khó khăn về việc chan 1 số ra nhiều ô trong 1 sheet (1 người xem)

Liên hệ QC

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

po_op_po_op

Thành viên mới
Tham gia
9/11/06
Bài viết
35
Được thích
0
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.
 
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

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
 
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
 
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:
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...
 
Lần chỉnh sửa cuối:
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:
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:
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



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:
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

  • untitled.JPG
    untitled.JPG
    27 KB · Đọc: 16
Lần chỉnh sửa cuối:
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:
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.
 
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:
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.
 
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:
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
 
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.:)
 
Bỏ thế nào bạn :).....còn For 1=1 to 20 thì mình biết edit chỗ nào còn vụ bỏ ô nào trong khi các ô là liền kế nao
Thì sau khi chay code xong bạn chèn vào 1 cột thì sẽ có 1 cột trống rồi.
Còn cái vụ thêm cột hay bớt cột gi gì đó thì ảnh hưởng code nhiều lắm, chắc là không sửa được code đâu
 
Mình dùng 1 bảng test khác để thử công thức của tiền bối ndu96081631 ( mình rất thích ý tưởng của ndu96081631, vì mình dùng công thức excel chủ yếu để chủ động )
và mình gửi lại 1 file có vẻ chưa đc thuận lợi lắm. Nên mặt dày mong các bạn xem giúp mình. Vấn để là ở SheetB1 và cột chênh lệch :((. mình tính cho 2 cột này =0
Mong các bạn giúp mình hướng giải quyết với
 

File đính kèm

Mình dùng 1 bảng test khác để thử công thức của tiền bối ndu96081631 ( mình rất thích ý tưởng của ndu96081631, vì mình dùng công thức excel chủ yếu để chủ động )
và mình gửi lại 1 file có vẻ chưa đc thuận lợi lắm. Nên mặt dày mong các bạn xem giúp mình. Vấn để là ở SheetB1 và cột chênh lệch :((. mình tính cho 2 cột này =0
Mong các bạn giúp mình hướng giải quyết với

Bạn ạ, bạn nói tôi không hiểu. Dữ liệu dù thế nào chăng nữa thì "qui tắc chan" do bạn đặt ra, sao bạn lại nói là phải "trải nghiệm" gì đó thì mới ra qui tắc chan?
Tôi đã đọc tới bài #24 và vẫn chưa biết "qui tắc" chan của bạn thế nào.
Đọc bài đầu của bạn khó hiểu nên tôi đọc file.
Ta có số k nguyên dương và số ô là n < k. Khi chia k cho n ta được thương m và số dư r. Ta nhập vào các ô giá trị m. Tiếp theo ta xét r. Nếu r = 0 (chia hết) thì thôi. Nếu r > 0 thì số dư này ta chia đều cho một số ô p với p < n (do p <= r < n). Do p < n nên ta sẽ thêm cho một số ô (chứ không phải cho tất cả) trong n ô, vì vậy ta phải chọn ngẫu nhiên p ô trong n ô. Tới chỗ này tôi hiểu. Nhưng ...

a. lúc nào thì ta chọn p = r và mỗi ô sẽ được +1 (dòng 1 của vd. giả lập có p = r = 2)
b. Lúc nào thì chọn p < n (dòng 2 có p = 3 < 4 = r). Và nếu chọn p < r thì thì sau khi +1 (hoặc 2, 3, ...) cho mỗi ô được chọn ngẫu nhiên thì vẫn còn "thừa" 0 <= r1 < p, vậy thì số thừa này sẽ được sử dụng như thế nào? Nhìn vào dòng 2 tôi có cảm giác là bạn sẽ tiếp tục chọn ngẫu nhiên p1 ô (p1 <= r1) trong p ô được chọn ngẫu nhiên. Cái này với vd. 2 nó là:

k = 24, n = 5 => m = 4, r = 4. Chọn p = 3 (chọn được B, D, E) => +1 vào B, D, E và còn r1 = 1. Cái 1 này ta cộng vào 1 ô ngẫu nhiên (p1 = 1) từ 3 ô (p = 3) B, D, E. Ta có 1 ô ngẫu nhiên này là B, vậy cộng thêm 1 vào B.

Tôi thử đoán "qui tắc" chan thế nào:

Dữ liệu đầu vào: Có n ô và giá trị k nguyên dương với k >= n. Ta thực hiện các bước:

1. Ta chia k cho n được thương là m và số dư là r. Ta cộng vào mỗi ô đã cho giá trị m. Nếu r = 0 thì kết thúc, nếu r > 0 thì làm tiếp bước 2.
2. Trước tiên ta chọn p (tức số các ô sẽ được chọn ngẫu nhiên - do có thể p = n (dòng 1) hoặc p < n - dòng 2) trong khoảng 1 --> r. Sau khi có p <= n rồi thì ta chọn p ô ngẫu nhiên từ n ô. Có được p ô ngẫu nhiên rồi thì quay lại bước 1 nhưng với tập số liệu mới: n = p, k = r

Với "qui tắc" như trên thì vd. dòng 7 với n = 5, k = 34 sẽ được diễn giải như sau:
m = k \ n = 6, r = k mod n = 4. Ta cộng 6 vào các ô A, B, ..., E. Do r > 0 ta làm tiếp bước 2. Trước tiên ta chọn số ô ngẫu nhiên trong khoảng 1 --> 4, được p = 3. Ta chọn 3 ô ngẫu nhiên trong 5 ô (A, B, ..., E) và được các ô A, B, E. Ta quay lại bước 1 với n = p = 3 (3 ô A, B, E) và k = r = 4. Với tập giá trị mới này ta có m = k \ n = 1, r = k mod n = 1. Ta cộng 1 (tức m) vào các ô A, B, E - tới chỗ này thì có A = B = E = 7, C = 6, D = 6. Do r = 1 > 0 nên ta làm tiếp bước 2. Trước tiên ta chọn số p, tức số các ô ngẫu nhiên cần chọn. Do r = 1 nên số các ô cần chọn p = 1 (chọn p ngẫu nhiên trong khoảng 1 --> r, tức trong 1 --> 1). Ta chọn p = 1 ô ngẫu nhiên trong 3 ô A, B, E (do n = 3). Ta chọn được ô A. Ta quay lại bước 1 với tập dữ liệu mới: n = p = 1 (1 ô duy nhất, cụ thể là ô A), k = r = 1. Với dữ liệu mới này thì m = k \ n = 1, r = k mod 1 = 0. Ta cộng thêm vào ô A giá trị m = 1. Do r = 0 nên "trò chơi" kết thúc tại đây. Kết quả ta có A = 8, B = 7, C = D = 6, E = 7

Nếu "qui tắc" chan của bạn đúng như thế thì tôi cũng đã "vô tình" phát biểu nó ở dạng thuật toán mất rồi. Bây giờ thì chả còn "cơ hội" để mò tìm thuật toán nữa. Chỉ còn phải code thôi.
-----------
Nếu qui tắc chan của bạn không đúng như trên thì tôi hỏi: qui tắc chan của bạn thế nào? Không thể nói là phải "trải nghiệm" mới ra qui tắc chan. Qui tắc là do bạn đặt ra, bạn muốn thế nào thì phải thế ấy, thế thôi. Nếu cái qui tắc mà bạn "thích như thế" nó có mâu thuẫn (cái kiểu: tôi muốn ăn cái bánh nhưng vẫn còn lại cái bánh) thì mọi người sẽ chỉ ra.
Đã là qui tắc thì bắt buộc bạn phải phát biểu ở dạng tổng quát. Các ví dụ chỉ là giúp làm sáng tỏ qui tắc khi cái qui tắc đó nó hơi rắc rối, khó hiểu.

Tôi thấy một vài bạn có vẻ hiểu ý tác giả, vậy các bạn có thể phát biểu cái "qui tắc" chan của tác giả thế nào không? Các bước thao tác như thế nào? Nếu không biết qui tắc thì làm sao thao tác được?
 
Lần chỉnh sửa cuối:
Nghĩa "chan" là bạn có 1 cột dữ liệu và bạn chia ra chô các ô khác trong 1 vùng chỉ định, và tổng dữ liệu đc chia này = lại cái dữ liệu mà bạn đem đi "chan" kia.
 
Nghĩa "chan" là bạn có 1 cột dữ liệu và bạn chia ra chô các ô khác trong 1 vùng chỉ định, và tổng dữ liệu đc chia này = lại cái dữ liệu mà bạn đem đi "chan" kia.

Chung chung quá. Nếu "qui tắc" chỉ ngắn gọn thế thì ta xét vd. ở dòng 7.
Bạn có ở cột dữ liệu số 34. Chan thế nào? Chan đều? Thế thì A = B = C = D = E = 6,8
Sao, không được à? Thế thì phải giải thích thêm cái "chan" ngắn đến dễ sợ kia. Ta thêm nhé: Chia lấy thương nguyên dương? Thế thì A = B = C = D = E = 6. Còn lại 4 thì làm gì với nó đây? Từ cái "chan" ngắn cũn cỡn kia không biết được phải làm gì với cái 4 này cả. Bổ sung thêm nhé: Số 4 này bổ sung cho một số ô được chọn ngẫu nhiên. Được thôi, nhưng số 4 này được bổ sung cho 4 (hay 3, 2, 1) ô được chọn ngẫu nhiên trong 5 ô kia? Từ qui tắc "chan" ngắn kia không biết phải làm gì. Chọn 4 ô bất kỳ hay 3, 2, 1 ô để chan đều? Và nếu lại còn dư thì lại chọn ... để chan đều? Như thế cái qui tắc kia nó đâu có ngắn và chung chung như bạn đã viết?
Bạn chỉ cho vd. nhưng cho dù bạn cho 1000 vd. thì nó chũng chỉ là vd. chứ từ 1000 vd. cũng không thể suy ra qui tắc được. Bởi cái qui tắc đoán trên cơ sở 1000 dữ liệu có thể vẫn khác với qui tắc thực (tức qui tắc của bạn nhưng bạn không phát biểu rõ ra). Rất có thể với 1000 dữ liệu cụ thể này thì qui tắc đoán mò trên cơ sở 1000 dữ liệu đúng với qui tắc thực nhưng với dữ liệu 1001 nào đó thì nó lại không đúng với qui tắc thực.
Thôi, tôi không hiểu nên hỏi thế thôi. Chúc bạn có được kết quả theo ý mình.
 
Lần chỉnh sửa cuối:
Mình dùng 1 bảng test khác để thử công thức của tiền bối ndu96081631 ( mình rất thích ý tưởng của ndu96081631, vì mình dùng công thức excel chủ yếu để chủ động )
và mình gửi lại 1 file có vẻ chưa đc thuận lợi lắm. Nên mặt dày mong các bạn xem giúp mình. Vấn để là ở SheetB1 và cột chênh lệch :((. mình tính cho 2 cột này =0
Mong các bạn giúp mình hướng giải quyết với

Tôi sửa sơ qua hàm thế này:
PHP:
Function DistNum(ByVal Num As Double, ByVal Amount As Long)
  Dim dRem As Double, lQuot As Long, i As Long
  Dim Arr() As Double
  On Error Resume Next
  ReDim Arr(1 To Amount)
  lQuot = Int(Num / Amount)
  dRem = Num - lQuot * Amount
  dRem = Round(dRem, 4)
  For i = 1 To Amount
    Arr(i) = lQuot + IIf(dRem >= 1, 1, dRem)
    dRem = dRem - IIf(dRem > 1, 1, dRem)
  Next
  DistNum = Draw(Arr, Amount)
End Function
Cũng không chắc có đúng ý bạn hay không? (nói thiệt là tôi rất ngán mấy cái INT và MOD trong VBA ---> Toàn cho kết quả sai bét)
Lưu ý
- hàm mảng này khi dùng phải quét 1 lần nhiều cell rồi gõ công thức trên thanh Formula, sau đó bấm tổ hợp phím Ctrl + Shift + Enter.
- Bạn không thể gõ vào 1 cell rồi kéo fill sang các cell khác ---> Kết quả sẽ sai
 

File đính kèm

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

Back
Top Bottom