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

如何在Power BI(DAX)及Excel中展开单元格内的字母数字范围并生成新行

在Power BI(DAX)和Excel中展开字母数字范围为单独行的方法

一、Power BI中用DAX实现

通过GENERATE函数遍历原表行,结合字符串提取与序列生成完成范围展开,具体DAX表达式如下:

展开后的表 = 
GENERATE(
    '原表', -- 替换为你的原始表名
    VAR Prefix = 
        LEFT(
            '原表'[列A],
            MINX(
                FILTER(GENERATESERIES(1, LEN('原表'[列A])), NOT ISNUMBER(VALUE(MID('原表'[列A], [Value], 1)))
            ) - 1
        )
    VAR StartNum = 
        VALUE(
            MID(
                '原表'[列A],
                LEN(Prefix) + 1,
                FIND("-", '原表'[列A]) - LEN(Prefix) - 1
            )
        )
    VAR EndNum = 
        VALUE(
            MID(
                '原表'[列A],
                FIND("-", '原表'[列A]) + 1,
                LEN('原表'[列A]) - FIND("-", '原表'[列A])
            )
        )
    RETURN
    SELECTCOLUMNS(
        GENERATESERIES(StartNum, EndNum),
        "列A", Prefix & [Value],
        "列B", '原表'[列B]
    )
)

逻辑说明

  1. 提取前缀字母:遍历字符串找到第一个数字的位置,截取之前的字母作为统一前缀;
  2. 拆分起止数字:从原范围字符串中提取起始、结束数字并转换为数值类型;
  3. 生成序列并拼接:用GENERATESERIES生成起止数字间的所有整数,和前缀拼接成单个编号,同时保留原行的其他数据。

二、Excel中的实现方法

Excel可通过**Power Query(推荐)**或公式完成,前者适配大数据量且操作更直观。

方法1:Power Query(推荐)

  1. 选中原数据区域,点击「数据」→「从表格/区域」,导入到Power Query编辑器;
  2. 选中「列A」,点击「转换」→「拆分列」→「按分隔符」,以"-"拆分出「列A.1」和「列A.2」;
  3. 添加自定义列提取前缀:
    = Text.Remove([列A.1], {"0".."9"})
    
    重命名为「前缀」;
  4. 添加自定义列提取起始数字:
    = Number.From(Text.Remove([列A.1], {"A".."Z"}))
    
    重命名为「起始数字」;
  5. 添加自定义列提取结束数字:
    = Number.From(Text.Remove([列A.2], {"A".."Z"}))
    
    重命名为「结束数字」;
  6. 添加自定义列生成数字序列:
    = List.Numbers([起始数字], [结束数字]-[起始数字]+1)
    
    重命名为「序列」;
  7. 点击「序列」列右侧的展开箭头,选择「展开到新行」;
  8. 添加自定义列拼接前缀和数字:
    = [前缀] & Text.From([序列])
    
    重命名为「列A」;
  9. 删除多余中间列,保留「列A」和「列B」,点击「关闭并上载」得到结果。

方法2:公式法(适合小数据量)

假设原数据在A2:B3区域,在空白列(如D2)输入以下数组公式(输入后按Ctrl+Shift+Enter确认),下拉填充至出现空值:

=IFERROR(INDEX($B:$B,INT((ROW(D2)-2)/(MAX(VALUE(MID($A:$A,FIND("-",$A:$A)+1,LEN($A:$A)-FIND("-",$A:$A)))-VALUE(MID($A:$A,MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1))))),FIND("-",$A:$A)-MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1))))))+1)+2)&LEFT($A:$A,MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1)))))-1)&(VALUE(MID($A:$A,MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1))))),FIND("-",$A:$A)-MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1)))))))+MOD(ROW(D2)-2,MAX(VALUE(MID($A:$A,FIND("-",$A:$A)+1,LEN($A:$A)-FIND("-",$A:$A)))-VALUE(MID($A:$A,MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1))))),FIND("-",$A:$A)-MIN(FILTER(ROW($1:$100),ISNUMBER(VALUE(MID($A:$A,ROW($1:$100),1))))))+1)),"")

注:公式逻辑复杂,仅适合数据量较小的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:58:16