Excel 2016如何根据Brands列动态生成对应品牌列并填充Models数据?
嘿,这个需求我太熟了——品牌数量不固定,手动建列根本不现实,给你两个靠谱的解决方案,按需挑就行:
方案1:用Power Query(无需编程,动态更新)
这是最推荐的方法,完全不用写代码,还能自动适配新增的品牌:
- 第一步:导入数据到Power Query。选中你的数据区域(要包含「Brands」和「Models」表头),点击Excel顶部的「数据」选项卡 → 「从表格/区域」,确认勾选「我的表格有标题」,进入Power Query编辑器。
- 第二步:把品牌转成列。在编辑器里选中「Brands」列,点击「转换」选项卡 → 「透视列」。弹出的窗口里,「值列」选择「Models」,高级选项里选「不要聚合」(因为每个型号唯一,不会有冲突),然后点确定。
- 第三步:加载回Excel。点击「主页」选项卡 → 「关闭并上载」,选个位置加载结果就行。之后原数据新增品牌或型号时,只要右键点击生成的表格 → 「刷新」,它会自动更新列和数据,完全不用手动调整!
方案2:用VBA代码(一键自动化)
如果需要频繁批量处理,写个小脚本一键搞定更高效:
- 第一步:打开VBA编辑器。按
Alt + F11,右键左侧的工程窗口 → 插入 → 模块。 - 第二步:粘贴以下代码(记得把代码里的
Sheet1改成你的数据所在工作表名称):
Sub BrandToColumns() Dim ws As Worksheet Dim lastRow As Long, lastCol As Long Dim brandDict As Object Dim i As Long, j As Long ' 指定数据所在工作表,修改成你的表名 Set ws = ThisWorkbook.Worksheets("Sheet1") Set brandDict = CreateObject("Scripting.Dictionary") ' 获取数据最后一行 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 收集所有唯一品牌 For i = 2 To lastRow If Not brandDict.Exists(ws.Cells(i, "A").Value) Then brandDict.Add ws.Cells(i, "A").Value, brandDict.Count + 2 ' 从第2列开始放置品牌列 End If Next i ' 写入品牌表头 j = 2 For Each key In brandDict.Keys ws.Cells(1, j).Value = key j = j + 1 Next key ' 填充对应型号数据 For i = 2 To lastRow brandCol = brandDict(ws.Cells(i, "A").Value) ' 找到该品牌列的最后一行,写入型号 lastCol = ws.Cells(ws.Rows.Count, brandCol).End(xlUp).Row + 1 ws.Cells(lastCol, brandCol).Value = ws.Cells(i, "B").Value Next i MsgBox "品牌列已生成并填充完成!", vbInformation End Sub
- 第三步:运行代码。按
F5或者给代码加个Excel按钮,点击就能自动生成品牌列并填充型号。后续数据更新时,重新运行代码即可。
小提示:运行VBA前最好备份数据,防止意外情况。
内容的提问来源于stack exchange,提问作者jarmanso7
相关产品推荐
相关产品推荐

