Булева функция VBA с повторяющейся строкой #NAME Error - PullRequest
0 голосов
/ 25 марта 2020

Это, вероятно, очень основа c для большинства здесь, у меня нет предыстории и просто нужна помощь. Я должен написать функцию isDup в VBA, чтобы сравнить два твита на основе их одинакового количества слов, чтобы определить, являются ли твиты дублирующимися или нет, на основе выбранного десятичного порога (0-1). Если они являются дубликатами, функция вернет true. Каждый раз, когда я вызываю функцию, она возвращает #NAME в ячейке вместо true / false, и мне было интересно, может ли кто-нибудь дать мне несколько советов или сообщить, что я делаю неправильно. Спасибо!

Option Explicit
Function isDup(tweet1 As String, tweet2 As String, threshold As Double) As Boolean

Set threshold = 0 - 1
Dim tweet1Split() As String
    tweet1Split = Split(tweet1, " ")

Dim tweet2Split() As String
    tweet2Split = Split(tweet2, " ")

Dim i As Integer
Dim j As Integer

Dim sameCount As Integer

For i = LBound(tweet1Split) To UBound(tweet1Split) Step 1
    For j = LBound(tweet2Split) To UBound(tweet2Split) Step 1
        If StrComp(tweet1Split(i), tweet2Split(j), vbTextCompare) = 0 Then
            sameCount = sameCount + 1
            Exit For
        End If
    Next j
Next i

Dim score As Double
Dim arraySize As Double
arraySize = UBound(tweet1Split) - LBound(tweet1Split) + 1
score = sameCount / arraySize

If score > threshold Then
    isDup = True
Else
    isDup = False
End If

End Function

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Попробуй это. Поместите следующее в стандартный модуль кода ...

Public Function isDup(tweet1$, tweet2$, threshold#) As Boolean

    Dim c&, i&, j&, t1, t2

    t1 = Split(tweet1, " ")
    t2 = Split(tweet1, " ")

    For i = 0 To UBound(t1)
        For j = 0 To UBound(t2)
            If Not StrComp(t1(i), t2(j), vbTextCompare) Then c = c + 1
        Next
    Next

    isDup = (c / (UBound(t2) + 1)) > threshold

End Function

И затем используйте его из рабочего листа:

=isDup(A1,A2,0.5)

... при условии, что текст двух твитов для сравнения находится в A1 и A2.

1 голос
/ 25 марта 2020

Если вы получаете ошибку #NAME при попытке использовать пользовательскую функцию в электронной таблице, это потому, что Excel не распознает эту функцию. Убедитесь, что код для функции находится в модуле в рабочей книге, где вы пытаетесь использовать функцию, как показано на рисунке ниже.

Единственное изменение, которое вам нужно , чтобы сделать в код для запуска функции - удаление строки:

Set threshold = 0 - 1

Затем вы можете проверить, что она дает желаемый результат.

Функция недоступна, если вы просто поместите это в объекте Sheet или ThisWorkbook. Вам необходимо вставить модуль и поместить туда код.

Он также недоступен для других книг, если вы не добавите ссылки в эти книги или не сохраните его в надстройке, которая затем будет правильно установлена. Вы можете посмотреть или попросить помощи по этим процессам отдельно, если это необходимо.

enter image description here

...