Excel精英培训网

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

[已解决]求V语句判断内容,自动换行

[复制链接]
发表于 2013-5-27 13:38 | 显示全部楼层 |阅读模式
根据单元格中数据,求一个V代码,根据内容设置数据自动换行,并调整单元格行高与设置单元格格式,,,在线等,希望大家帮我想想办法,如果V太麻烦函数也可以。。。。。由于我的数据在变化,而且具体应用时,单元格也不固定,所以想求个V代码。。在线等,~~~~~~
最佳答案
2013-5-27 15:29
  1. Sub 整理()
  2. '正则对象
  3.     Dim objRegExp As Object
  4.     Dim objItem As Object

  5.     '字符串,存储整理好的数据
  6.     Dim str$

  7.     '循环用
  8.     Dim i As Long, arr

  9.     '正则对象
  10.     Set objRegExp = CreateObject("VBScript.regExp")

  11.     '源数据
  12.     arr = Range("a1:i1")

  13.     With objRegExp
  14.         '全局匹配
  15.         .Global = True

  16.         '匹配规则
  17.         .Pattern = "(合计:)|(.+?笔)(.+?元)?\,?"

  18.         '数组内元素循环
  19.         For i = 1 To UBound(arr, 2)
  20.             '字符串清空
  21.             str = ""
  22.             '测试数组元素是否符合规则
  23.             If .test(arr(1, i)) Then
  24.                 '执行规则匹配,然后遍历对象
  25.                 For Each objItem In .Execute(arr(1, i))
  26.                     '每一行数据后面添加回车换行符
  27.                     str = str & objItem.Value & vbCrLf
  28.                 Next
  29.                 '生成的字符串写回数组
  30.                 arr(1, i) = str
  31.             End If
  32.         Next
  33.     End With

  34.     '数组再写回单元格
  35.     Range("a8").Resize(UBound(arr), UBound(arr, 2)).Value = arr
  36.     '行高自适应
  37.     Rows(8).EntireRow.AutoFit
  38.     '释放对象引用
  39.     Set objRegExp = Nothing
  40. End Sub
复制代码

新建 WinRAR 压缩文件 (2).rar

2.13 KB, 下载次数: 26

发表于 2013-5-27 14:13 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-5-27 14:18 | 显示全部楼层
lyf7276 发表于 2013-5-27 14:13
感觉你这用正则表达式最好

不明白意思,能否指点一二
回复

使用道具 举报

发表于 2013-5-27 14:30 | 显示全部楼层
Sub test()
    Dim st
    st = Cells(1, 1)
    st = Replace(Replace(st, "合计:", "合计:" & Chr(10), 1), "笔", "笔" & Chr(10), 1)
    Cells(8, 1) = st
   
    st = Cells(1, 4)
    st = Replace(st, "万元", "万元" & Chr(10), 1)
    Cells(8, 4) = st
   
  
    st = Cells(1, 9)
    st = Replace(Replace(st, "利率:", "利率:" & Chr(10), 1), "笔?", "笔?" & Chr(10), 1)
    Cells(8, 9) = st
    Rows("8:8").EntireRow.AutoFit
End Sub


可以这样直接用replace替换
回复

使用道具 举报

发表于 2013-5-27 14:41 | 显示全部楼层
数据录入规范点,另外尽用合并单元格。
回复

使用道具 举报

发表于 2013-5-27 14:43 | 显示全部楼层
正则是可以把数据分离出来。
正则表达式的规则:"(合计:)|(.+?笔)(.+?元)?\,?"
回复

使用道具 举报

发表于 2013-5-27 14:48 | 显示全部楼层
  1. Sub 整理()
  2.     Dim objRegExp As Object
  3.     Dim i As Long, arr
  4.     Dim objItem As Object
  5.     Set objRegExp = CreateObject("VBScript.regExp")
  6.     arr = Range("a1:i1")
  7.     Dim str$
  8.     With objRegExp
  9.         .Global = True
  10.         .Pattern = "(合计:)|(.+?笔)(.+?元)?\,?"
  11.         For i = 1 To UBound(arr, 2)
  12.             str = ""
  13.             If .test(arr(1, i)) Then
  14.                 For Each objItem In .Execute(arr(1, i))
  15.                     str = str & objItem.Value & vbCrLf
  16.                 Next
  17.                 arr(1, i) = str
  18.             End If
  19.         Next
  20.     End With
  21.     Range("a8").Resize(UBound(arr), UBound(arr, 2)).Value = arr
  22.     Rows(8).EntireRow.AutoFit
  23.     Set objRegExp = Nothing
  24. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-5-27 15:22 | 显示全部楼层
hwc2ycy 发表于 2013-5-27 14:48

谢了,我先测试一下,有个请求能给代码做下标注吗?
回复

使用道具 举报

发表于 2013-5-27 15:29 | 显示全部楼层    本楼为最佳答案   
  1. Sub 整理()
  2. '正则对象
  3.     Dim objRegExp As Object
  4.     Dim objItem As Object

  5.     '字符串,存储整理好的数据
  6.     Dim str$

  7.     '循环用
  8.     Dim i As Long, arr

  9.     '正则对象
  10.     Set objRegExp = CreateObject("VBScript.regExp")

  11.     '源数据
  12.     arr = Range("a1:i1")

  13.     With objRegExp
  14.         '全局匹配
  15.         .Global = True

  16.         '匹配规则
  17.         .Pattern = "(合计:)|(.+?笔)(.+?元)?\,?"

  18.         '数组内元素循环
  19.         For i = 1 To UBound(arr, 2)
  20.             '字符串清空
  21.             str = ""
  22.             '测试数组元素是否符合规则
  23.             If .test(arr(1, i)) Then
  24.                 '执行规则匹配,然后遍历对象
  25.                 For Each objItem In .Execute(arr(1, i))
  26.                     '每一行数据后面添加回车换行符
  27.                     str = str & objItem.Value & vbCrLf
  28.                 Next
  29.                 '生成的字符串写回数组
  30.                 arr(1, i) = str
  31.             End If
  32.         Next
  33.     End With

  34.     '数组再写回单元格
  35.     Range("a8").Resize(UBound(arr), UBound(arr, 2)).Value = arr
  36.     '行高自适应
  37.     Rows(8).EntireRow.AutoFit
  38.     '释放对象引用
  39.     Set objRegExp = Nothing
  40. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-5-27 15:47 | 显示全部楼层
hwc2ycy 发表于 2013-5-27 15:29

看了标注的代码,理解上还是有点问题,还代下一步理解理解,多谢了,测试了没问题,如果有什么理解的问题还要麻烦你一下,先学习一下,多谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 21:04 , Processed in 0.385539 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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