2014-01-15 111 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