按字词匹配两个标题并计算%

时间:2015-10-10 13:09:22

标签: excel-vba vba excel

我试图自动化一个在A和B列中都有标题的Excel文件,我必须在B中搜索A中的每个单词,并使用"没有匹配的单词/总计no来计算%单词(在A栏中)"式。

我使用下面的代码,但它没有给出标题重复单词的准确%(重复单词)。



<script type="text/javascript">
function myFunction() {
   var e = document.getElementById("sel");
   var strUser = e.options[e.selectedIndex].value;
   alert(strUser);
}
</script>
&#13;
&#13;
&#13;

如果标题1:真的很好用打印好的打印和标题2:尼斯打印尼斯打包那么结果应该是3/6,即67%。

但我得到的结果是100%。

任何人都可以帮帮我。

标题是

干得好dud

真的很好用漂亮的打印包装

成功和成功的过程

不要吃太多。如果你吃得太多,你就会生病

我试过= noDuplicate(celladdress)

2 个答案:

答案 0 :(得分: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 

注意,我不保护函数中的空字符串。

答案 1 :(得分:0)

如果你通过代码F8,你可以看到问题。

A列中的第一个Nice遍历B列并计算2个出现次数。 A列中的包装在B列中循环并计数1次出现。 A列中的第二个Nice循环通过B列并计算2个出现次数。 在A列中打印通过B列循环并计算1次出现。

所以你对A栏中的6个单词得到6分; 100%

如果你向A栏添加一个随机单词,你将得到7分中的6分。