Похоже, ваш UDF может не зависеть от каких-либо ячеек, которые изменяют значение при обработке вашей БД.
См. Эта ссылка MSDN
Опубликовать ваш UDF (или только его заголовок, есливы предпочитаете) и пример его использования ...
РЕДАКТИРОВАТЬ:
Да, ни один из параметров UDF не являются ссылками на ячейки, поэтому UDF не запускается для пересчета при изменении данных на листе.
У вас есть два варианта:
1. переписать свой UDF, чтобы включить параметр (ы), которые ссылаются на ячейки, которые изменяют значение при обработке БД, 2. сделать ваш UDF энергозависимым (включите Application.Volatile
вКод UDF) ПРЕДУПРЕЖДЕНИЕ: это может быть очень неэффективно, в зависимости от того, сколько времени используется UDF и насколько интенсивно его вычисление
РЕДАКТИРОВАТЬ 2:
Вот рефакторинг вашего udfиспользуя первую упомянутую опцию:
Public Function number_of_appearances(term As String, rng As Range) As Integer
Dim v As Variant
Dim i As Long, j As Long
Dim appearances As Long
v = Intersect(rng, rng.Worksheet.UsedRange)
For j = LBound(v, 2) To UBound(v, 2)
For i = LBound(v, 1) To UBound(v, 1)
If v(i, j) = term Then
appearances = appearances + 1
End If
Next i, j
number_of_appearances = appearances
End Function
используйте как =number_of_appearances("test";Sheet1!C:C)
РЕДАКТИРОВАТЬ 3:
Если все, что вы делаете, это подсчет количества вхождений строки в диапазоне, рассмотритеиспользуя
=COUNTIF(Sheet1!C:C;"test")