如何用Excel VBA实现油库存桶升转换及自动计算
Excel VBA 实现油库存自动更新
核心思路
先把库存统一换算为总升数,扣除购买量后,再重新转换为「桶数+剩余升数」的格式,逻辑简单不易出错。
示例代码
假设工作表中:
- A1单元格存储当前桶数
- B1单元格存储当前剩余升数
- C1单元格用于输入客户购买的升数
将以下代码粘贴到对应工作表的代码模块中:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当修改C1(购买升数)时触发 If Target.Address = "$C$1" Then Dim totalLiters As Long Dim purchaseLiters As Long Dim newTotalLiters As Long Dim newBarrels As Long Dim newRemainingLiters As Long ' 读取当前库存和购买量 purchaseLiters = Val(Target.Value) totalLiters = Range("A1").Value * 208 + Range("B1").Value ' 校验购买量有效性 If purchaseLiters < 0 Or purchaseLiters > totalLiters Then MsgBox "购买量无效,请输入合理数值", vbExclamation Application.EnableEvents = False Target.ClearContents Application.EnableEvents = True Exit Sub End If ' 计算新库存 newTotalLiters = totalLiters - purchaseLiters newBarrels = newTotalLiters \ 208 ' 整除得到桶数 newRemainingLiters = newTotalLiters Mod 208 ' 取余得到剩余升数 ' 更新库存单元格 Application.EnableEvents = False ' 避免触发重复更新 Range("A1").Value = newBarrels Range("B1").Value = newRemainingLiters Target.ClearContents ' 清空购买输入框 Application.EnableEvents = True End If End Sub
使用说明
- 打开Excel,按
Alt + F11打开VBA编辑器 - 在左侧「工程资源管理器」中双击目标工作表(比如Sheet1)
- 将上述代码粘贴到右侧代码窗口
- 返回Excel,在A1输入初始桶数
10,B1输入0(初始10桶即0剩余升数) - 在C1输入
1,回车后A1会自动变为9,B1变为207
内容的提问来源于stack exchange,提问作者simorin
相关产品推荐
相关产品推荐

