#vba #user-defined-functions
#vba #определяемые пользователем функции
Вопрос:
если у меня есть список важных слов, а затем поле текста / комментария. Я хочу выполнить поиск в поле любого из важных слов (целых слов, а не только строк)
т.е. если важным словом является «cat», я не хочу, чтобы «category» или «scatman» возвращали положительный результат.
Пока что это функция
Function RangeFunc(rng As Range, funct As String) As String
Dim c As Range
Dim cnt As Integer
cnt = 0
For Each c In rng.Cells
'If c.Text = funct Then
If InStr(c.Text, " "amp;functamp;" ") > 0 Then
cnt = cnt 1
End If
Next c
RangeFunc = cnt
Завершающая функция
Похоже, он не возвращает количество отдельных слов
Комментарии:
1. функция
InStr
используется для поиска строки внутри другой, поэтому, если вы ищете Cat, она выдаст вам совпадение по Scatman. Возможно, вы захотите использовать функцию,Find
которая имеет свойствоLookAt:=xlWhole
, означающее, что она будет искать только точное слово.2. Вы могли бы сказать
if len(funct)<>len(replace(funct,c.text,vbnullstring))
Ответ №1:
Вы можете сделать это, используя два диапазона, один для проверки списка, а другой для элементов для поиска, поэтому, имея список для проверки в A1: A3 и контрольный список в C1: C3, я использовал
=SUM(--($A$1:$A$3=$C$1:$C$3))
Это формула массива, поэтому для ввода ее в ячейку требуется нажать ctrl shift и enter.
Вы могли бы сделать
application.Evaluate("=SUM(--($A$1:$A$3=$C$1:$C$3))")
вместо этого в VBA отключите это.
Комментарии:
1. Спасибо, могу ли я использовать это со списком в одну ячейку. т.е. = sum(—(A1: A3 = C1)) ?
2. Это
SUMIF
: o)