我在Excel中将大量数据(约60列和60,000行)格式化为表格。我正在寻找使用宏来替换表中标题为“ Salary”的列中所有大于1的值,并将其替换为“ 2”。该表是动态的,因此我需要将“替换”引用到“表”列名而不是D:D之类的列范围。
更新: 我整理了以下代码,但是当我使用What:=“> 0”时无法使它正常工作,但是如果what =“ 5”,它将可以正常工作。我在做什么错了?
Sub FindReplace3()
ActiveSheet.ListObjects("Table1").ListColumns(61).DataBodyRange.Replace _
What:=">0", replacement:="7", _
SearchOrder:=xlByColumns, MatchCase:=True
End Sub
答案 0 :(得分:1)
Evaluate可用于一次替换所有内容:
[Table1[Salary]] = [if(Table1[Salary] > 1, 2, Table1[Salary])]
答案 1 :(得分:0)
我看到这是您关于Stackoverflow的第一篇文章,欢迎您。
我还看到您的问题已被标记下来,这对于网站的首次介绍可能会令人沮丧。
因此,期望您首先进行研究和尝试很多事情,然后将问题信息发布出去。
您非常接近,但是您的代码失败了,因为您正在搜索文字字符串“> 0”(What:=“> 0”)。 > 0显然不存在为文字字符串。
内置的replace函数将查找限制为文字字符串。因此,我将使用这种方法:
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