2015-10-10 2 views
0

Я пытался автоматизировать файл Excel, который имеет название в столбцах A и B, и я должен искать каждое слово из A внутри B и вычислять%, используя «no of words» согласованное/общее количество слов (в колонке А) ".Согласование двух названий по словам и вычисление%

Я использую приведенный ниже код, однако его не дает мне точных%, для которых название имеет повторяющиеся слова (Дублирующие слова).

Sub percentage() 
 
Dim a() As String, b() As String 
 
Dim aRng As Range, cel As Range 
 
Dim i As Integer, t As Integer 
 
Set aRng = Range(Range("A1"), Range("A5").End(xlDown)) 
 
For Each cel In aRng 
 

 
    a = Split(Trim(cel), " ") 
 
    b = Split(Trim(cel.Offset(, 1)), " ") 
 
    d = 0 
 
    c = UBound(a) + 1 
 
If cel.Value <> "" Then 
 
    If InStr(cel, cel.Offset(, 1)) Then 
 
     d = UBound(b) + 1 
 
Else 
 
    For i = LBound(a) To UBound(a) 
 
     For t = LBound(b) To UBound(b) 
 
      If UCase(a(i)) = UCase(b(t)) Then 
 
       d = d + 1 
 
      End If 
 
     Next 
 
    Next 
 
End If 
 
End If 
 
cel.Offset(0, 2).Value = (d/c) 
 
Next 
 
End Sub

Если Заголовок 1: Действительно хороший пакет с Nice печати и Раздел 2: Nice Nice печати пакет, то результат должен быть 3/6, т.е. 67%.

Но я получаю результат как 100%.

Может ли кто-нибудь помочь мне, пожалуйста.

Титулы

Большая работа рвань

Действительно хороший пакет с Nice печати

Чтобы дать процессу об успешном и успех

Не ешьте слишком много. Если вы едите слишком много, вы заболели

Я попытался = noDuplicate (celladdress)

ответ

1

Во-первых, вы должны удалить дубликаты слово в столбце B.

Моя функция удаления слова и возврат массив слов, который не дублируется.

Function noDuplicate(ByVal str As String) As String() 
Dim splitStr() As String 
Dim result() As String 
Dim i As Integer 
Dim j As Integer 
Dim k As Integer 
Dim addFlag As Boolean 

splitStr = Split(UCase(str), " ") 
ReDim result(UBound(splitStr)) 

' 
result(0) = splitStr(0) 
k = 0 
For i = 1 To UBound(splitStr) 
    addFlag = True 
    For j = 0 To k 
     If splitStr(i) = result(j) Then 
      addFlag = False 
      Exit For 
     End If 
    Next j 

    If addFlag Then 
     result(k + 1) = splitStr(i) 
     k = k + 1 
    End If 
Next i 
ReDim Preserve result(k) 
noDuplicate = result 
End Function 

Затем вычислить процент числа спичечного слова и количества слов в столбце A.

Function percentMatch(ByVal colA As String, ByVal colB As String) As Double 
Dim splitColA() As String 
Dim splitColB() As String 
Dim i As Integer 
Dim j As Integer 
Dim matchCount As Integer 

splitColA = Split(UCase(colA), " ") 
splitColB = noDuplicate(colB) 

matchCount = 0 
For i = 0 To UBound(splitColA) 
    For j = 0 To UBound(splitColB) 
     If splitColA(i) = splitColB(j) Then 
      matchCount = matchCount + 1 
      Exit For 
     End If 
    Next j 
Next i 

percentMatch = matchCount/(UBound(splitColA) + 1) 
End Function 

После двух этих функций, вы можете написать свой новый код ниже

Sub percentage() 
Dim aRng As Range, cel As Range 

Set aRng = Range(Range("A1"), Range("A5").End(xlDown)) 
For Each cel In aRng 
    cel.Offset(0, 2).Value = percentMatch(cel.Value, cel.Offset(0, 1).Value) 
Next 
End Sub 

Обратите внимание, что я не защищаю пустую строку в функции.

+0

Спасибо за код @Adisak. Однако ваша первая функция ** noDuplicate ** не работает, она возвращает только первое слово заголовка в ячейке.Я пытаюсь найти первопричину :) – Linga

+0

Не могли бы вы дать мне название, которое вы пробовали, и как вы вызываете функцию –

+0

Я обновил плитки в нижней части моего вопроса, пожалуйста, взгляните. – Linga

0

Если F8 через код, вы можете увидеть проблему.

Первый Ницца в колонке A проходит через столбец B и подсчитывает 2 входа. Пакет в столбце A проходит через столбец B и имеет значение 1. Вторая Ницца в столбце A проходит через столбец B и подсчитывает 2 входа. Печать в столбце A проходит через столбец B и учитывает 1 вхождение.

Итак, вы получаете счет 6 против 6 слов в столбце A; 100%

Если добавить случайное слово в колонке А, вы получите 6 из 7

+0

Да, я получил его, не могли бы вы рассказать мне, как я могу это решить. – Linga

Смежные вопросы