Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2495|回复: 6

[已解决]数据拆分

[复制链接]
发表于 2017-9-15 15:14 | 显示全部楼层 |阅读模式
如何用VBA代码实现以下数据的拆分?本想通过SPLIT函数实现,但是失败了,还望各位指导,万分感谢 1.jpg


希望不通过页面操作实现,即:直接把区域写入数组后操作,自己写了如下一段代码:
  1. Sub test()
  2.     Dim ar
  3.     ar = Cells(1, 1).CurrentRegion
  4.     For i = 1 To UBound(ar)
  5.         br = Split(ar(i, 1), " ")
  6.     Next i
  7. End Sub
复制代码


得到的br如下图所示,但希望br只有数据(红色框出来的部分),没有中间那1长串没用的空值
想到一个方法:就是再循环br,通过判断后生成个新数组,但感觉很麻烦,不知是否有其他方法?还望各位大大指导,谢谢


2.jpg





最佳答案
2017-9-15 16:03
br = Split(Application.Trim(ar(i, 1)), " ")

test.zip

6.4 KB, 下载次数: 13

发表于 2017-9-15 15:27 | 显示全部楼层
Sub test()
    Dim ar, br, crr(1 To 1000, 0 To 20)
   
    ar = Cells(1, 1).CurrentRegion
    For i = 1 To UBound(ar)
        br = Split(ar(i, 1), " ")
        For j = 0 To UBound(br)
            crr(i, j) = br(j)
        Next j
    Next i
   
    Range("C1").Resize(UBound(ar), UBound(br) + 1) = crr

End Sub
回复

使用道具 举报

发表于 2017-9-15 16:03 | 显示全部楼层    本楼为最佳答案   
br = Split(Application.Trim(ar(i, 1)), " ")

评分

参与人数 1 +12 收起 理由
windyjw007 + 12 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

发表于 2017-9-15 16:03 | 显示全部楼层
br = Split(ar(i, 1), " ")

可改成

br = Split(Application.Trim(ar(i, 1)), Chr(32))

评分

参与人数 1 +12 收起 理由
windyjw007 + 12 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-9-15 16:32 | 显示全部楼层
  1. Sub test()
  2.     Dim ar
  3.     ar = Cells(1, 1).CurrentRegion
  4.     For i = 1 To UBound(ar)
  5.         x = Trim(ar(i, 1))
  6.         Do While InStr(x, "  ") > 0   '去掉两个以上的空格
  7.             x = Replace(x, "  ", " ")
  8.         Loop
  9.         br = Split(x, " ")
  10.         Cells(i + 9, 1).Resize(1, UBound(br) + 1) = br
  11.     Next i
  12. End Sub
复制代码

评分

参与人数 1 +12 收起 理由
windyjw007 + 12 神马都是浮云

查看全部评分

回复

使用道具 举报

发表于 2017-9-15 16:37 | 显示全部楼层
也可以先把整个数据源处理一下。
  1. Sub tt()
  2.     Do While Not [a1].CurrentRegion.Find("  ") Is Nothing
  3.         [a1].CurrentRegion.Replace "  ", " "
  4.     Loop
  5.     ar = Cells(1, 1).CurrentRegion
  6.     For i = 1 To UBound(ar)
  7.         x = Trim(ar(i, 1))
  8.         br = Split(x, " ")
  9.         Cells(i + 9, 1).Resize(1, UBound(br) + 1) = br
  10.     Next i
  11. End Sub
复制代码

评分

参与人数 1 +12 收起 理由
windyjw007 + 12 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-10-18 06:18 | 显示全部楼层
学习中
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-28 17:59 , Processed in 2.758739 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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