Одним из основных замедлений в VBA является чтение / запись значений ячеек.Вы хотите максимально сократить количество операций чтения / записи на листе.Оказывается, что в большинстве случаев гораздо, намного быстрее считывать диапазон значений в массив, а затем выполнять вычисления для этого массива, чем выполнять те же вычисления для самого диапазона значений.
В вашем случае вы можете прочитать диапазон таблицы в массив (только одну операцию чтения) вместо выполнения операции чтения для каждой строки.
Dim mytable As ListObject
Dim myArr() As Variant
Set mytable = ThisWorkbook.Sheets(x).ListObject(1)
valuetosearch = "whatever"
valueResult = ""
myArr = mytable.Range.Value 'Read entire range of values into array
' looking for the corresponding value of column A in column B
For i = 1 To mytable.ListRows.Count
If myArr(i, 1) = valuetosearch Then 'Check the value of the ith row, 1st column
valueResult = myArr(i,2) 'Get the value of the ith row, 2nd column
Exit For
End If
Next i
Я провел быстрый тест для таблицыс 1 000 000 строк и с искомым значением, появляющимся только в самой последней строке (наихудший возможный случай).Ваш оригинальный код занимает 4.201 секунды, а этот - 0,484 секунды.Это почти в 9 раз быстрее!