【问题标题】:Search and replace with wildcards in Excel VBA在 Excel VBA 中搜索和替换通配符
【发布时间】:2018-05-22 09:55:59
【问题描述】:

我使用逗号作为小数分隔符,但有时我会收到值低于设定限制的文件,然后文件使用点作为“

我需要能够用逗号替换以“小于”符号开头的单元格中的点,但保留实际数字,以便将“

我无法对“.”进行一般搜索。并替换为“,”,因为有些地方我需要保持原样。

有人知道如何实现这一目标吗?

【问题讨论】:

  • 如果通过 VBA 然后查看 RegEx
  • 你能推荐一个很好的正则表达式教程吗?我无法对我能找到的东西做出正面或反面。
  • 你可以从This开始
  • @LarsS - 通过Replace 函数添加了一个数组方法来解决您的通配符问题:-)

标签: excel wildcard vba


【解决方案1】:

通过Replace函数接近

您可以将数据读入 datafield 数组,通过Replace 函数替换提到的“RegEx,就像上面评论中提到的那样。

备注

a) 我假设您通过 Set rng = ws.Range("A1:A" & n) 使用 A:A 列中的数据;这可以很容易地更改为任何其他范围。

b) 将值分配给变量数据字段数组会自动创建一个基于 1 的 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

【讨论】:

  • 我采用了 RegEx 方法并找到了一个可行的解决方案,但感谢您提供的替代解决方案。我发现 RegEx 模式语法难以理解,这更容易理解 :)
【解决方案2】:

这行得通:

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

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2014-01-24
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2018-09-28
    相关资源
    最近更新 更多