餐饮公司Excel配料数据汇总需求:快速统计指定区域物料与数量数组
Hey there! As someone who's helped plenty of food service businesses streamline their inventory workflows, let's get your ingredient quantity aggregation sorted out—this will definitely save you time and reduce manual errors.
方法1:用Excel内置公式快速实现(无需编程)
这种方法适合日常快速统计,不需要写代码,直接用Excel的函数组合就能得到物料-数量的数组结果:
步骤1:提取唯一物料列表
假设你的物料名称在A2:A100区域,数量在B2:B100区域,用UNIQUE函数提取所有不重复的物料:
=UNIQUE(A2:A100)
这个公式会返回一个垂直数组,包含所有唯一的物料名称。
步骤2:汇总对应物料的总数量
在相邻列(比如D列是唯一物料,E列放数量),用SUMIF函数对应每个物料计算总数量:
=SUMIF(A2:A100, D2, B2:B100)
把这个公式下拉,就能得到所有物料的总数量。
步骤3:直接生成物料-数量的组合数组
如果想一步到位得到包含两列的数组结果,用HSTACK函数把上述两个结果合并:
=HSTACK(UNIQUE(A2:A100), SUMIF(A2:A100, UNIQUE(A2:A100), B2:B100))
这个公式会直接返回一个2列的数组,第一列是物料,第二列是对应总数量。
注意:如果你的Excel版本没有
UNIQUE或HSTACK(比如Excel 2019及更早),可以用数组公式替代唯一值提取:=INDEX(A$2:A$100, MATCH(0, COUNTIF(D$1:D1, A$2:A$100), 0))输入后按Ctrl+Shift+Enter作为数组公式,然后下拉直到出现错误值,再删除错误行即可。
方法2:用VBA脚本实现自动化汇总(适合定期批量处理)
如果你们需要定期更新数据、批量处理多个工作表,VBA脚本会更灵活,能一键完成汇总:
完整VBA代码
打开Excel,按Alt+F11打开VBA编辑器,插入一个新模块,粘贴以下代码:
Sub AggregateRestaurantIngredients() Dim targetSheet As Worksheet Dim dataRange As Range Dim uniqueItems As Collection Dim currentCell As Range Dim item As Variant Dim resultArray() As Variant Dim rowIndex As Integer ' 配置你的工作表和数据区域(根据实际情况修改) Set targetSheet = ThisWorkbook.Worksheets("配料表") ' 替换成你的工作表名称 Set dataRange = targetSheet.Range("A2:B100") ' A列=物料,B列=数量 Set uniqueItems = New Collection ' 遍历数据,收集唯一物料(忽略空值) On Error Resume Next ' 跳过重复项的报错 For Each currentCell In dataRange.Columns(1).Cells If Trim(currentCell.Value) <> "" Then uniqueItems.Add currentCell.Value, Key:=CStr(currentCell.Value) End If Next currentCell On Error GoTo 0 ' 初始化结果数组 ReDim resultArray(1 To uniqueItems.Count, 1 To 2) ' 填充数组:物料名称 + 总数量 rowIndex = 1 For Each item In uniqueItems resultArray(rowIndex, 1) = item resultArray(rowIndex, 2) = Application.SumIf(dataRange.Columns(1), item, dataRange.Columns(2)) rowIndex = rowIndex + 1 Next item ' 将结果输出到工作表(这里输出到D1开始的区域) targetSheet.Range("D1:E1").Value = Array("物料名称", "总数量") targetSheet.Range("D2").Resize(UBound(resultArray, 1), 2).Value = resultArray MsgBox "物料汇总完成!结果已输出到D-E列。" End Sub
使用说明:
- 修改代码中的
"配料表"为你的实际工作表名称 - 调整
dataRange为你存放物料和数量的指定区域 - 回到Excel,按
Alt+F8选择AggregateRestaurantIngredients宏运行即可
额外小贴士
- 确保物料列没有拼写错误(比如"番茄"和"蕃茄"会被当成两个不同物料),可以用
PROPER或LOWER函数统一格式 - 如果需要实时更新,公式方法开启Excel的自动计算即可;VBA方法可以设置按钮,一键触发汇总
内容的提问来源于stack exchange,提问作者Marcin Frankowski

