用于替换表中的值的宏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于替换表中的值的宏相关的知识,希望对你有一定的参考价值。

我有大量的数据(大约60列和60,000行)格式化为Excel中的表格。我希望使用宏来替换大于1的所有值,这些值位于表中标题为“Salary”的列中,值为“2”。该表是动态的,因此我需要引用替换为Tables列名而不是像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
答案

我看到这是你在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他使用'Evaluate'函数的方法与我原来的答案相比是瞬时的:

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

Evaluate可以用来立即替换所有:

[Table1[Salary]] = [if(Table1[Salary] > 1, 2, Table1[Salary])]

以上是关于用于替换表中的值的宏的主要内容,如果未能解决你的问题,请参考以下文章

sql - 当我得到 2 个或更多具有相同值的值时,仅更新 1 个(查询找到的第一个)值的方法?

更新所有工作表中的宏是相同的(或使代码更全局?)

从大字典中替换 DataFrame 中的值的更好方法

片段的 onAttach 中的值的可能性是啥

如何在不实际替换代码中的值的情况下获取与某些坐标对应的函数值?

如何用(data.frame)查找表中的值标签替换数据框中的数字代码?