Excel精英培训网

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

[已解决]多行多列字符串拆分

[复制链接]
发表于 2016-9-17 21:02 | 显示全部楼层 |阅读模式
条件:A1:D5为源数据,A10:H14为目标数据
目标:用VBA代码实现字符串拆分(多行单列的字符串已可以实现,现求助多行多列字符串如何拆分)?感谢!
因数据的涉密性,故做了示意数据,请见谅。

最佳答案
2016-9-17 22:13
根据你这附件做的,和你那个模拟的一样 了,实际的你自己参考代码做修改吧
  1. Option Explicit
  2. Sub test()
  3.     Dim arrSrc, arrRst(), arrSplt
  4.     Dim irow%, icol%, iCnt%, Cnt%
  5.     arrSrc = Range("a1").CurrentRegion.Value
  6.     ReDim arrRst(1 To UBound(arrSrc), 1 To UBound(arrSrc, 2) * 2)
  7.     For irow = 2 To UBound(arrSrc)
  8.         For icol = 1 To UBound(arrSrc, 2)
  9.             If Len(arrSrc(irow, icol)) > 0 Then
  10.                 arrSplt = Split(arrSrc(irow, icol), Chr(10))
  11.             Else
  12.                 arrSplt = Split(arrSrc(irow, icol - 1), Chr(10))
  13.             End If
  14.             For iCnt = 0 To UBound(arrSplt)
  15.                 Cnt = Cnt + 1
  16.                 arrRst(irow, Cnt) = arrSplt(iCnt)
  17.             Next
  18.             Erase arrSplt
  19.         Next
  20.         Cnt = 0
  21.     Next
  22.     arrRst(1, 1) = arrSrc(1, 1)
  23.     Range("a10").Resize(1, UBound(arrRst, 2)).Merge
  24.     With Range("a10").Resize(UBound(arrRst), UBound(arrRst, 2))
  25.         .Value = arrRst
  26.         .HorizontalAlignment = xlCenter
  27.         .HorizontalAlignment = xlCenter
  28.         .Borders.LineStyle = True
  29.         .Font.Size = 10
  30.     End With
  31. End Sub
复制代码

多行多列字符串拆分.rar

6.34 KB, 下载次数: 39

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-9-17 22:13 | 显示全部楼层    本楼为最佳答案   
根据你这附件做的,和你那个模拟的一样 了,实际的你自己参考代码做修改吧
  1. Option Explicit
  2. Sub test()
  3.     Dim arrSrc, arrRst(), arrSplt
  4.     Dim irow%, icol%, iCnt%, Cnt%
  5.     arrSrc = Range("a1").CurrentRegion.Value
  6.     ReDim arrRst(1 To UBound(arrSrc), 1 To UBound(arrSrc, 2) * 2)
  7.     For irow = 2 To UBound(arrSrc)
  8.         For icol = 1 To UBound(arrSrc, 2)
  9.             If Len(arrSrc(irow, icol)) > 0 Then
  10.                 arrSplt = Split(arrSrc(irow, icol), Chr(10))
  11.             Else
  12.                 arrSplt = Split(arrSrc(irow, icol - 1), Chr(10))
  13.             End If
  14.             For iCnt = 0 To UBound(arrSplt)
  15.                 Cnt = Cnt + 1
  16.                 arrRst(irow, Cnt) = arrSplt(iCnt)
  17.             Next
  18.             Erase arrSplt
  19.         Next
  20.         Cnt = 0
  21.     Next
  22.     arrRst(1, 1) = arrSrc(1, 1)
  23.     Range("a10").Resize(1, UBound(arrRst, 2)).Merge
  24.     With Range("a10").Resize(UBound(arrRst), UBound(arrRst, 2))
  25.         .Value = arrRst
  26.         .HorizontalAlignment = xlCenter
  27.         .HorizontalAlignment = xlCenter
  28.         .Borders.LineStyle = True
  29.         .Font.Size = 10
  30.     End With
  31. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
cunfu2010 + 3 很给力

查看全部评分

回复

使用道具 举报

发表于 2016-9-17 22:16 | 显示全部楼层
我不会做,单纯是好奇为什么第一行是四个单元格的合并单元格,为什么不显示1111呢?这规律弄得我抓狂!
回复

使用道具 举报

 楼主| 发表于 2016-9-18 08:40 | 显示全部楼层
Excel学徒123 发表于 2016-9-17 22:13
根据你这附件做的,和你那个模拟的一样 了,实际的你自己参考代码做修改吧

感谢,我先自己修改一下,有问题再麻烦你。
回复

使用道具 举报

 楼主| 发表于 2016-9-19 08:18 | 显示全部楼层
Excel学徒123 发表于 2016-9-17 22:13
根据你这附件做的,和你那个模拟的一样 了,实际的你自己参考代码做修改吧

版主你好,还有一个小问题麻烦问一下:
If Len(arrSrc(irow, icol)) > 0 Then
                arrSplt = Split(arrSrc(irow, icol), Chr(10))
            Else
                arrSplt = Split(arrSrc(irow, icol - 1), Chr(10))
            End If
            For iCnt = 0 To UBound(arrSplt)
                Cnt = Cnt + 1
                arrRst(irow, Cnt) = arrSplt(iCnt)
            Next

上面这段代码总体意思我明白,但总是感觉还不是很透彻,能否解释一下,特别是标识的部分。谢谢!
回复

使用道具 举报

发表于 2016-9-19 17:27 | 显示全部楼层
cunfu2010 发表于 2016-9-19 08:18
版主你好,还有一个小问题麻烦问一下:
If Len(arrSrc(irow, icol)) > 0 Then
                arrSplt ...

就是一个判断,如果是空的单元格,就用左边那个来填充
后面那个+1的就是一个计数器,为了放数据进数组用的
回复

使用道具 举报

 楼主| 发表于 2016-9-19 20:25 | 显示全部楼层
Excel学徒123 发表于 2016-9-19 17:27
就是一个判断,如果是空的单元格,就用左边那个来填充
后面那个+1的就是一个计数器,为了放数据进数组用 ...

谢谢,非常感谢。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 22:17 , Processed in 0.299385 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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