Tính loại tiền từ một số tiền

  • Thread starter FOV2
  • Ngày gửi
F

FOV2

Thành viên sơ cấp
30/5/05
23
0
1
48
HCMC
#1
Chào các bạn!
Mình có 1 file chuyển từ 1 số tiền ra các loại tiền.

VD: 250.500 đồng thì gồm có: 2 tờ 100.000 + 1 tờ 50.000 + 1 tờ 500.

Tuy nhiên, công thức chỉ đúng cho số tiền chẵn đến 500 đồng (như VD trên). Còn như (ví dụ) 250.100, 250.300, 250.600, 250.800 thì lệch 100đ.

....
 
Sửa lần cuối:
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#2
File này thú vị đấy, bạn hãy gửi cho tôi về handung107@gmail.com nhé. Một ý tưởng của File này đôi khi sẽ trở thành đề tài cho một File khác, cám ơn bạn.
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#4
FOV2 nói:
Chào các bạn!
Mình có 1 file chuyển từ 1 số tiền ra các loại tiền.

VD: 250.500 đồng thì gồm có: 2 tờ 100.000 + 1 tờ 50.000 + 1 tờ 500.

Tuy nhiên, công thức chỉ đúng cho số tiền chẵn đến 500 đồng (như VD trên). Còn như (ví dụ) 250.100, 250.300, 250.600, 250.800 thì lệch 100đ.

Các bạn nào cần tham khảo hay các Cao thủ cảm thấy "bực mình" muốn xử lý nó, đừng ngần ngại liên hệ với mình qua địa chỉ sau:

anhvu_fovi@yahoo.co.uk

(Bởi vì mình không có quyền gởi kèm file.)
Xài tạm cái này nhé. Đương nhiên chỉ đến hàng trăm thôi.

Giả sử ô B1 chứa số tiền mà bạn cần chia.

Ô B5 là số tiền 100,000. Ô B6 là số tiên 50,000 and so on.

Ô A5: gõ vào 100,000; A6 gõ: 50,000, cho tới ô A13: 200

Tại ô B5 gõ: =INT(B1/A5)

Ô B6 kéo xuống gõ:

=IF(MOD($B$1,200)=0,INT(($B$1-MOD($B$1,1000)- SUMPRODUCT(A$5:A5,B$5:B5))/A6)+(A6=200)*INT(MOD($B$1,1000)/200),IF(MOD($B$1,1000)<500,INT(($B$1-MOD($B$1,1000)-1000-SUMPRODUCT(A$5:A5,B$5:B5))/A6)+(A6=500)+(A6=200)*(INT((MOD($B$1,1000)-300)/200)+7),INT(($B$1-SUMPRODUCT(A$5:A5,B$5:B5))/A6)))

Chúc bạn vui.
 
Sửa lần cuối:
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#6
Công thức làm tròn 500 đồng!

Ha ha ha, vấn đề này tớ đã gặp khi làm ở công ty TNHH Phú Hữu cách đây chừng 5 năm, tính lương cho 2000 công nhân. Phải tính mỗi loại tiền bao nhiêu đặng ra ngân hàng lãnh cho đủ về chia ra phát. Lúc đó tớ không xài đến tờ 200 vì tớ làm tròn cho 500. Thí dụ <400 thì tớ bỏ, từ 400 đến <700 thì làm tròn lại 500. Từ 700 trở lên thì làm tròn lại 1000. Bạn đang tính lương cho công nhân phải không, tớ cho công thức làm tròn 500 đồng này nhé.
Giả sử ô A1 là số tiền, B1 nhập công thức làm tròn 500 từ A1:
=IF(AND(MOD(A1;1000)>=400;MOD(A1;1000)<700);500+INT(A1/1000)*1000;ROUND(A1;-3))
Về công thức chia tiền, ý bạn workman đúng đấy, ngày xưa tớ dùng công thức mảng. Công thức này thì dễ, chủ yếu bạn chú ý đến phần những địa chỉ hàng-cột nào cần cố định, ($) những địa chỉ nào không, vì sai một chút thì khi copy xuống, tham chiếu của Excel sẽ nhảy tùm lum cả.
Chúc bạn thành công nhé, tớ còn có file ở đây.
Nếu phải làm tròn lương đến 200 - 400 - 500 - 600 - 800 - 1000 thì... khó và rắc rối quá, thời này ai xài 200 đâu! Nhưng các cao thủ Excel thấy "bực" thì ra chiêu nhé.
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#7
Do phải trả đến cả 100 đồng nên mới sinh chuyện. Hồi đó tôi làm ở ngân hàng nên không thể làm tròn được. Cái hàm này dùng để chi trả chính xác đến 100 đồng cho khách hàng.

Thuật toán đơn giản thôi: 100=1100-1000
Do vậy ta trừ 1000 từ số tiền ban đầu. Sau đó cộng thêm 1100=500*1+200*3
 
H

HyperVN

<b>Phu hót rác</b>
17/3/03
1,833
14
0
42
Hải Phòng
www.webketoan.vn
#8
Bài toán này khá thú vị đây, trường hợp số tiền quá lớn thì có thuật toán nào tìm lượng tiền tối ưu không? Nghĩa là sử dụng ít tiền nhất, hay nhiều tiền lẻ nhất, hay tùy thuộc vào lượng tiền từng loại thực có (ví như tiền 500.000đ không quá A tờ, tiền 100.000đ không quá B tờ vv...) bài toán này xương quá.
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#9
workman nói:
Do phải trả đến cả 100 đồng nên mới sinh chuyện. Hồi đó tôi làm ở ngân hàng nên không thể làm tròn được. Cái hàm này dùng để chi trả chính xác đến 100 đồng cho khách hàng.
Thuật toán đơn giản thôi: 100=1100-1000
Do vậy ta trừ 1000 từ số tiền ban đầu. Sau đó cộng thêm 1100=500*1+200*3
Trả 100 đồng thì dễ quá rồi à ơi, ROUND (A1;-2) là xong. Trả 200-400-500-600-800-1000 mới khó!
HyperVN nói:
Bài toán này khá thú vị đây, trường hợp số tiền quá lớn thì có thuật toán nào tìm lượng tiền tối ưu không? Nghĩa là sử dụng ít tiền nhất, hay nhiều tiền lẻ nhất, hay tùy thuộc vào lượng tiền từng loại thực có (ví như tiền 500.000đ không quá A tờ, tiền 100.000đ không quá B tờ vv...) bài toán này xương quá.
Anh HyperVN lại làm khó các bạn rồi. Để các bạn xem nhé, phần này tớ đã gặp thực tế và cũng đã giải quyết rồi. Hì hì, không có trường nào tốt hơn trường thực tế cả.
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#10
adam_tran nói:
Trả 100 đồng thì dễ quá rồi à ơi, ROUND (A1;-2) là xong. Trả 200-400-500-600-800-1000 mới khó!

Anh HyperVN lại làm khó các bạn rồi. Để các bạn xem nhé, phần này tớ đã gặp thực tế và cũng đã giải quyết rồi. Hì hì, không có trường nào tốt hơn trường thực tế cả.
Adam hiểu nhầm ý tôi rồi. Ý tôi nói là nếu cần phải trả 1100 thì mình cần phải trả ra 1 tờ 500 và 3 tờ 200. Dùng hàm round có nghĩa là mình lấy mất của người là đi 100 đồng rồi còn gì.

Anh HyperVn đố ác quá. Bữa nay chắc bận lắm không có thời gian giải được, nếu Adam có lời giải thì post lên luôn cho bà con thao khảo với nhé. Đáp án của tôi đưa ra là sử dụng ít giấy bạc nhất.
 
N

NgânGiang

Cố lên! Cố lên...
10/5/05
202
0
0
16
Trong Mây mù
www.baominh.com.vn
#11
HyperVN nói:
Bài toán này khá thú vị đây, trường hợp số tiền quá lớn thì có thuật toán nào tìm lượng tiền tối ưu không? Nghĩa là sử dụng ít tiền nhất, hay nhiều tiền lẻ nhất, hay tùy thuộc vào lượng tiền từng loại thực có (ví như tiền 500.000đ không quá A tờ, tiền 100.000đ không quá B tờ vv...) bài toán này xương quá.
Lượng tiền tối ưu hả?
tớ có ý tưởng thế này nhá:
Mỗi loại mệnh giá tiền để ở 1 cột.
Số tờ/đồng tiền ít nhất: Chia cho mệnh giá lớn nhất trước, phần dư chia cho mệnh giá kế tiếp ... đến khi chia hết
Số tờ/đồng tiền nhiều nhất: Phát toàn tiền mệnh giá nhỏ nhất
Giới hạn số lượng tiền theo mỗi loại: dùng hàm min/max thêm vào công thức chia ở mỗi loại mệnh giá.
Tổng hợp lại theo cột bạn sẽ có số lượng tiền cần thiết mỗi loại cho bảng lương hay cái gì gì đó ở mỗi kỳ
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#12
Thì đấy chính là cái bác FOV2 đã làm đấy thôi. Tôi nghĩ bác FOV2 đã tìm ra solution để tính số tiến tối ưu. Chỉ có một vấn đề nhỏ là thuật toán của bác ấy có vấn đề về thừa thiếu 100 đồng.
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#13
Tiện tay làm lại file post lên cho các bạn tham khảo luôn. Cái này đảm bảo trả đúng đến hàng trăm, tức là không có chuyện thừa thiếu.
 

Đính kèm

F

FOV2

Thành viên sơ cấp
30/5/05
23
0
1
48
HCMC
#14
Chờ mỏi mòn luôn.

Cám ơn Workman nhiều lắm lắm.
 
Secret_grasses

Secret_grasses

Thành viên sơ cấp
#15
Anh workman ơi , em đã xem qua file của anh. Anh còn thiếu loại tiền 500.000đ nữa.
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#16
Ờ nhỉ. Cảm ơn bạn nhắc nhở nhé. Tôi lạc hậu quá, cứ tưởng đến 100,000 là hết. Tiện tay sửa lại luôn chứ tôi biết chắc các bạn muốn sửa là được ngay.
 

Đính kèm

H

hungmx

Thành viên sơ cấp
25/2/06
2
0
0
SGN
#17
Mình cũng cần tìm số tờ mỗi loại tương tự nhưng không phải tiền mà là tờ thể hiện số cổ phần:

VD: Có 9 tờ thể hiện số cổ phần khác nhau: 10000, 5000, 1000, 500, 100, 50, 10, 5, 1
Một người có 16796 cổ phần thì họ sẽ được 1 tờ 10000, 1 tờ 5000, 1 tờ 1000, 1 tờ 500, 2 tờ 100, 1 tờ 50, 4 tờ 10, 1 tờ 5 và 1 tờ 1.

Rất mong các bác hướng dẫn giúp như cách làm trong file đính kèm của bác Workman. Mình dốt Excel quá nên thấy hàm trong file này là rối mù luôn. :freddy:

Xin cảm ơn nhiều (mình đang rất cần).
 
QDuc

QDuc

Thành viên thân thiết
3/6/06
254
18
18
Biển khơi
#18
Bạn thử kiểm hàm tự tạo sau, nha!

Mình cần tìm số tờ mỗi tờ thể hiện số cổ phần:

VD: Có 9 tờ thể hiện số cổ phần khác nhau: 10000, 5000, 1000, 500, 100, 50, 10, 5, 1
Một người có 16796 cổ phần thì họ sẽ được 1 tờ 10000, 1 tờ 5000, 1 tờ 1000, 1 tờ 500, 2 tờ 100, 1 tờ 50, 4 tờ 10, 1 tờ 5 và 1 tờ 1.

Xin cảm ơn nhiều (mình đang rất cần).
Function SoCoFan(SoTien As Long, Ma As Long)
Select Case Ma
Case 10000
SoCoFan = SoTien \ Ma
Case 5000
SoCoFan = (SoTien Mod 10000) \ 5000
Case 1000
SoCoFan = ((SoTien Mod 10000) Mod 5000) \ 1000
Case 500
SoCoFan = (((SoTien Mod 10000) Mod 5000) Mod 1000) \ 500
Case 100
SoCoFan = (((SoTien Mod 15000) Mod 1000) Mod 500) \ 100
Case 50
SoCoFan = ((((SoTien Mod 15000) Mod 1000) Mod 500) Mod 100) \ 50
Case 10
SoCoFan = (((((SoTien Mod 15000) Mod 1000) Mod 500) Mod 100) Mod 50) \ 10
Case 5
SoCoFan = ((((((SoTien Mod 15000) Mod 1000) Mod 500) Mod 100) Mod 50) Mod 10) \ 5
Case 1
SoCoFan = (SoTien Mod 5)
End Select
End Function
 

Đính kèm

Sửa lần cuối:
H

hungmx

Thành viên sơ cấp
25/2/06
2
0
0
SGN
#19
Do cần gấp nên mình đã sử dụng file attach của bác workman, rồi làm theo kiểu "nông dân học":

Số tờ 10000 (ô B1): =+INT(A1/10000)
Số tờ 5000 (ô C1): =+INT(A1/5000)-B1*2
Số tờ 1000 (ô D1): =+INT(A1/1000)-B1*10-C1*5
....

Cũng may là đúng do không có mệnh giá 2000, 200, 20, 2.

Cảm ơn Bác QDuc nhiều. Lần tới sẽ sử dụng file của bác. :)
 

Thành viên trực tuyến

  • Boemzan
  • Hang708
  • daongocnam0603
  • hhtt93
  • Loanuk
  • auyeuch

Xem nhiều