You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中扩展邮政编码范围:批量将范围拆分为单行单邮编

解决Excel中邮政编码范围批量扩展为单行单个邮编的问题

方法一:用Power Query(推荐,保留所有列,无需代码)

适合处理大量数据(7000组完全没问题),且能完整保留天数、服务等关联列:

  • 选中包含邮编范围、天数、服务的整个数据区域,点击「数据」选项卡 → 「从表格/区域」,确认勾选「我的表格有标题」,进入Power Query编辑器。
  • 选中邮编范围列,点击「转换」→「拆分列」→「按分隔符」,输入分隔符(比如-),选择「拆分为行」。
  • 此时邮编列会拆成起始和结束两个值,选中这两列,右键→「更改类型」→「整数」,确保是数值格式。
  • 点击「添加列」→「自定义列」,输入公式(替换成实际拆分后的列名):
    {[邮编范围.1]..[邮编范围.2]}
    
    这会生成一个包含连续邮编的列表。
  • 点击自定义列右侧的展开按钮,选择「展开到新行」,此时每个邮编会单独占一行。
  • 删除原来的起始/结束邮编列,调整列顺序后,点击「主页」→「关闭并上载」,结果会导入到新工作表,所有关联列都会对应保留。

方法二:用VBA宏(灵活定制,保留所有列)

如果需要更灵活的定制,或者习惯用VBA,可以用以下代码:

  1. 按Alt+F11打开VBA编辑器,插入新模块。
  2. 粘贴以下代码(根据实际列位置调整参数):
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
  1. 回到Excel,按F5运行宏,完成后结果会在新工作表中,所有关联列都会对应到每个邮编行。

方法三:仅扩展邮编列(无关联列需求)

如果只需要单独的邮编列,可简化Power Query步骤:

  • 只选中邮编范围列进入Power Query,拆分列后添加自定义列表,展开后直接导出即可。

内容的提问来源于stack exchange,提问作者Naiky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:33:04