摘要:很多同学会觉得 Excel 单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解 Excel 的各个知识点。
很多同学会觉得 Excel 单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解 Excel 的各个知识点。
现在终于有了,以下专栏,从最基础的操作和概念讲起,用生动、有趣的案例带大家逐一掌握 Excel 的操作技巧、快捷键大全、函数公式、数据透视表、图表、打印技巧等……学完全本,你也能成为 Excel 高手。
用最少的钞票数量凑出所需的金额,有一个专门的名称,叫贪心算法。
计算下图 1 中的金额所需的最小数量的钞票组合,支持人民币标准面额为 100、50、20、10、5、2、1、0.5、0.1、0.05、0.01。
效果如下图 2 所示。

Sub CalculateExactComboDim amount As CurrencyDim result As StringDim denominations As VariantDim counts As IntegerDim i As Integer' 定义面额(元+分,按从大到小排序)denominations = Array(100, 50, 20, 10, 5, 2, 1, 0.5, 0.1, 0.05, 0.01)ReDim counts(LBound(denominations) To UBound(denominations))' 获取金额并验证amount = Round(Range("A2").Value, 2)If amount = denominations(i) Thencounts(i) = Int(amount / denominations(i))amount = Round(amount - (counts(i) * denominations(i)), 2)End IfNext i' 验证是否完全凑齐If amount > 0 ThenMsgBox "警告:剩余 " & amount & " 元无法分配", vbExclamationEnd If' 生成结果result = vbCrLfFor i = LBound(denominations) To UBound(denominations)If counts(i) > 0 Thenresult = result & Format(denominations(i), "0.00") & "元:" & counts(i) & "张" & vbCrLfEnd IfNext i' 输出到B2单元格Range("B2").Value = resultRange("B2").Columns.AutoFitEnd Sub结果如下。

3. 更改金额后再次运行代码,得到以下结果。
来源:Excel学习世界
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!