我有一张表,我需要替换几百个类似格式的公式。基本上,我需要删除公式中的IF语句和这些语句的第二部分。我的想法是搜索所有具有“IF($ B $ 2 = $ BF $ 3”)的单元格,然后在那些单元格中用“”替换该位,然后再替换包括和在下一个“,”之后的所有内容。但是VBA给了我“运行时错误1004应用程序或用户定义的错误”。 这显然需要在开头留下“=”。代码如下。
Sub Replace()
Set rng = Worksheets("Sheet1").Range("F36:AG231")
For Each c In rng
If InStr(1, ActiveCell.Formula, "IF", vbTextCompare) > 0 Then
y = ActiveCell.Formula
pos_1 = InStr(1, y, ",", vbTextCompare)
pos_2 = InStr(1 + pos_1, y, ",", vbTextCompare)
ActiveCell = "=" & Mid(y, 1 + pos_1, Len(y) - (1 + pos_2))
End If
Next
End Sub
答案 0 :(得分:0)
你必须使用正则表达式吗?如果没有,请循环执行以下内容
If InStr(1, ActiveCell.Formula, "IF", vbTextCompare) > 0 Then
y = ActiveCell.Formula
pos_1 = InStr(1, y, ",", vbTextCompare)
pos_2 = InStr(1 + pos_1, y, ",", vbTextCompare)
ActiveCell = "=" & Mid(y, 1 + pos_1, Len(y) - (1 + pos_2))
Else
End If
答案 1 :(得分:0)
这适用于单个IF
语句 - 但如果您在彼此内部有多个IF
替换,则需要对RegExp的顺序进行进一步调整。
公式
=1+IF($B$2=$BF$3,7,10)
变
=1+7
potental模式
如果您想删除IF
altogther使用,
X(lngRow, lngCol) = .Replace(X(lngRow, lngCol), "0")
而不是
X(lngRow,lngCol)= .Replace(X(lngRow,lngCol),“$ 1”)
所以
公式为
=1+IF($B$2=$BF$3,7,10)
变
=1+0
码
Sub WhatIf()
Dim rng1 As Range
Dim X
Dim objRegex As Object
Dim objRegMC As Object
Dim lngRow As Long
Dim lngCol As Long
Set rng1 = Worksheets("Sheet1").Range("F36:AG231")
X = rng1.FormulaR1C1
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "IF\(.+?,(.+?),.+?\)"
.Global = False
For lngRow = 1 To UBound(X, 1)
For lngCol = 1 To UBound(X, 2)
Do While .test(X(lngRow, lngCol))
X(lngRow, lngCol) = .Replace(X(lngRow, lngCol), "$1")
Loop
Next
Next
End With
rng1.Value2 = X
End Sub