宏来替换表中的值

时间:2019-01-30 08:12:37

标签: excel vba

我在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

2 个答案:

答案 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