Макрос для замены значений в таблице - PullRequest
0 голосов
/ 30 января 2019

У меня большой объем данных (около 60 столбцов и 60000 строк), отформатированных в виде таблицы в Excel.Я пытаюсь использовать макрос для замены всех значений больше 1, которые находятся в столбце с названием «Зарплата» в таблице значением «2».таблица является динамической, поэтому мне нужно ссылаться на замену на имя столбца Таблицы, а не на диапазон столбца, такой как D: D.

Обновление: Я собрал следующий код, но не могу получитьэто работает, когда я использую What: = "> 0", однако это будет работать, если что = "5".Что я делаю не так?

Sub FindReplace3()
ActiveSheet.ListObjects("Table1").ListColumns(61).DataBodyRange.Replace _
 What:=">0", replacement:="7", _
 SearchOrder:=xlByColumns, MatchCase:=True
End Sub

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Оценка может использоваться для замены всего сразу:

[Table1[Salary]] = [if(Table1[Salary] > 1, 2, Table1[Salary])]
0 голосов
/ 31 января 2019

Я вижу, что это ваш первый пост в Stackoverflow, так что, добро пожаловать.

Я также вижу, что вас понизили за ваш вопрос, который может расстроить вас как первое знакомство с сайтом.

В SO есть ожидание, что вы сначала исследуете и опробуете несколько вещей и отправляете эту информацию с вопросом.

Вы очень близки, но ваш код не работает, потому что вы ищетебуквенная строка "> 0" (What: = "> 0").> 0, очевидно, не существует в виде литеральной строки.

Встроенная функция замены ограничивает поиск литеральной строкой.Поэтому я бы использовал этот подход:

Sub replaceTest()

    Dim dblCnt As Double
    dblCnt = 0

    With ThisWorkbook.Worksheets("Sheet1")
        For i = 1 To Range("Table1").Rows.Count
            If Range("Table1[Salary]")(i) > 1 Then
                Range("Table1[Salary]")(i) = "2"
                dblCnt = dblCnt + 1
            End If
        Next i
    End With

MsgBox "Finished replacing " & CStr(dblCnt) & " items", vbOKOnly, "Complete"

End Sub

К вашему сведению, ваш пример кода ссылался на столбец 61, но вы сказали, что столбец называется «Зарплата».Вы можете ссылаться на имя столбца, изменив ваш образец с:

ActiveSheet.ListObjects("Table1").ListColumns(61).DataBodyRange.Replace _

на

ActiveSheet.ListObjects("Table1").ListColumns("Salary").DataBodyRange.Replace _

Я добавил еще один раздел кода ниже, и кредит должен перейти к @Slai Его подход с использованием 'Функция оценки 'мгновенная по сравнению с моим первоначальным ответом:

Sub replaceTest001()

    Dim StartTime As Date
    StartTime = Now()

    Dim dblCnt As Double
    dblCnt = 0

    Application.ScreenUpdating = False

    With ThisWorkbook.Worksheets("Sheet1")
        [Table1[Salary]] = [if(Table1[Salary] > 1, 2, Table1[Salary])]
    End With

    Application.ScreenUpdating = True

    MsgBox "Finished updating " & CStr(dblCnt) & " items" & vbCrLf & _
    "Time taken: " & Format((Now() - StartTime), "hh:mm:ss"), vbOKOnly, "Complete"

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...