Первое правило повышения эффективности - ничего не выбирать и не активировать. С наборами данных в 300 и 200 строк соответственно ваш код занял 13,5 минут. Просто убрав выделение
For i = 2 To maxMn 'loop 1
'Sheets("Sh1").Select
'Cells(i, 2).Select
mnStr = Sheets("Sh1").Cells(i, 2).Value
mnArr = Split(mnStr, " ")
x = 2
For x = 2 To maxNm 'loop 2
numTotal = 0
numMatches = 0
'Sheets("Sh2").Select
'Cells(x, 6).Select
nameStr = Sheets("Sh2").Cells(x, 6).Value
сократить время до 154 секунд. Перерисовка экрана - самая большая временная задержка. Приведенный ниже код запускается за 2,18 секунды (5,6 секунды, если вы добавляете обновление строки состояния, которое вам не нужно, если это занимает всего 2 секунды)
Sub CompareWords2()
Dim vaNam As Variant, vaMn As Variant
Dim i As Long, j As Long
Dim vaSplitNam As Variant, vaSplitMn As Variant
Dim colUnique As Collection
Dim lWord As Long
Dim sLog As String
Dim lMatches As Long, lTotal As Long
Dim sgStart As Single
sgStart = Timer
'Put both ranges in an array
With ThisWorkbook.Sheets("Sh1")
vaMn = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
With ThisWorkbook.Sheets("Sh2")
vaNam = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp)).Value
End With
For i = LBound(vaMn, 1) To UBound(vaMn, 1)
For j = LBound(vaNam, 1) To UBound(vaNam, 1)
'put all the first words in a collection
vaSplitMn = Split(vaMn(i, 1), Space(1))
Set colUnique = New Collection
For lWord = LBound(vaSplitMn) To UBound(vaSplitMn)
colUnique.Add vaSplitMn(lWord), LCase(CStr(vaSplitMn(lWord)))
Next lWord
'add all the next words to the collection to remove duplicates
vaSplitNam = Split(vaNam(j, 1), Space(1))
For lWord = LBound(vaSplitNam) To UBound(vaSplitNam)
On Error Resume Next
colUnique.Add vaSplitNam(lWord), LCase(CStr(vaSplitNam(lWord)))
On Error GoTo 0
Next lWord
'Write to log
lMatches = UBound(vaSplitMn) + UBound(vaSplitNam) + 2 - colUnique.Count
lTotal = UBound(vaSplitMn) + 1
If lMatches >= lTotal / 2 Then
sLog = sLog & "(#" & i & " Sh1) (#" & j & " Sh2): |" & vaMn(i, 1) & "| - |" & vaNam(j, 1) & "| = "
sLog = sLog & lMatches & "/" & lTotal & " matches." & vbNewLine
End If
Next j
Next i
'post total log all at once
Open ThisWorkbook.Path & Application.PathSeparator & "CompareLog2.txt" For Output As #1
Print #1, sLog
Close #1
Debug.Print Timer - sgStart
End Sub