VBA, пытающийся найти слово из диапазона, используя определяемую пользователем функцию

#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)