返回在搜索中完成的替换次数&在Excel中替换

时间:2015-11-10 10:21:53

标签: excel-vba vba excel

我正在尝试在数千个条目的列表中找到前10名,以创建持续的硬件故障报告。该报告显示了各种事物的前10名。例如,前10个错误,前10个停机时间等。它用于将工程师定位到制造工厂中最关键的机器。

当我们遇到255个错误时,我们的宏工作正常。我们现在将错误列表扩展到2048,我们设想我们的宏运行速度会非常慢。

我有一个想法是利用搜索和替换功能,并利用替换次数来达到前10名。手动显示一个消息框,给出这个数字。录制此宏时,看不到任何消息框(这很好),但我无法找到该数字的位置。

该函数返回一个布尔值。

录制的宏看起来像这样。

Sub searchmacrotest()

' searchmacrotest Macro
    Cells.Replace What:="a", Replacement:="AZ", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Cells.Replace What:="AZ", Replacement:="a", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

End Sub

第一行只是将a更改为Az,第二行将其更改为a。他们跑得很快,并在我的名单上给出了75分。

1 个答案:

答案 0 :(得分:0)

逻辑

  1. 使用唯一字词替换。选择时确保不会发生这个词。
  2. 使用Countif计算替换
  3. 后此唯一单词的出现次数

    代码:试试这个

    Sub GetReplaceCount()
        Dim ws As Worksheet
    
        '~~> Set this to a word which is unique
        Dim magicword As String: magicword = "Sid" & Format(Now, ddmmyyhhmmss)
    
        '~~> This is what you want to replace
        Dim searchText As String: searchText = "a"
    
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        With ws
            .Cells.Replace What:=searchText, Replacement:=magicword, LookAt:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
            '~~> This will give you the number of occurences
            Debug.Print Application.WorksheetFunction.CountIf(.UsedRange, "*" & magicword & "*")
    
            .Cells.Replace What:=magicword, Replacement:=searchText, LookAt:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        End With
    End Sub