Excel中扩展邮政编码范围:批量将范围拆分为单行单邮编
解决Excel中邮政编码范围批量扩展为单行单个邮编的问题
方法一:用Power Query(推荐,保留所有列,无需代码)
适合处理大量数据(7000组完全没问题),且能完整保留天数、服务等关联列:
- 选中包含邮编范围、天数、服务的整个数据区域,点击「数据」选项卡 → 「从表格/区域」,确认勾选「我的表格有标题」,进入Power Query编辑器。
- 选中邮编范围列,点击「转换」→「拆分列」→「按分隔符」,输入分隔符(比如
-),选择「拆分为行」。 - 此时邮编列会拆成起始和结束两个值,选中这两列,右键→「更改类型」→「整数」,确保是数值格式。
- 点击「添加列」→「自定义列」,输入公式(替换成实际拆分后的列名):
这会生成一个包含连续邮编的列表。{[邮编范围.1]..[邮编范围.2]} - 点击自定义列右侧的展开按钮,选择「展开到新行」,此时每个邮编会单独占一行。
- 删除原来的起始/结束邮编列,调整列顺序后,点击「主页」→「关闭并上载」,结果会导入到新工作表,所有关联列都会对应保留。
方法二:用VBA宏(灵活定制,保留所有列)
如果需要更灵活的定制,或者习惯用VBA,可以用以下代码:
- 按
Alt+F11打开VBA编辑器,插入新模块。 - 粘贴以下代码(根据实际列位置调整参数):
Sub ExpandZipCodes() Dim wsSource As Worksheet, wsDest As Worksheet Dim lastRow As Long, i As Long, startZip As Long, endZip As Long, zip As Long Dim destRow As Long Set wsSource = ActiveSheet '源数据所在工作表 Set wsDest = ThisWorkbook.Worksheets.Add '新建结果工作表 '复制表头 wsSource.Rows(1).Copy wsDest.Rows(1) destRow = 2 '假设邮编范围在A列,根据实际修改 lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow '拆分邮编范围(按"-"分隔,可替换成实际分隔符) startZip = CLng(Split(wsSource.Cells(i, "A").Value, "-")(0)) endZip = CLng(Split(wsSource.Cells(i, "A").Value, "-")(1)) '遍历每个邮编,复制关联列数据 For zip = startZip To endZip wsDest.Cells(destRow, "A").Value = zip '复制B及以后列的天数、服务等数据 wsSource.Cells(i, "B").Resize(1, wsSource.Columns.Count - 1).Copy wsDest.Cells(destRow, "B") destRow = destRow + 1 Next zip Next i MsgBox "邮编扩展完成!结果在新工作表中。" End Sub
- 回到Excel,按
F5运行宏,完成后结果会在新工作表中,所有关联列都会对应到每个邮编行。
方法三:仅扩展邮编列(无关联列需求)
如果只需要单独的邮编列,可简化Power Query步骤:
- 只选中邮编范围列进入Power Query,拆分列后添加自定义列表,展开后直接导出即可。
内容的提问来源于stack exchange,提问作者Naiky
相关产品推荐
相关产品推荐

