2014-01-15 55 views
0

我有一张表,我需要替换几百个所有类似格式的公式。基本上,我需要删除IF语句和公式中这些语句的第二部分。我的想法是搜索所有具有“IF($ B $ 2 = $ BF $ 3”)的单元,然后在那些单元中用“”替换该位,然后再次用“”替换包括和之后的所有单元。但VBA给我“运行时错误1004应用程序或用户定义的错误。” 这将需要离开“=”,在明显的开始。下面的代码中。用Excel正则表达式替换Excel中的公式

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

我很想知道是否三个 '标准' 查找和替换会为你工作:1' = IF *,'带'z ='2',*'不带任何东西,3'z'不带任何东西。 – pnuts

+0

你在'范围内删除所有'IF's “F36:AG231”',或只是这个特殊的一个'IF($ B $ 2 = $ BF $ 3' – brettdj

+0

它运行在我的钻机精细,当然?你需要在“End If”和“Next”行之间添加一些类似“activecell.offset(1,0).select”的偏移量 – ron

回答

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 
+0

我的当前代码给出了运行时错误1004. – kzs

+0

你从哪里得到一个错误? – ron

0

这适用于单IF声明环 - 但将需要正则表达式的订单上的进一步调整,如果你有MULT彼此相互替换。


=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