|
我给你写了一段代码,你可能要仔细看才能搞的懂。主要是的公式太复杂,我不了解你公式的全貌,只能写一个大概:
先上代码:
gs = "*1.2"
Dim arr(1 To 6)
arr(1) = "+"
arr(2) = "-"
arr(3) = "*"
arr(4) = "[↓]"
arr(5) = "[↑]"
arr(6) = ")"
Application.ScreenUpdating = False
For i = 7 To 640
s = Cells(i, 14)
s1 = ""
wz = 0
Do While Len(s) > 0
js = 0
For k = 1 To UBound(arr)
js1 = InStr(s, arr(k))
If js1 > 0 Then
If js = 0 Then
wz = Len(arr(k))
js = js1
Else
If js1 < js Then
wz = Len(arr(k))
js = js1
End If
End If
End If
Next k
If js = 1 Then
s1 = s1 & Mid(s, 1, wz)
s = Mid(s, wz + 1, 1000)
Else
If js = 0 Then
s1 = s1 & s & gs
s = ""
Else
s1 = s1 & Mid(s, 1, js - 1) & gs
s = Mid(s, js, 1000)
End If
End If
Loop
Cells(i, 15) = s1
Next i
Application.ScreenUpdating = True
解释:
1、几个重要的参数:
gs:就是你要定义的公式,不是表格中的公式,是指“*1.2”。这是为了方便你替换,说不定哪天你要把公式改成*1.5呢;
是字符,目前是*1.2,你可以随便修改;
arr数组:是定义所有可能的标识符(运算符),这个是分隔公式的标志,不然代码也不知道如何判断插入*1.2;
标识符需要完整,不完整的就会有遗漏。我根据你公式先定义了如下标识符:
Dim arr(1 To 6) '标识符的数量,目前定义了下面的6个。如增减标识符数量,数组定义也要跟随变化;
arr(1) = "+"
arr(2) = "-"
arr(3) = "*"
arr(4) = "[↓]" '公式大量存在次标识,会分隔两组数字,我猜测每个数组都要分别*1.2,所以也把它看成是标识符了;
arr(5) = "[↑]"
arr(6) = ")"
2、先看几个例子:
第387行:1.8[↓]+1+2.9+2.8+3.2+3.7+3.2+3+4.3+5.2+4+0.3[↑]*21
替换结果:1.8*1.2[↓]+1*1.2+2.9*1.2+2.8*1.2+3.2*1.2+3.7*1.2+3.2*1.2+3*1.2+4.3*1.2+5.2*1.2+4*1.2+0.3*1.2[↑]*21*1.2
每一组数字,不论是+-*符号还是[↓][↑]都会被分隔插入1.2,这些都是标识符定义数组的分隔标志;
第383行:6*2[D'户型与D对称]
替换结果:6*1.2*2[D'户型与D对称]*1.2
*是定义了的,但 [D'户型与D对称] 没有定义,所以代码会把 2[D'户型与D对称] 看成是一个整体,在后面加 *1.2;
最后看一个比较复杂的来验证:
第201行:2.2[↑]+4.5+15.5+25.8+2.6+5.2+9+(2.3+2.7[↓])*4
替换结果:2.2*1.2[↑]+4.5*1.2+15.5*1.2+25.8*1.2+2.6*1.2+5.2*1.2+9*1.2+(2.3*1.2+2.7*1.2[↓])*4*1.2
你仔细对比下,我不知道是否领会了你的本意,看起来是那个意思。
3、关键是要全面定义标识符,才能准确识别分隔插入。你所说的1+2+3,这个例子过于简单,我不清楚 * 算不算?如果不算标识符,你自行删掉并适当修改数组定义;
|
评分
-
查看全部评分
|