2017-03-08 10 views
1

私は経験がなく、どこから始めるべきかわからないので、私にいくつかの問題を与えているマクロを作成しようとしています。ExcelのFIndとRegexマクロの置換

私がしようとしているのは、文字列の一部を何も置き換えないマクロを検索して置き換えることです。

たとえば、私は次のようなものを持っています:Custom Field(Id)そして、私がしたいのは、マルコがしたいのは、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コードを作成することができます –

答えて

1

あなたは正規表現なしFind & Replaceを使用してこれを達成することができます!

enter image description here

解決法1:

  1. あなたのデータを選択し
  2. オープン""ため")"を交換し""
  3. ため"Custom Field("を交換モジュール交換してください&
  4. を探します

対処方法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

正規表現/バリアントアレイ溶液

はまた、ユーザが範囲内の複数の領域を選択する状況を処理します。

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 
関連する問題