在Excel VBA中搜索并替换为通配符

时间:2018-05-22 09:55:59

标签: excel-vba wildcard vba excel

我使用逗号作为小数分隔符,但有时我会收到值低于设定限制的文件,然后文件使用点作为“< 2.5”。有时小数分隔符前面有一个数字,有时有两位数。

我需要能够以单元格中的逗号替换点,并以“小于”符号开头,但保留实际数字,以便将“< 2.5”替换为“< 2,5”并且“< 10.0”被替换为“< 10,0”。这需要在Excel VBA中完成。

我不能一般搜索“。”并用“,”替换,因为有些地方我需要保持原点。

任何人都知道如何实现这个目标?

2 个答案:

答案 0 :(得分:1)

通过Replace功能

进场

您可以将数据读入数据字段数组,替换上面提到的“<”数据通过Replace函数,并通过以下代码将它们写回一个语句中。 - 当然也可以使用 RegEx ,如上面评论中所述。

备注

a)我假设您正在使用A列中的数据:A来自Set rng = ws.Range("A1:A" & n);这很容易改变到任何其他范围。

b)为变量数据字段数组赋值会自动创建一个基于2的dim数组,只有一列才能解决这个问题,例如:通过v(1,1)v(2,1)v(3,1)等到v(n,1)

示例代码

Option Explicit

Sub replaceLowerThan()
Dim ws      As Worksheet
Set ws = ThisWorkbook.Worksheets("MySheet")    ' << Change to your sheet name
Dim n       As Long, i As Long
Dim rng     As Range
Dim v
' get last row number and define data range
  n = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
  Set rng = ws.Range("A1:A" & n)
' write data to 1-based 2-dim datafield array
  v = rng.Value2
' replace "<..." values
  For i = 1 To n
      If Not IsError(v(i, 1)) Then    ' omit cells with errors like #DIV/0!
         If v(i, 1) Like "<*" Then v(i, 1) = Replace(v(i, 1), ".", ",")
      End If
  Next i
' write values back
  rng.Value2 = v
End Sub

答案 1 :(得分:1)

这有效:

Dim strPattern As String: strPattern = "(<[0-9]+)[\.]"
Dim strReplace As String: strReplace = "$1,"
Dim myreplace As Long
Dim strInput As String
Dim Myrange As Range

Set RegEx = CreateObject("VBScript.RegExp")
Set Myrange = ActiveSheet.UsedRange

For Each cell In Myrange
    If strPattern <> "" Then
        strInput = cell.Value

        With RegEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If RegEx.Test(strInput) Then
             cell.Value = (RegEx.Replace(strInput, strReplace))

        End If
    End If
Next