Công thức tính số tờ tiền (2 người xem)

  • Thread starter Thread starter NHGiang
  • Ngày gửi Ngày gửi
Liên hệ QC

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

NHGiang

Thành viên mới
Tham gia
21/9/07
Bài viết
6
Được thích
0
Chào cả nhà. Mình đang phải chia lương cho moi người trong công ty. Có cách nào để tính được loại tiền nào cần bao nhiều tờ để thuận lợi cho việc chia lương không nhỉ. Mong mọi người chỉ giáo.
VD: Tổng lương là: 1.024.000 chia cho hai người là 752.000 và 272.000 thì tính ra được số tờ tối ưu là 9 tờ 100,000; 2 tờ 50,000; 1 tờ 20,000 và 2 tờ 2,000.
Nhờ cả nhà giúp mình nhe! Cảm ơn.
 
Chào cả nhà. Mình đang phải chia lương cho moi người trong công ty. Có cách nào để tính được loại tiền nào cần bao nhiều tờ để thuận lợi cho việc chia lương không nhỉ. Mong mọi người chỉ giáo.
VD: Tổng lương là: 1.024.000 chia cho hai người là 752.000 và 272.000 thì tính ra được số tờ tối ưu là 9 tờ 100,000; 2 tờ 50,000; 1 tờ 20,000 và 2 tờ 2,000.

Theo mình, muốn giải quyết vấn đề trên thì cần tìm nghiệm nguyên dương của phương trình vô định sau đây:
100X1 + 50X2 + 20X3 + 2X4 = 1024 (PT đã giản ước: chia 2 vế cho 1000)

Với X1 là số tờ có mệnh giá 100.000 đ
X2 là số tờ có mệnh giá 50.000 đ
X3 là số tờ có mệnh giá 20.000 đ
X4 là số tờ có mệnh giá 2.000 đ
Ngoài ra, trên thực tế còn có nhiều loại tiền có mệnh giá khác nữa (500.000đ, 200.000đ, 1.000đ), nhưng với số lượng như bạn đã nêu thì cũng khá phức tạp rồi.
 
Một cách còn hơi thô & xài hàm mảng, như sau

Mã:
Option Explicit:                Option Base 1
[B]Function ToTien(SoTien As Double) As Variant[/B]
 '500; 200; 100; 50; 20; 10; 5; 2; 1
 If SoTien / 1000 > SoTien \ 1000 Then
 Else
    SoTien = SoTien \ 1000:             Dim SoChia, jJ As Byte
    ReDim SoTo(1, 9) As Byte
 End If
 For jJ = 1 To 9
    SoTo(1, jJ) = 0
    SoChia = Choose(jJ, 500, 200, 100, 50, 20, 10, 5, 2, 1)
    SoTo(1, jJ) = SoTien \ SoChia
    SoTien = SoTien Mod SoChia
 Next
 ToTien = SoTo
[B]End Function[/B]
Và dưới đây là kết quả:
|A|B|C|D|E|F|G|H|I|J
| SoTien |500.000|200.000|100.000|50.000|20.000|10.000|5.000|2.000|1.000
|1.250.000|2|1|0|1|0|0|0|0|0
|1.605.000|3|0|1|0|0|0|1|0|0
|1.960.000|3|2|0|1|0|1|0|0|0
|2.315.000|4|1|1|0|0|1|1|0|0
|73.000|0|0|0|1|1|0|0|1|1
|3.025.000|6|0|0|0|1|0|1|0|0
|3.381.000|6|1|1|1|1|1|0|0|1
|8.135.000|16|0|1|0|1|1|1|0|0
|9.099.000|18|0|0|1|2|0|1|2|0
|6.789.000|13|1|0|1|1|1|1|2|0
Chú í: Muốn có kết quả của hàm chỉ ra số tờ tiền của [A2]=1.250.000 ta phải chọn tất thảy 9 ô trong hàng từ [B2], Sau khi nhập tên hàm & địa chỉ iêu cầu, ta phải kết thúc bằng tổ hợp 3 fím

Hàm chỉ viết cho số tiền chẵn từ ngàn đồng trở lên; Muốn có tờ mệnh giá nhỏ hơn hãy tự thử sức hay iêu cầu thêm!

Chúc xuân vui vẽ!
 
Nếu chia cho 1 người thôi thì chẳng vấn đề gì! Nhưng chia cho 2 - 3 - 4 người thì sao?
Em đã chỉnh lại 1 chút trong code nhưng xem ra không vừa ý lắm.
Mọi người xem file nha!
PHP:
Option Explicit:                Option Base 1
Function ToTien(SoTien As Double, Optional Luot As Integer = 2) As Variant
 ''500; 200; 100; 50; 20; 10; 5; 2; 1
 Dim SoChia As Integer, jJ As Byte
 ReDim SoTo(1, 10) As Byte
 SoTo(1, 10) = (SoTien / 1000) Mod Luot
 SoTien = SoTien \ (1000 * Luot)
 
 For jJ = 1 To 9
    SoTo(1, jJ) = 0
    SoChia = Choose(jJ, 500, 200, 100, 50, 20, 10, 5, 2, 1)
    SoTo(1, jJ) = (SoTien \ SoChia) * Luot
    SoTien = SoTien Mod SoChia
 Next
 
 ToTien = SoTo
End Function
Thân.
 

File đính kèm

Mã:
Option Explicit:                Option Base 1
[B]Function ToTien(SoTien As Double) As Variant[/B]
 '500; 200; 100; 50; 20; 10; 5; 2; 1
 If SoTien / 1000 > SoTien \ 1000 Then
 Else
    SoTien = SoTien \ 1000:             Dim SoChia, jJ As Byte
    ReDim SoTo(1, 9) As Byte
 End If
 For jJ = 1 To 9
    SoTo(1, jJ) = 0
    SoChia = Choose(jJ, 500, 200, 100, 50, 20, 10, 5, 2, 1)
    SoTo(1, jJ) = SoTien \ SoChia
    SoTien = SoTien Mod SoChia
 Next
 ToTien = SoTo
[B]End Function[/B]
Và dưới đây là kết quả:


Chúc xuân vui vẽ!

Bài này không cần VBA đâu

Dùng chức năng Solver là đủ và nhanh nữa

Nếu dùng VBA thì cũng chỉ là tự động cho solve là được nhanh hơn
.
 
Cách 1:
Dùng bảng liệt kê số tiền lãnh, mệnh giá tiền (xếp thứ tự từ mệnh giá từ lớn đến nhỏ). Hàm TienPhat sẽ tính số tờ phải trả cho từng mệnh giá.
|
A​
|
B​
|
C​
|
D​
|
E​
|
F​
|
G​
|
H​
|
I​
|
J​
|
K​
|
L​
|
M​
|
1​
|
Bảng kê​
|||
2​
|
SoTien​
|
500000​
|
200000​
|
100000​
|
50000​
|
20000​
|
10000​
|
5000​
|
2000​
|
1000​
|
500​
|
200​
|
100​
|
3​
|
2.345.100​
|
4​
|
1​
|
1​
|
0​
|
2​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
1​
|
4​
|
600.000​
|
1​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
5​
|
1.960.000​
|
3​
|
2​
|
0​
|
1​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
6​
|
2.315.000​
|
4​
|
1​
|
1​
|
0​
|
0​
|
1​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
7​
|
73.000​
|
0​
|
0​
|
0​
|
1​
|
1​
|
0​
|
0​
|
1​
|
1​
|
0​
|
0​
|
0​
|
8​
|
3.025.000​
|
6​
|
0​
|
0​
|
0​
|
1​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
9​
|
3.381.000​
|
6​
|
1​
|
1​
|
1​
|
1​
|
1​
|
0​
|
0​
|
1​
|
0​
|
0​
|
0​
|
10​
|
8.135.000​
|
16​
|
0​
|
1​
|
0​
|
1​
|
1​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
11​
|
9.099.000​
|
18​
|
0​
|
0​
|
1​
|
2​
|
0​
|
1​
|
2​
|
0​
|
0​
|
0​
|
0​
|
12​
|
6.789.000​
|
13​
|
1​
|
0​
|
1​
|
1​
|
1​
|
1​
|
2​
|
0​
|
0​
|
0​
|
0​
|
Công thức tại B2:=tienphat($A3;B$2;$B$2:$I$2)
Mã:
Function TienPhat(SoTien As Long, LoaiTien As Long, RgTien As Range) As Long
Dim iTien As Long, i As Long
For i = 1 To RgTien.Cells.Count
  iTien = Application.WorksheetFunction.Index(RgTien, i)
  TienPhat = SoTien \ iTien
  If iTien = LoaiTien Then Exit For
  SoTien = SoTien - iTien * TienPhat
Next
End Function
Hàm có 3 đối số:
SoTien: số tiền phải phát
LoaiTien: mệnh giá tiền phát
RgTien: vùng chứa các loại tiền phát
Chú ý: có thể số tiền phát thấp hơn số tiền thực lãnh do khai báo mệnh giá thiếu

Cách 2:

Dùng cho bảng in số tờ theo từng mệnh giá phải trả, dùng hàm PhatTien.
[
|
A​
|
B​
|
C​
|
1​
||
Số tiền​
|
Liệt kê từng mệnh giá​
|
2​
|Trường hợp 1|
2.345.050​
|2.345.050 ≈ 2.345.000 = 500.000x4 + 500.000x1 + 500.000x1 + 500.000x2 + 500.000x1|
3​
|Trường hợp 2|
600.000​
|600.000 = 500.000x1 + 500.000x1|

Trường hợp 1: số tiền phát > số tiền lãnh
Trường hợp 2: số tiền phát = số tiền lãnh

Mã:
Function PhatTien(SoTien As Long) As String
Dim Tien As Long, soDu As Long, n As Long, nTo As Long
Tien = SoTien
varTien = Array(500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000, 500, 200)
soDu = SoTien Mod (varTien(UBound(varTien)))
If soDu > 0 Then
  PhatTien = Format(SoTien, "#,##0") & " " & ChrW(8776) & " " & Format(SoTien - soDu, "#,##0") & " = "
Else
  PhatTien = Format(SoTien, "#,##0") & " = "
End If
For n = 0 To UBound(varTien)
  nTo = Tien \ varTien(n)
  If nTo > 0 Then
    PhatTien = PhatTien & Format(varTien(i), "#,##0") & "x" & nTo & " + "
    Tien = Tien - (varTien(n) * nTo)
  End If
Next
PhatTien = Left(PhatTien, Len(PhatTien) - 3)
End Function
Bạn khai báo mệnh giá trong varTien
Ví dụ 1: mệnh giá nhỏ nhất 1.000
Mã:
 = Array(500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000)
Ví dụ 2: mệnh giá nhỏ nhất 200
Mã:
 = Array(500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000, 500, 200)
 
Lần chỉnh sửa cuối:
Anh có thể hướng dẫn kỹ hơn về cách dùng Solver trong bài toán này không? Em cũng đang học về Solver nhưng chưa hiểu lắm! Cảm ơn anh trước!

xem hình sau nhé

Vd_sotien.png


có thể thêm các mệnh giá tiền khác /
hoặc loại nào không có có thể xóa đi - ví dụ không có 200.000 đ thì ta xóa giá trị Ô đó đi

chắc là không khó hiểu,
Kết quả là tối ưu số tờ tiền trả
 

File đính kèm

  • Vd_sotien.png
    Vd_sotien.png
    66.2 KB · Đọc: 331
Lần chỉnh sửa cuối:

File đính kèm

Lần chỉnh sửa cuối:
Quả là tiện lợi nhưng hơi khó thiết lập tham số cho solver, mới mờ mờ hiểu thôi, các bác có kinh nghiệm gì không?
Nếu gõ sai số tiền ở ô C1 (chẳng hạn 12,500,500 mà ko có liệt kê mệnh giá tiền nhỏ hơn 500) Solver chạy cả ngày luôn.
 
Quả là tiện lợi nhưng hơi khó thiết lập tham số cho solver, mới mờ mờ hiểu thôi, các bác có kinh nghiệm gì không?
Nếu gõ sai số tiền ở ô C1 (chẳng hạn 12,500,500 mà ko có liệt kê mệnh giá tiền nhỏ hơn 500) Solver chạy cả ngày luôn.


Thực ra có cách (dĩ nhiên khi đó xác định trả thiếu hoặc dư): DOSNET thay đổi đ/k = thành điều kiện trong khoảng (+/-)

Bài này có thể làm công thức thuần túy (chắc là mảng) - a ndu... thử sức là được
 
VD: Tổng lương là: 1.024.000 chia cho hai người là 752.000 và 272.000 thì tính ra được số tờ tối ưu là 9 tờ 100,000; 2 tờ 50,000; 1 tờ 20,000 và 2 tờ 2,000.

Tại sao số tờ tối ưu là 9 tờ 100,000 mà không là 1 tở 500,000, 2 tờ 200,000

Nếu bạn chọn "số tờ tối ưu" thì nên dùng nguyên tắc "tham lam": dùng nhiều nhất tờ tiền có mệnh giá cao nhất, số còn lại dùng nhiều nhất tờ tiền có mệnh giá cao tiếp theo, v.v...

Nếu thể hiện trên Excel, với mỗi khoản tiền (trong ví dụ là 2 khoản) ta có các cột mệnh giá tiền từ cao xuống. Sử dụng các hàm INT, MOD để tính số tờ tiền cho từng khoản.

Ví dụ với khoản 752.000, số tờ 500,000 là =INT(752000/500000) (để tiện cho ví dụ sau, ta coi là công thức nhập ở ô B2
số tờ 200,000 là INT(MOD(752.000,500000)/200000)
hoặc INT((752.000 - B2*500000)/200000)

(các con số 500000, 200000 có thể dùng địa chỉ ô)
 
Việc tính chia tờ tối ưu nhất không phải là đối sách.
Còn việc chia số tờ để cho nhiều người mà không có định mức riêng của từng người thì cũng là 1 đáng ngại.

+Nếu ta chia cho 2 người mà biết người A: 752.000 còn người B: 272.000
Thì vấn đề chỉ là tính số tờ tối ưu cho người A và người B thôi.

+Nếu ta chia điều cho 2 người thì sao? Rồi còn 3 người nữa? Vậy sẽ không đều và dư ra đó.
Ở Topic trên em cũng đã đề cập vấn đề này rồi đó.
Thân.
 
Đây là công thức đếm số tờ tiền hay đây !
Mời các bác tham khảo file đính kèm nhé
Nhớ đừng quên cảm ơn mình đấy
Công thức trong file thì hay nhưng không thực tế tí nào!
Ví dụ:
- Tôi lĩnh lương cho 10 công nhân, tổng số tiền = 10 triệu đồng toàn giấy 50 ngàn thì chia làm sao?
Với công thức của bạn nó chia trật lất vì chưa tính đến tổng tiền và số tờ của từng loại tiền hiện đang có
 
Công thức trong file thì hay nhưng không thực tế tí nào!
Ví dụ:
- Tôi lĩnh lương cho 10 công nhân, tổng số tiền = 10 triệu đồng toàn giấy 50 ngàn thì chia làm sao?
Với công thức của bạn nó chia trật lất vì chưa tính đến tổng tiền và số tờ của từng loại tiền hiện đang có


Đâu có gì đâ nè, Nếu bạn không có 500.000 thì bạn xoá cột đó đi và nó sẽ tự nhảy qua cột 200.000 mà

Bạn không có loại tiền nào thì xoá cột đó,
 
Đâu có gì đâ nè, Nếu bạn không có 500.000 thì bạn xoá cột đó đi và nó sẽ tự nhảy qua cột 200.000 mà

Bạn không có loại tiền nào thì xoá cột đó,
Ấy... bạn chưa hiểu ý tôi rồi...
Ý tôi muốn nói công thức trong file của bạn chỉ có thể áp dụng được trong trường hợp quỹ lương của bạn dồi dào đến mức muốn chia ai loại tờ tiền nào cũng được (bạn là ngân hàng chăng?)
Còn như khi bạn lĩnh về thì nó đâu phải vậy ---> Số tiền của từng loại là hạn chế
Bạn phải để ý đến điều này chứ, ví dụ: bạn có 100 tờ 500 ngàn, 20 tờ 200 ngàn, 500 tờ 100 ngàn ---> Khi ấy bạn phải chia theo số tờ bạn đang có ---> Không thể tự do được
 
Ấy... bạn chưa hiểu ý tôi rồi...
Ý tôi muốn nói công thức trong file của bạn chỉ có thể áp dụng được trong trường hợp quỹ lương của bạn dồi dào đến mức muốn chia ai loại tờ tiền nào cũng được (bạn là ngân hàng chăng?)
Còn như khi bạn lĩnh về thì nó đâu phải vậy ---> Số tiền của từng loại là hạn chế
Bạn phải để ý đến điều này chứ, ví dụ: bạn có 100 tờ 500 ngàn, 20 tờ 200 ngàn, 500 tờ 100 ngàn ---> Khi ấy bạn phải chia theo số tờ bạn đang có ---> Không thể tự do được[/quote

Ủa nếu vậy khi lương cần tiền lẻ thì bạn cũng phải lo mà đổi chứ, không lẽ bạn thiếu công nhân được hả

Vd: Lương của công nhân là 6.529.000 đ thì bạn phải làm sao với 29.000 đồng?

Thì căn cứ vào lượng tiền tồn tại quỹ công ty có bạn phân chia cho hợp lý chứ,
Với mức lương là 6.529.000 mà quỹ công ty chỉ có các loại mệnh giá như sao 500.000 10tờ, 200.000 7tờ, 100.000 1tờ, 20.000 1tờ, 5.000 1tờ, 2.000 2tờ ( Căn cứ vào mệnh giá tiền đang có mà phân chia).
Thay vì theo như bảng phân chia tiền của mình là 500.000 13tờ, 20.000 1tờ, 5.000 1tờ, 2.000 2tờ.
 

File đính kèm

Ấy... bạn chưa hiểu ý tôi rồi...
Ý tôi muốn nói công thức trong file của bạn chỉ có thể áp dụng được trong trường hợp quỹ lương của bạn dồi dào đến mức muốn chia ai loại tờ tiền nào cũng được (bạn là ngân hàng chăng?)
Còn như khi bạn lĩnh về thì nó đâu phải vậy ---> Số tiền của từng loại là hạn chế
Bạn phải để ý đến điều này chứ, ví dụ: bạn có 100 tờ 500 ngàn, 20 tờ 200 ngàn, 500 tờ 100 ngàn ---> Khi ấy bạn phải chia theo số tờ bạn đang có ---> Không thể tự do được[/quote

Ủa nếu vậy khi lương cần tiền lẻ thì bạn cũng phải lo mà đổi chứ, không lẽ bạn thiếu công nhân được hả

Vd: Lương của công nhân là 6.529.000 đ thì bạn phải làm sao với 29.000 đồng?

Thì căn cứ vào lượng tiền tồn tại quỹ công ty có bạn phân chia cho hợp lý chứ,
Với mức lương là 6.529.000 mà quỹ công ty chỉ có các loại mệnh giá như sao 500.000 10tờ, 200.000 7tờ, 100.000 1tờ, 20.000 1tờ, 5.000 1tờ, 2.000 2tờ ( Căn cứ vào mệnh giá tiền đang có mà phân chia).
Thay vì theo như bảng phân chia tiền của mình là 500.000 13tờ, 20.000 1tờ, 5.000 1tờ, 2.000 2tờ.
Đương nhiên với số tờ mà ta lảnh về để chia thì không bao giờ chia chính xác được ---> Ở đây muốn nói đến giải pháp tối ưu nhất, có nghĩa là bạn chia thế nào để ít phải đổi tiền nhất
Chứ còn với số lượng tiền dồi dào, tôi cần gì công thức cho mệt ---> Tôi cứ chia thoải mái
Bài toán này không dể nhai như bạn nghĩ đâu! Nó đã có từ lâu trên GPE rồi, bạn tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=6337
 
Đương nhiên với số tờ mà ta lảnh về để chia thì không bao giờ chia chính xác được ---> Ở đây muốn nói đến giải pháp tối ưu nhất, có nghĩa là bạn chia thế nào để ít phải đổi tiền nhất
Chứ còn với số lượng tiền dồi dào, tôi cần gì công thức cho mệt ---> Tôi cứ chia thoải mái
Bài toán này không dể nhai như bạn nghĩ đâu! Nó đã có từ lâu trên GPE rồi, bạn tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=6337

ý của ndu96081631 là sau khi làm xong bảng lương ta có thể có được nhu cầu tiền lẻ như thế nào để có kế hoạch khi rút tiền ở ngân hàng vế chi lương ta đổi tiền lẻ luôn, chứ không phải có tiền lẻ rồi mới tính cách chia.??????

Không biết có phải hong nữa....../-*+/
 
Hãy tưởng tượng việc ATM phải làm NTN?

(+) Số tờ tiền hiện có tại thời điểm khi 1 khách hàng bấm Password là hữu hạn;
(+) Nhưng số tiền khách hàng sẽ bấm vô yêu cầu chi trả mỗi lần là loạn xị ngậu.
Vậy phải giải quyết sao đây?
Có lẻ theo kiểu hết nạt vạc đến xương thôi. :-=
 
ý của ndu96081631 là sau khi làm xong bảng lương ta có thể có được nhu cầu tiền lẻ như thế nào để có kế hoạch khi rút tiền ở ngân hàng vế chi lương ta đổi tiền lẻ luôn, chứ không phải có tiền lẻ rồi mới tính cách chia.??????

Không biết có phải hong nữa....../-*+/
Ah không bạn à! Ý tôi ngược lại:
- Tôi lĩnh tiền về, đếm được từng loại tiền có bao nhiêu tờ
- Với lương của từng người, tôi phải dựa vào tiền đang có sẳn để chia sao cho tối ưu nhất, tức ít đổi tiền nhất
Còn file của bạn kia là chia theo kiểu THOẢI MÁI, hết mệnh giá này đến mệnh giá khác ---> Như vậy là không thực tế ---> Có bao nhiêu chia bao nhiêu chứ đâu thể chia rồi mới tính rằng ta cần bao nhiêu
(+) Số tờ tiền hiện có tại thời điểm khi 1 khách hàng bấm Password là hữu hạn;
(+) Nhưng số tiền khách hàng sẽ bấm vô yêu cầu chi trả mỗi lần là loạn xị ngậu.
Vậy phải giải quyết sao đây?
Có lẻ theo kiểu hết nạt vạc đến xương thôi. :-=
Dạ đúng, hết nạt vạc đến xương... nhưng phải xét xem NẠC và XƯƠNG hiện ta đang có là bao nhiêu ---> Không thể muốn vạc thế nào thì vạc
 
Lần chỉnh sửa cuối:
Ah không bạn à! Ý tôi ngược lại:
- Tôi lĩnh tiền về, đếm được từng loại tiền có bao nhiêu tờ
- Với lương của từng người, tôi phải dựa vào tiền đang có sẳn để chia sao cho tối ưu nhất, tức ít đổi tiền nhất
Còn file của bạn kia là chia theo kiểu THOẢI MÁI, hết mệnh giá này đến mệnh giá khác ---> Như vậy là không thực tế ---> Có bao nhiêu chia bao nhiêu chứ đâu thể chia rồi mới tính rằng ta cần bao nhiêu

Dạ đúng, hết nạt vạc đến xương... nhưng phải xét xem NẠC và XƯƠNG hiện ta đang có là bao nhiêu ---> Không thể muốn vạc thế nào thì vạc

Thì cũng giống nhau thôi mà anh, nếu chừng ấy tiền và chứng ấy người lãnh lương nếu chia theo phương pháp tối ưu mà số tiền có sẵn không dủ chia thì anh cũng phải đổi thêm tiền. Choi nên sau khi tính lương xong ta dùng phương pháp nào đó để tính được nhu cầu tiền lẻ là bao nhiêu, gồm mệnh giá từng loại với số lương như thế nào, sau đó kiểm tra quỹ mình thiếu đủ bao nhiêu rồ sẽ đổi tiền.

Không không trúng ý nữa thì xin anh bỏ qua cho....
 
tungnguyen_kt đã viết:
Thì cũng giống nhau thôi mà anh, nếu chừng ấy tiền và chứng ấy người lãnh lương nếu chia theo phương pháp tối ưu mà số tiền có sẵn không dủ chia thì anh cũng phải đổi thêm tiền. Choi nên sau khi tính lương xong ta dùng phương pháp nào đó để tính được nhu cầu tiền lẻ là bao nhiêu, gồm mệnh giá từng loại với số lương như thế nào, sau đó kiểm tra quỹ mình thiếu đủ bao nhiêu rồ sẽ đổi tiền.

Không không trúng ý nữa thì xin anh bỏ qua cho....
Vâng! Chia thì ai cũng chia được (nếu không chắc kế toán nghĩ việc luôn) ---> Vấn đề nằm ở chổ ai có cách chia sao cho ít phải đổi tiền nhất
Đó gọi là giải pháp tối ưu
Vì nếu ta cứ chia theo kiểu hết mệnh giá này đến mệnh giá khác thì chắc gì sẽ ít đổi tiền
 
Vậy bạn có cách nào mà chia tiền mà hạn chế phải đổi tiền nhất bạn chỉ cho mình với
đối với lương công nhân mà có số tiền lẻ 9.000, 6.000, 7.000 thì mình phải làm sao để hạn chế đổi tiền
Ở công ty mình có đến 6.000 công nhân, mỗi lần chia tiền thiếu 1.000 hay 500 công nhân cũng đòi nữa.
Thanks a lot
 
Vậy bạn có cách nào mà chia tiền mà hạn chế phải đổi tiền nhất bạn chỉ cho mình với Ở công ty mình có đến 6.000 công nhân, mỗi lần chia tiền thiếu 1.000 hay 500 công nhân cũng đòi nữa.
Thanks a lot
Mình có cách, khỏi đổi đòng nào luôn: Mua mỗi người 1 thẻ ATM; Mấy ông bà về hưu còn đang tập dượt để xài cái ni kia mà! kha, kha. . .!$@!! Phen này ngân hàng lời to!--=0
 
Vậy bạn có cách nào mà chia tiền mà hạn chế phải đổi tiền nhất bạn chỉ cho mình với
đối với lương công nhân mà có số tiền lẻ 9.000, 6.000, 7.000 thì mình phải làm sao để hạn chế đổi tiền
Ở công ty mình có đến 6.000 công nhân, mỗi lần chia tiền thiếu 1.000 hay 500 công nhân cũng đòi nữa.
Thanks a lot
Như tôi đã nói, đây là bài toán khó ---> Trên diển đàn đã từng đề cập nhưng vẫn chưa có giãi pháp nào gọi là hiệu quả nhất
Tôi đang nghĩ không biết Solver có giải quyết ngon lành không nhỉ? Ai rành về Solver làm thử
(Món Solver này có thể nói là tuyệt chiêu của Tigertiger, đáng tiếc dạo này ít gặp thầy quá)
 
Chia lương

Lâu rồi không ghé thăm diễn đàn. Hôm nay vào thấy bài toán này cũng hay hay. Tôi xin mạo muội đưa ra một giải pháp. Mọi người xem thử rồi cho ý kiến nha.
Vui lòng xem file đính kèm
 

File đính kèm

Lâu rồi không ghé thăm diễn đàn. Hôm nay vào thấy bài toán này cũng hay hay. Tôi xin mạo muội đưa ra một giải pháp. Mọi người xem thử rồi cho ý kiến nha.
Vui lòng xem file đính kèm
Ít ra phải như thế này mới gọi là CHIA TIỀN được...
giải pháp rất hay... tôi đã thí nghiệm bằng cách thêm người vào để cho tổng số tiền lãnh gần bằng tổng quỷ lương (Quỹ lương = 82.666.500 và tiến lãnh = 82.172.000) ---> Kết quả nó chia sạch không bị thiếu tí tiền lẽ nào ---> HAY
Các bạn rảnh rổi test thêm trong nhiều trường hợp khác xem (thay đổi tiền lãnh, thay đổi số tờ của từng mệnh giá)...
Cảm ơn bạn nhiều
 
Bạn huuthang_bd vận dụng công thức rất hay. Mình viết công thức không được, phải giải quyết bằng VBA. Các bạn tham khảo tại Bài toán về chia tiền lương
.giaiphapexcel.cuueuurur
 
Lâu rồi không ghé thăm diễn đàn. Hôm nay vào thấy bài toán này cũng hay hay. Tôi xin mạo muội đưa ra một giải pháp. Mọi người xem thử rồi cho ý kiến nha.
Vui lòng xem file đính kèm
Phương án chia đạt yêu cầu chia hết tiền nhưng nếu tôi là người chậm chân lĩnh toàn 1000đ thì tôi không chịu đâu,lĩnh trước toàn 500.000đ thích hơn.
 
Đúng là chia hết tiền nhưng không công bằng, chia tiền to trước rồi mới đến tiền nhỏ, lương 10 triệu mà toàn lĩnh tiền 10.000 vì chậm chân thì cũng chán. Làm sao phân bổ được tiền nữa mới ứng dụng vào thực tế được!

Thêm nữa nếu chia kiểu này thì có lẽ cũng không cần đến hỗ trợ của Excel, cứ cầm cục mệnh giá 500.000 "văng" trước, hết lại đến cục nhỏ hơn, bao giờ hết thì thôi.

P/s: Bài toán này còn phải bàn nhiều
 
Lần chỉnh sửa cuối:
Đúng là chia hết tiền nhưng không công bằng, chia tiền to trước rồi mới đến tiền nhỏ, lương 10 triệu mà toàn lĩnh tiền 10.000 vì chậm chân thì cũng chán. Làm sao phân bổ được tiền nữa mới ứng dụng vào thực tế được!

Thêm nữa nếu chia kiểu này thì có lẽ cũng không cần đến hỗ trợ của Excel, cứ cầm cục mệnh giá 500.000 "văng" trước, hết lại đến cục nhỏ hơn, bao giờ hết thì thôi.

P/s: Bài toán này còn phải bàn nhiều
Vậy thì xin giử mọi người file này. Không hoàn toàn là công bằng nhưng vẫn có thể chấp nhận được. Có thể áp dụng trong thực tế.
Vui lòng xem file đính kèm.
 

File đính kèm

Dosnet góp một cách chia lương theo % (tiền được chia)/(tổng số tiền). Cách này công bằng hơn !
Cách này công bằng nhưng không phải là tối ưu. Trong trường hợp quỹ tiền mặt lớn, tổng quỹ lương cần chi nhỏ phương pháp này vẫn chia số tiền có mệnh giá thấp trong khi để thừa số tiền có mệnh giá cao. Chưa kể mốt số trường hợp số tiền đem chia lớn hơn số tiền hiện có như trong file đính kèm bên dưới.
 

File đính kèm

Bài của Dosnet ứng dụng tốt trong trường hợp Tổ trưởng đi lĩnh lương cho cả tổ về chia cho từng người. Chia hết tiền, phân bổ đều mệnh giá tiền.
 
Vậy thì xin giử mọi người file này. Không hoàn toàn là công bằng nhưng vẫn có thể chấp nhận được. Có thể áp dụng trong thực tế.
Vui lòng xem file đính kèm.

có khi nào các anh chị nghĩ phải chia theo "chức vụ" nữa không, chẳng lẽ sếp lãnh lương mà để công bằng lương sếp chỉ đc5 lấy một số tờ 500, một số tờ 200 ... hay sao, thấy kỳ cục sao đó, có lẽ những người đặc biệt ta cho lãnh nhìu nhất số tiền chẵn có thể thì hay hơn.... theo em là vậy
 
to: huuthang_bd

em thấy hình như chưa ổn anh ơi, anh coi file đính kèm dùm em, tiền quỹ nhìu hơn tiền lương, số lượng tiền theo loại không đủ chia thì nó sẽ cho biết thiếu bao nhiu chứ đằng này.... nguy hiểm quá
 

File đính kèm

to: huuthang_bd

em thấy hình như chưa ổn anh ơi, anh coi file đính kèm dùm em, tiền quỹ nhìu hơn tiền lương, số lượng tiền theo loại không đủ chia thì nó sẽ cho biết thiếu bao nhiu chứ đằng này.... nguy hiểm quá
Bạn ktra lại File của bạn có sự nhầm lẫn 1 chút trong công thức,Tôi thấy thiếu tiền 2000 để chia cho mọi người nhưng là vầy cũng phải để lại chút tiền lẻ chứ.Tuy nhiên trong thực tế chia còn nhiều vấn đề phải bàn lắm,khó có thể có phương án hoàn hảo,ta chấp nhận mức độ nào thôi
 
Bạn ktra lại File của bạn có sự nhầm lẫn 1 chút trong công thức,Tôi thấy thiếu tiền 2000 để chia cho mọi người nhưng là vầy cũng phải để lại chút tiền lẻ chứ.Tuy nhiên trong thực tế chia còn nhiều vấn đề phải bàn lắm,khó có thể có phương án hoàn hảo,ta chấp nhận mức độ nào thôi

ý mình là nếu chia lương cho người nào đó mà không đủ tiền lẻ thì nó vẫn chia nhưng phần chênh lệch nó sẽ cho biết người đó mình còn thiếu bao nhiêu, đằng này hết tờ 2000 tự nhiên nó ghi âm rồi lại cấn trừ qua tờ 1000, cái này chắc anh Huuthang_bd kiểm tra lại dùm
 
ý mình là nếu chia lương cho người nào đó mà không đủ tiền lẻ thì nó vẫn chia nhưng phần chênh lệch nó sẽ cho biết người đó mình còn thiếu bao nhiêu, đằng này hết tờ 2000 tự nhiên nó ghi âm rồi lại cấn trừ qua tờ 1000, cái này chắc anh Huuthang_bd kiểm tra lại dùm
Với bài toán phức tạp này, giải bằng công thức tôi nghĩ khó mà giải quyết hết các yêu cầu. Với VBA, nó cho phép dùng vòng lặp nên chia lần 1 chưa đạt thì chia lại lần 2, lần 3, ... cho đến khi đạt. Điều này công thức không làm được.
Các bạn muốn giải bằng VBA xem bài Bài toán về chia tiền lương

 
to: huuthang_bd

em thấy hình như chưa ổn anh ơi, anh coi file đính kèm dùm em, tiền quỹ nhìu hơn tiền lương, số lượng tiền theo loại không đủ chia thì nó sẽ cho biết thiếu bao nhiu chứ đằng này.... nguy hiểm quá
Bạn xem lại xem bạn đã fill công thức đúng chưa mà đi thắc mắc. Bó tay.
 
sao mình vẫn không hiểu được công thức này
 
mình thấy cách tính tiền lẻ này hay mình có dow về nhưng công thức không thấy gì hết
 
anh chị em co file cụ thể cho em xin ạ ...mới học chưa biết nhập công thức ạ
 
Chia lương

Lâu rồi không ghé thăm diễn đàn. Hôm nay vào thấy bài toán này cũng hay hay. Tôi xin mạo muội đưa ra một giải pháp. Mọi người xem thử rồi cho ý kiến nha.
Vui lòng xem file đính kèm
Em chào Bác huuthang_bd. Em vận dụng công thức của Bác vào bài toán của em thấy nó gần đúng. Nhưng còn ô em tô đỏ làm không ra, Bác vui lòng giúp em với không biết em sai chỗ nào ạ. Em cảm ơn Bác rất nhiều.
 

File đính kèm

Em chào Bác huuthang_bd. Em vận dụng công thức của Bác vào bài toán của em thấy nó gần đúng. Nhưng còn ô em tô đỏ làm không ra, Bác vui lòng giúp em với không biết em sai chỗ nào ạ. Em cảm ơn Bác rất nhiều.
Bạn phải nêu cụ thể bạn muốn tính toán như thế nào chứ tôi đã biết bạn muốn tính như thế nào đâu mà biết "ra" hay "không ra".
 
Bạn phải nêu cụ thể bạn muốn tính toán như thế nào chứ tôi đã biết bạn muốn tính như thế nào đâu mà biết "ra" hay "không ra".
Dạ, là em đã có tổng số tiền và tổng số ca phẩu thuật, thủ thuật cho trước, em muốn chia số tổng số tiền đó cho từng nhân viên theo tỉ lệ 100%, 80%, 70%, 50% ( bảng giaichi). Sau đó em qui số tiền của từng nhân viên ra số ca thủ thuật và phẩu thuật ( cho khớp số ca thủ thuật, phẩu thuật cho trước) ra bảng baocao để nộp phòng TCKT ạ. Em cảm ơn Thầy.
Thầy ơi em làm kiểu này cũng tạm ổn, Thầy xem có chỉnh sửa dùm em được không ạ. Dạ ô B16:B18 là nhập số ca vào, cột O, P có thể chỉnh sửa được nếu chia chưa hết số ca thủ thuật, phẩu thuật, tiền thì có thể cho chênh lệch chút ít. Dạ em cảm ơn Thầy huuthang bd ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Dạ, là em đã có tổng số tiền và tổng số ca phẩu thuật, thủ thuật cho trước, em muốn chia số tổng số tiền đó cho từng nhân viên theo tỉ lệ 100%, 80%, 70%, 50% ( bảng giaichi). Sau đó em qui số tiền của từng nhân viên ra số ca thủ thuật và phẩu thuật ( cho khớp số ca thủ thuật, phẩu thuật cho trước) ra bảng baocao để nộp phòng TCKT ạ. Em cảm ơn Thầy.
Thầy ơi em làm kiểu này cũng tạm ổn, Thầy xem có chỉnh sửa dùm em được không ạ. Dạ ô B16:B18 là nhập số ca vào, cột O, P có thể chỉnh sửa được nếu chia chưa hết số ca thủ thuật, phẩu thuật, tiền thì có thể cho chênh lệch chút ít. Dạ em cảm ơn Thầy huuthang bd ạ.
Bạn có thể dùng chung công thức này cho các cột
Mã:
H23=MIN(INDEX($D$2:$D$10,COLUMNS($H$21:H$21))-SUM(H$22:H22),INT(($F23-SUMPRODUCT($G$21:G$21,$G23:G23))/H$21))
 
Cách 1:
Dùng bảng liệt kê số tiền lãnh, mệnh giá tiền (xếp thứ tự từ mệnh giá từ lớn đến nhỏ). Hàm TienPhat sẽ tính số tờ phải trả cho từng mệnh giá.
|
A
|
B​
|
C​
|
D​
|
E​
|
F​
|
G​
|
H​
|
I​
|
J​
|
K​
|
L​
|
M​
|
1​
|
Bảng kê​
|||
2​
|
SoTien​
|
500000​
|
200000​
|
100000​
|
50000​
|
20000​
|
10000​
|
5000​
|
2000​
|
1000​
|
500​
|
200​
|
100​
|
3​
|
2.345.100​
|
4​
|
1​
|
1​
|
0​
|
2​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
1​
|
4​
|
600.000​
|
1​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
5​
|
1.960.000​
|
3​
|
2​
|
0​
|
1​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
0​
|
6​
|
2.315.000​
|
4​
|
1​
|
1​
|
0​
|
0​
|
1​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
7​
|
73.000​
|
0​
|
0​
|
0​
|
1​
|
1​
|
0​
|
0​
|
1​
|
1​
|
0​
|
0​
|
0​
|
8​
|
3.025.000​
|
6​
|
0​
|
0​
|
0​
|
1​
|
0​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
9​
|
3.381.000​
|
6​
|
1​
|
1​
|
1​
|
1​
|
1​
|
0​
|
0​
|
1​
|
0​
|
0​
|
0​
|
10​
|
8.135.000​
|
16​
|
0​
|
1​
|
0​
|
1​
|
1​
|
1​
|
0​
|
0​
|
0​
|
0​
|
0​
|
11​
|
9.099.000​
|
18​
|
0​
|
0​
|
1​
|
2​
|
0​
|
1​
|
2​
|
0​
|
0​
|
0​
|
0​
|
12​
|
6.789.000​
|
13​
|
1​
|
0​
|
1​
|
1​
|
1​
|
1​
|
2​
|
0​
|
0​
|
0​
|
0​
|

Công thức tại B2:=tienphat($A3;B$2;$B$2:$I$2)
Mã:
Function TienPhat(SoTien As Long, LoaiTien As Long, RgTien As Range) As Long
Dim iTien As Long, i As Long
For i = 1 To RgTien.Cells.Count
  iTien = Application.WorksheetFunction.Index(RgTien, i)
  TienPhat = SoTien \ iTien
  If iTien = LoaiTien Then Exit For
  SoTien = SoTien - iTien * TienPhat
Next
End Function
Hàm có 3 đối số:
SoTien: số tiền phải phát
LoaiTien: mệnh giá tiền phát
RgTien: vùng chứa các loại tiền phát
Chú ý: có thể số tiền phát thấp hơn số tiền thực lãnh do khai báo mệnh giá thiếu

Cách 2:
Dùng cho bảng in số tờ theo từng mệnh giá phải trả, dùng hàm PhatTien.
[
|
A
|
B​
|
C​
|
1​
||
Số tiền​
|
Liệt kê từng mệnh giá​
|
2​
|Trường hợp 1|
2.345.050​
|2.345.050 ≈ 2.345.000 = 500.000x4 + 500.000x1 + 500.000x1 + 500.000x2 + 500.000x1|
3​
|Trường hợp 2|
600.000​
|600.000 = 500.000x1 + 500.000x1|


Trường hợp 1: số tiền phát > số tiền lãnh
Trường hợp 2: số tiền phát = số tiền lãnh

Mã:
Function PhatTien(SoTien As Long) As String
Dim Tien As Long, soDu As Long, n As Long, nTo As Long
Tien = SoTien
varTien = Array(500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000, 500, 200)
soDu = SoTien Mod (varTien(UBound(varTien)))
If soDu > 0 Then
  PhatTien = Format(SoTien, "#,##0") & " " & ChrW(8776) & " " & Format(SoTien - soDu, "#,##0") & " = "
Else
  PhatTien = Format(SoTien, "#,##0") & " = "
End If
For n = 0 To UBound(varTien)
  nTo = Tien \ varTien(n)
  If nTo > 0 Then
    PhatTien = PhatTien & Format(varTien(i), "#,##0") & "x" & nTo & " + "
    Tien = Tien - (varTien(n) * nTo)
  End If
Next
PhatTien = Left(PhatTien, Len(PhatTien) - 3)
End Function
Bạn khai báo mệnh giá trong varTien
Ví dụ 1: mệnh giá nhỏ nhất 1.000
Mã:
 = Array(500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000)
Ví dụ 2: mệnh giá nhỏ nhất 200
Mã:
 = Array(500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000, 500, 200)
chào bạn, với Function TienPhat bạn có thể điều chỉnh thêm VBA trên nếu mình không có một trong các mệnh giá 500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000 thì công thức vẫn tính được mà không phát sinh lỗi ạ.
ví dụ:
11.250.000
500.000
22​
200.000
1​
100.000
0​
-
#VALUE!​
20.000
#VALUE!​
10.000
#VALUE!​
5.000
#VALUE!​
2.000
#VALUE!​
1.000
#VALUE!​
500
#VALUE!​
 
chào bạn, với Function TienPhat bạn có thể điều chỉnh thêm VBA trên nếu mình không có một trong các mệnh giá 500000, 200000, 100000, 50000, 20000, 10000, 5000, 2000, 1000 thì công thức vẫn tính được mà không phát sinh lỗi ạ.
ví dụ:
11.250.000
500.000
22​
200.000
1​
100.000
0​
-
#VALUE!​
20.000
#VALUE!​
10.000
#VALUE!​
5.000
#VALUE!​
2.000
#VALUE!​
1.000
#VALUE!​
500
#VALUE!​
Nên gởi file với dữ liệu và yêu cầu
 
Nên gởi file với dữ liệu và yêu cầu
Mình có file sau kính nhờ anh em nghiên cứu giúp ạ, code mình xin copy của bác @phamduylong, nhờ anh em chỉnh giúp code.
Cụ thể mình có ghi yêu cầu tại ví dụ 2 trong file Excel mình đã dính kèm bên dưới.
code:
Function TienPhat(SoTien As Long, LoaiTien As Long, RgTien As Range) As Long
Dim iTien As Long, i As Long
For i = 1 To RgTien.Cells.Count
iTien = Application.WorksheetFunction.Index(RgTien, i)
TienPhat = SoTien \ iTien
If iTien = LoaiTien Then Exit For
SoTien = SoTien - iTien * TienPhat
Next
End Function

- Với Function "TienPhat" nhờ anh em điều chỉnh giúp nếu mình không có một trong các mệnh giá 500.000, 200.000, 100.000, 50.000, 20.000, 10.000, 5.000, 2.000, 1.000 thì công thức vẫn tính được mà không phát sinh lỗi ạ.
 

File đính kèm

Mình có file sau kính nhờ anh em nghiên cứu giúp ạ, code mình xin copy của bác @phamduylong, nhờ anh em chỉnh giúp code.
Cụ thể mình có ghi yêu cầu tại ví dụ 2 trong file Excel mình đã dính kèm bên dưới.
code:
Function TienPhat(SoTien As Long, LoaiTien As Long, RgTien As Range) As Long
Dim iTien As Long, i As Long
For i = 1 To RgTien.Cells.Count
iTien = Application.WorksheetFunction.Index(RgTien, i)
TienPhat = SoTien \ iTien
If iTien = LoaiTien Then Exit For
SoTien = SoTien - iTien * TienPhat
Next
End Function

- Với Function "TienPhat" nhờ anh em điều chỉnh giúp nếu mình không có một trong các mệnh giá 500.000, 200.000, 100.000, 50.000, 20.000, 10.000, 5.000, 2.000, 1.000 thì công thức vẫn tính được mà không phát sinh lỗi ạ.
Bạn thử xem được không?
PHP:
Function DoiTien(SoTien As Currency, LoaiTien As Long, RngLoaiTien As Range) As Integer
    Dim Cell As Range
    
    For Each Cell In RngLoaiTien
        If Cell.Value > 0 Then
            DoiTien = Int(SoTien / Cell.Value)
        Else
            DoiTien = 0
        End If
        'Tinh so tien con lai
        SoTien = SoTien - DoiTien * Cell.Value
        'Neu dung loai tien dang quy doi thi thoat vong lap
        If Cell.Value = LoaiTien Then
            Exit For
        End If
    Next Cell
    
End Function
 
Mình có file sau kính nhờ anh em nghiên cứu giúp ạ, code mình xin copy của bác @phamduylong, nhờ anh em chỉnh giúp code.
Cụ thể mình có ghi yêu cầu tại ví dụ 2 trong file Excel mình đã dính kèm bên dưới.
code:
Function TienPhat(SoTien As Long, LoaiTien As Long, RgTien As Range) As Long
Dim iTien As Long, i As Long
For i = 1 To RgTien.Cells.Count
iTien = Application.WorksheetFunction.Index(RgTien, i)
TienPhat = SoTien \ iTien
If iTien = LoaiTien Then Exit For
SoTien = SoTien - iTien * TienPhat
Next
End Function

- Với Function "TienPhat" nhờ anh em điều chỉnh giúp nếu mình không có một trong các mệnh giá 500.000, 200.000, 100.000, 50.000, 20.000, 10.000, 5.000, 2.000, 1.000 thì công thức vẫn tính được mà không phát sinh lỗi ạ.
Thêm chức năng tính số tiền còn dư sau khi chia cho các mệnh giá
Mã:
Function SoToTien(rng As Range, SoTien As Long, Optional LoaiTien As Long = 1020213112) As Long
'SoToTien: Tính so to tien theo loai Menh Gia
'rng: Vùng du lieu cac loai Menh Gia có thu tu tu cao den thap, theo dinh dang "Range"
'SoTien: So tien can qui doi ve cac loai Menh Gia
'LoaiTien: loai Menh Gia can tinh so to tien               =SoToTien($B$4:$B$13,$C$2,B4)
'Neu bo trong tham so "LoaiTien", SoToTien la so tien du   =SoToTien($B$4:$B$13,$C$2)
  If LoaiTien = Empty Then Exit Function
  Dim sRow As Long, iTien As Long, i As Long, tmp As Long
  sRow = rng.Cells.Count
  For i = 1 To sRow
    iTien = rng(i, 1)
    If iTien <> Empty Then
      SoToTien = SoTien \ iTien
      If iTien = LoaiTien Then Exit For
      SoTien = SoTien - iTien * SoToTien
    End If
  Next
  If LoaiTien = 1020213112 Then SoToTien = SoTien
End Function
 

File đính kèm

Quá chất, chân thành cảm ơn bác @HieuCD, bác @vanthinh3101 rất nhiều nha! 2 bác viết lệnh trên cả tuyệt vời ấy, rất chất lượng, một lần nữa cảm ơn 2 bác rất rất là nhiều.
 
Nếu chia cho 1 người thôi thì chẳng vấn đề gì! Nhưng chia cho 2 - 3 - 4 người thì sao?
Em đã chỉnh lại 1 chút trong code nhưng xem ra không vừa ý lắm.
Mọi người xem file nha!
PHP:
Option Explicit:                Option Base 1
Function ToTien(SoTien As Double, Optional Luot As Integer = 2) As Variant
 ''500; 200; 100; 50; 20; 10; 5; 2; 1
 Dim SoChia As Integer, jJ As Byte
 ReDim SoTo(1, 10) As Byte
 SoTo(1, 10) = (SoTien / 1000) Mod Luot
 SoTien = SoTien \ (1000 * Luot)
 
 For jJ = 1 To 9
    SoTo(1, jJ) = 0
    SoChia = Choose(jJ, 500, 200, 100, 50, 20, 10, 5, 2, 1)
    SoTo(1, jJ) = (SoTien \ SoChia) * Luot
    SoTien = SoTien Mod SoChia
 Next
 
 ToTien = SoTo
End Function
Thân.
MÌNH ĐÃ DOWN FILE EXCEL VỀ NHƯNG KHI BẤM VÀO CHO PHÉP SỬA THÌ BỊ LỖI TOÀN BỘ, CÓ THỂ CHỈ MÌNH CÁCH DÙNG ĐƯỢC KHÔNG?
 

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

Back
Top Bottom