ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

新人在工作中遇到的问题,希望大家给与帮助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-9-16 14:10 | 显示全部楼层 |阅读模式
新建 Microsoft Office Excel 工作表 (2).zip (7.39 KB, 下载次数: 21)
如附件,拿到的表格是城市区号和相对应的号段,需要整理出来,但是很多数据给出的都是范围,我想将712-714这种数据转化成712,713,714,这种数据,再在前边加上他在上边的1846输出到右边,希望各位大牛能给小弟一些指点

TA的精华主题

TA的得分主题

发表于 2013-9-16 15:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
数据有问题!把原始数据的单元格格式改为“常规”后仔细看看!

TA的精华主题

TA的得分主题

发表于 2013-9-16 16:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-9-16 16:47 | 显示全部楼层
本帖最后由 老谭酸菜 于 2013-9-16 18:17 编辑

代码:
\[code=vb]Sub 数据整理()
    Dim sz, sz1, sz3
   
    Sheets(2).Cells.ClearContents
    Sheets(1).Activate
    n = [VI1].End(xlToLeft).Column
    rng1 = Range(Cells(1, 2), Cells(1, n))   '号段区
    rng2 = Range(Cells(2, 1), Cells([A65536].End(xlUp).Row, 1))   '区号
    rng3 = Range(Cells(2, 2), Cells([A65536].End(xlUp).Row, n))   '尾号区
    n = n - 1
    m = 1
    Sheets(2).Cells(m, 1) = Range("A1")
    Sheets(2).Cells(m, 2) = "号段"
    m = m + 1
    For i1 = 1 To UBound(rng2)         '逐区号循环
        For i2 = 1 To UBound(rng1, 2)    '逐号段循环
            If Len(Trim(rng3(i1, i2))) = 0 Then GoTo out
            If InStr(rng3(i1, i2), ",") > 0 Then
                sz = Split(Replace(rng3(i1, i2), " ", "", 1, -1), ",")
            Else
                ReDim sz(0)
                sz(0) = rng3(i1, i2)
            End If

            For i3 = 0 To UBound(sz)
                If InStr(sz(i3), "-") > 0 Then
                    sz3 = Split(sz(i3), "-")
                    ReDim sz1(CInt(sz3(1)) - CInt(sz3(0)))
                    For i5 = CInt(sz3(0)) To CInt(sz3(1))
                        sz1(i5 - CInt(sz3(0))) = IIf(Len(CStr(i5)) = 3, CStr(i5), IIf(Len(CStr(i5)) = 2, "0" & CStr(i5), "00" & CStr(i5)))
                    Next i5
                Else
                    ReDim sz1(0)
                    sz1(0) = sz(i3)
                End If
               
                For i4 = 0 To UBound(sz1)
                    str1 = rng1(1, i2) & sz1(i4)
                    Sheets(2).Cells(m, 1) = rng2(i1, 1)
                    Sheets(2).Cells(m, 2) = str1
                    m = m + 1
                Next i4
            Next i3
out:
        Next i2
    Next i1
    Sheets(2).Activate
End Sub
[/code]

TA的精华主题

TA的得分主题

发表于 2013-9-16 16:50 | 显示全部楼层
本帖最后由 老谭酸菜 于 2013-9-16 18:19 编辑

附件:

新建 Microsoft Office Excel 工作表 (2).rar (17.37 KB, 下载次数: 3)

帮你把错误的数据改正了。你数据中那些逗号分隔符是假的!用格式设置出来的。结果放在第二个表里。
文件格式也从“.xlsx”改为“.xlsm”了,否则不支持宏代码!

TA的精华主题

TA的得分主题

发表于 2013-9-16 18:23 | 显示全部楼层
附件请测试,没有遇到格式问题,结果正确
注:结果生成在A21开始的单元格区域
  1. Private Sub CommandButton1_Click()
  2. Dim arr, arr1(1 To 1000, 1 To 2), arr2, i&, j&, k&, l&, s$, m&
  3. arr = [a1].CurrentRegion
  4. m = 1
  5. For i = 2 To UBound(arr)
  6.   For j = 2 To UBound(arr, 2)
  7.     If arr(i, j) <> "" Then
  8.       If InStr(arr(i, j), "-") Then
  9.         arr2 = Split(arr(i, j), ",")
  10.         For k = 0 To UBound(arr2)
  11.           If InStr(arr2(k), "-") Then
  12.             For l = Split(arr2(k), "-")(0) To Split(arr2(k), "-")(1)
  13.               s = s & "," & l
  14.             Next l
  15.             arr2(k) = Mid(s, 2)
  16.           End If
  17.         Next k
  18.         arr(i, j) = Join(arr2, ",")
  19.       End If
  20.     End If
  21.     arr2 = Split(arr(i, j), ",")
  22.     For l = 0 To UBound(arr2)
  23.       arr1(m, 1) = arr(i, 1)
  24.       arr1(m, 2) = arr(1, j) & arr2(l)
  25.       m = m + 1
  26.     Next l
  27.   Next j
  28. Next i
  29. [a21].Resize(UBound(arr1), 2) = arr1
  30. End Sub
复制代码

拆分数据.zip

9.97 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2013-9-16 18:52 | 显示全部楼层
大灰狼1976 发表于 2013-9-16 18:23
附件请测试,没有遇到格式问题,结果正确
注:结果生成在A21开始的单元格区域

呵呵,奇怪了!难道是我的EXCEL有问题?

TA的精华主题

TA的得分主题

发表于 2013-9-16 18:54 | 显示全部楼层
你再下载一个楼主的附件看一下,可能他已经更新过了

TA的精华主题

TA的得分主题

发表于 2013-9-16 18:55 | 显示全部楼层
本帖最后由 老谭酸菜 于 2013-9-16 18:57 编辑

又试了下,当我双击了数据单元格后,格式就变了,逗号消失!成为千分位的货币格式。看来是我错怪楼主了!

TA的精华主题

TA的得分主题

发表于 2013-9-16 19:07 | 显示全部楼层
大灰狼1976 发表于 2013-9-16 18:23
附件请测试,没有遇到格式问题,结果正确
注:结果生成在A21开始的单元格区域

把B3单元格的数据改为“001-005,717”再运行下看看?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-6 15:18 , Processed in 0.029026 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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