寻求VBA或公式实现商品列表按门店重复并匹配门店名称
自动生成门店-商品对应列表解决方案
方法一:VBA宏实现
运行以下宏可自动生成所需的交叉列表:
Sub GenerateStoreItemList() Dim wsItems As Worksheet, wsStores As Worksheet, wsOutput As Worksheet Dim lastItemRow As Long, lastStoreRow As Long Dim i As Long, j As Long, outputRow As Long ' 指定数据所在工作表 Set wsItems = ThisWorkbook.Worksheets("Items") Set wsStores = ThisWorkbook.Worksheets("Stores") ' 创建或复用输出工作表 On Error Resume Next Set wsOutput = ThisWorkbook.Worksheets("StoreItemList") If Err.Number <> 0 Then Set wsOutput = ThisWorkbook.Worksheets.Add wsOutput.Name = "StoreItemList" End If On Error GoTo 0 ' 获取商品和门店的最后一行(自动适配数据量) lastItemRow = wsItems.Cells(wsItems.Rows.Count, "A").End(xlUp).Row lastStoreRow = wsStores.Cells(wsStores.Rows.Count, "A").End(xlUp).Row outputRow = 1 ' 遍历每个门店,输出对应所有商品 For i = 1 To lastStoreRow For j = 1 To lastItemRow wsOutput.Cells(outputRow, "A").Value = wsStores.Cells(i, "A").Value wsOutput.Cells(outputRow, "B").Value = wsItems.Cells(j, "A").Value outputRow = outputRow + 1 Next j Next i ' 自动调整列宽 wsOutput.Columns("A:B").AutoFit End Sub
使用步骤:
- 打开目标Excel文件,按
Alt + F11打开VBA编辑器 - 右键左侧工作簿名称 → 插入 → 模块
- 粘贴上述代码,按
F5运行宏即可
方法二:Excel公式实现
新建一张名为「Output」的工作表,在A1和B1单元格分别输入以下公式,选中两个单元格向下拖拽填充至出现空白:
- A列(门店名称):
=INDEX(Stores!$A:$A,INT((ROW()-1)/COUNTA(Items!$A:$A))+1)
- B列(商品编号):
=INDEX(Items!$A:$A,MOD(ROW()-1,COUNTA(Items!$A:$A))+1)
公式说明:
COUNTA(Items!$A:$A)自动统计商品总数,无需手动修改数字- 利用行号的整除和取余运算,循环匹配每个门店与对应商品
内容的提问来源于stack exchange,提问作者mcnabb.ryan
相关产品推荐
相关产品推荐

