ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3423|回复: 25

[求助] EXCEL单元格中1-3,5,7-9怎么转换成1,2,3,5,7,8,9

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-1-20 16:44 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ldsamoy 于 2023-1-20 16:58 编辑

如题,某些系统导出的数据会把顺序的数字合并成1-3模式,代表1,2,3。混合在一起很难处理,如何把1-3,5,7-9这样的数据批量写成逗号分隔的模式:1,2,3,5,7,8,9。

请大神指教。


如附件表格中原始数据转换为目标数据

工作簿1.zip

7.11 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2023-1-20 16:50 | 显示全部楼层
论坛里应该有雷同的问题,楼主检索下
如果还有问题,建议上传附件

TA的精华主题

TA的得分主题

发表于 2023-1-20 17:03 | 显示全部楼层
  1. Sub test0()
  2.   Dim ar, br, cr, i&, j&, k&, s$
  3.   ar = Range("A1").CurrentRegion.Resize(, 2)
  4.   For i = 2 To UBound(ar)
  5.     s = vbNullString
  6.     br = Split(ar(i, 1), ",")
  7.     For j = 0 To UBound(br)
  8.       cr = Split(br(j), "-")
  9.       For k = cr(0) To cr(UBound(cr))
  10.         s = s & "," & k
  11.       Next
  12.     Next
  13.     ar(i, 2) = Mid(s, 2)
  14.   Next
  15.   Range("A1").CurrentRegion.Resize(, 2) = ar
  16. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-1-20 17:34 | 显示全部楼层
Sub 整理()
With ActiveSheet
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r = 1 Then MsgBox "数据源为空": End
    .Range("b2:b" & r) = Empty
    ar = .Range("a1:b" & r)
    For i = 2 To UBound(ar)
        zf = ""
        If Trim(ar(i, 1)) <> "" Then
            If InStr(ar(i, 1), ",") = 0 And InStr(ar(i, 1), "-") = 0 Then
                ar(i, 2) = ar(i, 1)
            Else
                If InStr(ar(i, 1), ",") > 0 Then
                    rr = Split(ar(i, 1), ",")
                    For s = 0 To UBound(rr)
                        If Trim(rr(s)) <> "" Then
                            If InStr(rr(s), "-") = 0 Then
                                If zf = "" Then
                                    zf = rr(s)
                                Else
                                    zf = zf & "," & rr(s)
                                End If
                            Else
                                ks = Val(Split(rr(s), "-")(0))
                                js = Val(Split(rr(s), "-")(1))
                                For j = ks To js
                                    If zf = "" Then
                                        zf = j
                                    Else
                                        zf = zf & "," & j
                                    End If
                                Next j
                            End If
                        End If
                    Next s
                End If
            End If
            ar(i, 2) = zf
        End If
    Next i
    .Range("a1:b" & r) = ar
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-1-20 17:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-1-20 17:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
工作簿1.rar (14.79 KB, 下载次数: 14)

TA的精华主题

TA的得分主题

发表于 2023-1-20 18:15 | 显示全部楼层
Sub tt()
Dim str
Dim i, j, x, n
Dim brr(1 To 10000, 1 To 1)
For i = 2 To [a65536].End(3).Row
    arr = Split(Cells(i, 1), ",")
        n = 1
        For j = 0 To UBound(arr)
            If arr(j) Like "*-*" Then
                For x = Split(arr(j), "-")(0) To Split(arr(j), "-")(1)
                   str = str & "," & x
                Next
            Else
              str = str & "," & arr(j)
            End If
        Next
        Cells(i, 2) = Mid(str, 2)
        str = ""
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2023-1-20 18:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

发表于 2023-1-20 18:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
。。。。。。。。。。。。

工作簿1.zip

13.33 KB, 下载次数: 17

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-1-20 19:57 | 显示全部楼层
做成自定义函数吧,这种数据格式应用还是挺多的:

  1. Sub NumOrder()
  2. Dim Arr, r&, i&, j&, p$
  3. r = [a6536].End(xlUp).Row
  4. Range("B2:B" & r).ClearContents: Arr = Range("A1:B" & r)
  5. For i = 2 To UBound(Arr)
  6.     If Arr(i, 1) <> "" Then
  7.        p = Arr(i, 1)
  8.        Arr(i, 2) = Porder(p)
  9.     End If
  10. Next
  11. Range("A1").Resize(UBound(Arr), UBound(Arr, 2)) = Arr
  12. End Sub

  13. Public Function Porder(p As String) As String
  14.     Dim t&, Sr, s&, ps$
  15.     p = Replace(p, " ", ""): p = Replace(p, ",", ","): p = Replace(p, "-", "-")    '容错:有空格、大写统一转小写′
  16.     If InStr(p, ",") = 0 Then p = p & ","
  17.     Sr = Split(p, ",")
  18.     For s = 0 To UBound(Sr)
  19.         If InStr(Sr(s), "-") Then
  20.            For t = Val(Split(Sr(s), "-")(0)) To Val(Split(Sr(s), "-")(1))
  21.                If ps = "" Then ps = t Else ps = ps & "," & t
  22.            Next
  23.         Else
  24.            If ps = "" Then ps = Sr(s) Else ps = ps & "," & Sr(s)
  25.         End If
  26.     Next
  27.     Porder = ps
  28. End Function
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 14:27 , Processed in 0.037968 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表