Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: meizu9

[已解决]有人能帮我,实现这种换算吗? ^……^

  [复制链接]
发表于 2011-11-15 17:30 | 显示全部楼层
借用上楼附件:正则处理(单位的规则不清,以第一个为准)

  1. Sub JuSTTEST()
  2.     Dim Arr, i&, ArrR()
  3.     Arr = Range([f4], Cells(Rows.Count, "f").End(3)).Value
  4.     ReDim ArrR(1 To UBound(Arr), 1 To 3)
  5.     With CreateObject("vbscript.regexp")
  6.         .Global = True
  7.         .ignorecase = True
  8.         For i = 1 To UBound(Arr)
  9.             .Pattern = "(.+(ml|l|kg|g)[))]*\*)(.+))"
  10.             If .test(Arr(i, 1)) Then
  11.                 Arr(i, 1) = .Replace(Arr(i, 1), "$3")
  12.                 .Pattern = "[^0-9*]+"
  13.                 If .test(Arr(i, 1)) Then
  14.                     ArrR(i, 2) = .Replace(Arr(i, 1), "")
  15.                     If InStr(1, ArrR(i, 2), "*") Then
  16.                         ArrR(i, 1) = Application.Evaluate("=" & ArrR(i, 2))
  17.                     Else
  18.                         ArrR(i, 1) = ArrR(i, 2)
  19.                         ArrR(i, 2) = ""
  20.                     End If
  21.                 End If
  22.                 .Pattern = "[0-9*]+"
  23.                 If .test(Arr(i, 1)) Then
  24.                     ArrR(i, 3) = Mid(.Replace(Arr(i, 1), ""), 1, 1)
  25.                 End If
  26.             End If
  27.         Next i
  28.     End With
  29.     Range("h4:j" & Rows.Count).ClearContents
  30.     Range("h4").Resize(i - 1, 3) = ArrR
  31. End Sub
复制代码
根据条件拆分数据(VBA).rar (16.7 KB, 下载次数: 6)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2011-11-15 17:31 | 显示全部楼层
那么的帅 发表于 2011-11-15 15:06

谢谢帅老师、!!!

怎样将换算 I 列数据的代码去除掉?
回复

使用道具 举报

 楼主| 发表于 2011-11-15 17:33 | 显示全部楼层
liuguansky 发表于 2011-11-15 17:30
借用上楼附件:正则处理(单位的规则不清,以第一个为准)

谢谢liuguansky 老师、!!!{:24:}

怎样将换算 I 列数据的代码去除掉呢?{:31:}
回复

使用道具 举报

发表于 2011-11-15 17:58 | 显示全部楼层    本楼为最佳答案   
meizu9 发表于 2011-11-15 17:33
谢谢liuguansky 老师、!!!

怎样将换算 I 列数据的代码去除掉呢?
  1. Sub JuSTTEST()
  2.     Dim Arr, i&, ArrR()
  3.     Arr = Range([f4], Cells(Rows.Count, "f").End(3)).Value
  4.     ReDim ArrR(1 To UBound(Arr), 1 To 2)
  5.     With CreateObject("vbscript.regexp")
  6.         .Global = True
  7.         .ignorecase = True
  8.         For i = 1 To UBound(Arr)
  9.             .Pattern = "(.+(ml|l|kg|g)[))]*\*)(.+))"
  10.             If .test(Arr(i, 1)) Then
  11.                 Arr(i, 1) = .Replace(Arr(i, 1), "$3")
  12.                 .Pattern = "[^0-9*]+"
  13.                 If .test(Arr(i, 1)) Then
  14.                     ArrR(i, 1) = Application.Evaluate("=" & .Replace(Arr(i, 1), ""))
  15.                 End If
  16.                 .Pattern = "[0-9*]+"
  17.                 If .test(Arr(i, 1)) Then
  18.                     ArrR(i, 2) = Mid(.Replace(Arr(i, 1), ""), 1, 1)
  19.                 End If
  20.             End If
  21.         Next i
  22.     End With
  23.     Range("h4:j" & Rows.Count).ClearContents
  24.     Range("h4").Resize(i - 1, 2) = ArrR
  25. End Sub
复制代码
这样试试。
回复

使用道具 举报

 楼主| 发表于 2011-11-15 18:08 | 显示全部楼层
liuguansky 发表于 2011-11-15 17:58
这样试试。

谢谢老师~!!!
回复

使用道具 举报

发表于 2011-11-15 21:17 | 显示全部楼层
工程量计算时,经常的要用计算式求值的!
回复

使用道具 举报

发表于 2011-11-16 00:12 | 显示全部楼层
代码???复杂幺,大大超出我的能力范围!
回复

使用道具 举报

发表于 2011-11-16 00:19 | 显示全部楼层
不利于计算维护
回复

使用道具 举报

发表于 2011-11-17 17:24 | 显示全部楼层
正在学习,代码=LOOKUP(9E+307,--LEFT(MID(F4,FIND("*",F4)+1,20),ROW($1:$10)))*LOOKUP(9E+307,--MID(MID(F4,FIND("*",F4)+1,20)&"*1",FIND("*",MID(F4,FIND("*",F4)+1,20)&"*1")+1,ROW($1:$10)))中9E+307还没有看懂它代表什么

点评

科学计数法,即9*10^307,一个很大很大的数。  发表于 2011-11-17 17:49
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 11:34 , Processed in 0.314917 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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