用于替换表中的值的宏

问题描述 投票:0回答:2

我有大量的数据(大约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
excel vba
2个回答
0
投票

我看到这是你在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

1
投票

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

[Table1[Salary]] = [if(Table1[Salary] > 1, 2, Table1[Salary])]
© www.soinside.com 2019 - 2024. All rights reserved.