Я вижу, что это ваш первый пост в 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