我试图自动化一个在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;
如果标题1:真的很好用打印好的打印和标题2:尼斯打印尼斯打包那么结果应该是3/6,即67%。
但我得到的结果是100%。
任何人都可以帮帮我。
标题是
干得好dud
真的很好用漂亮的打印包装
成功和成功的过程
不要吃太多。如果你吃得太多,你就会生病
我试过= noDuplicate(celladdress)
答案 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分。