2017-03-08 95 views
1

我想创建一个宏给我一些问题,因为我没有经验,也不知道从哪里开始。Excel FInd并替换正则表达式宏

我所要做的就是创建一个查找并替换宏,它将用空白替换部分字符串。

例如,我有以下Custom Field(Id),我希望marco做的所有事情是从Id中删除所有内容。

我该如何做到这一点?

代码

Sub FindReplace() 

Dim sht As Worksheet 
Dim fndList As Variant 
Dim rplcList As Variant 
Dim x As Long 

fndList = Array("Custom field(", ")") 
rplcList = Array("", "") 

'Loop through each item in Array lists 
For x = LBound(fndList) To UBound(fndList) 
    'Loop through each worksheet in ActiveWorkbook 
    For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
     SearchFormat:=False, ReplaceFormat:=False 
    Next sht 
Next x 

End Sub 
+1

“Id”是一个数字吗? –

+0

Nope Id是一个字符串,另一个例子是'Custom field(Status)',我只想保留'Status' – dataMan

+0

,这样我的Solution1就可以用于这两种情况。你可以创建一个VBA代码,用于查找并替换字符串自定义字段(用于'nothing'和''查找并替换''char')用于'Nothing' –

回答

1

你可以做到这一点使用Find & Replace没有正则表达式!

enter image description here

解决方法1:

  1. 选择数据
  2. 打开Find &更换模块
  3. ""
  4. 更换"Custom Field("""更换")"

溶液2:

您可以使用式存在于this site或使用张贴在this site VBA代码以去除所有的非数字字符从字符串的。

Sub RemoveNotNum() 
'Updateby20131129 
Dim Rng As Range 
Dim WorkRng As Range 
On Error Resume Next 
xTitleId = "KutoolsforExcel" 
Set WorkRng = Application.Selection 
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) 
For Each Rng In WorkRng 
    xOut = "" 
    For i = 1 To Len(Rng.Value) 
     xTemp = Mid(Rng.Value, i, 1) 
     If xTemp Like "[0-9]" Then 
      xStr = xTemp 
     Else 
      xStr = "" 
     End If 
     xOut = xOut & xStr 
    Next i 
    Rng.Value = xOut 
Next 
End Sub 
+0

的问题感谢您的回答,这是非常有帮助的,但是我仍然有一个轻微的问题,当我运行宏没有任何反应?我改变了你在代码中找到替换建议,但正如我在运行时所说的那样,没有任何改变? – dataMan

+1

解决了这个问题,事实证明安全级别设置为高,马科斯被禁用,再次感谢 – dataMan

0

正则表达式/ Variant数组溶液

还处理用户那里的范围内选择多个区域的情况。

Sub Retain() 
Dim X 
Dim rng1 As Range 
Dim rng2 As Range 
Dim objRegex As Object 
Dim lngRow As Long 
Dim lngCOl As Long 

On Error Resume Next 
Set rng1 = Application.InputBox("select range", , Selection.Address, , , , , 8) 
On Error GoTo 0 

If rng1 Is Nothing Then Exit Sub 

Set objRegex = CreateObject("vbscript.regexp") 
With objRegex 
    .Pattern = "[^0-9]" 
    .Global = True 
For Each rng2 In rng1.Areas 
If rng2.Cells.Count > 1 Then 
    X = rng2.Value2 
     For lngRow = 1 To UBound(X, 1) 
      For lngCOl = 1 To UBound(X, 2) 
       X(lngRow, lngCOl) = .Replace(X(lngRow, lngCOl), vbNullString) 
      Next 
     Next 
    rng2.Value2 = X 
Else 
    rng2.Value2 = .Replace(rng2, vbNullString) 
End If 
Next 
End With 

End Sub