我正在尝试在数千个条目的列表中找到前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分。
答案 0 :(得分:0)
逻辑:
Countif
计算替换代码:试试这个
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