Поиск и замена с подстановочными знаками в Excel VBA - PullRequest
0 голосов
/ 22 мая 2018

Я использую запятую в качестве десятичного разделителя, но иногда я получаю файлы, значения которых ниже установленного предела, а затем файл использует точку как «<2.5».Иногда перед десятичным разделителем стоит одна цифра, а иногда две цифры. </p>

Мне нужно иметь возможность заменить точку запятой в ячейках, начинающихся с символа «меньше», но сохранитьфактические числа, так что «<2,5» заменяется на «<2,5», а «<10,0» заменяется на «<10,0».Это должно быть сделано в Excel VBA. </p>

Я не могу выполнить общий поиск "."и заменить на «,», так как есть места, где мне нужно сохранить точку зрения такой, какая она есть.

У кого-нибудь есть идеи, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Это сработало:

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
0 голосов
/ 22 мая 2018

Подход с помощью Replace функции

Вы можете прочитать данные в массив поля данных , заменить упомянутые данные "<" с помощью функции <code>Replace изапишите их обратно в одном утверждении с помощью следующего кода.- Конечно, можно использовать RegEx , как указано в комментарии выше.

Примечания

a) Я предполагаю, что вы используете данные встолбец A: от A до Set rng = ws.Range("A1:A" & n);это может быть легко изменено на любой другой диапазон.

b) При присваивании значений другому массиву полей данных автоматически создается двухблочный массив на основе одного, к которому вы обращаетесь только в случае одного столбца, например, с помощью 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
...