我的问题非常棘手,所以我会尽量让它变得清晰。
在我的程序中,我将单元格值与数据库进行比较以查找匹配项。 我正在比较的单元格采用列格式,每个单元格中有一个单词。另一方面,来自我的数据库的单元格在单元格中包含整个句子。
例如:
我的计划的目标是找到匹配以识别地点。 到目前为止,这是它正在做的事情:它从数据库激活单元格并与“elementsListRange”的每个单元格进行比较,“elementsListRange”是列中元素的选择(因此在我的图片“B2:B7”中)。当匹配时,它会在该行上添加12分。
'loop in the DATABASE
For i = a To b
Range("B" & i).Activate
'try to find a match btwn active cell and one of the elements from parsed address
For Each cell In elementsListRange.Cells
If Match(ActiveCell.Value, cell.Value) Then
Range("K" & i).Value = Range("K" & i).Value + 12
Else
Range("K" & i).Value = Range("K" & i).Value + 0
End If
Next
所以在这种情况下,有一个匹配三次,单元格1(公司),单元格2(中心)和单元格3(建筑物),总共36个点。
这就是我想要做的事情:现在,我想通过考虑单词的位置使其更准确。因此,如果数据库中的单元格是“企业中心建筑”,并且企业/中心和建筑物的单词以相同的顺序出现,则会添加更多的点。这个想法是:如果活动单元格和单元格1(公司)之间存在匹配,则添加12个点并进行另一个检查:如果活动单元格与单元格1 +单元格2(企业中心)之间匹配,则添加10个额外点和如果:如果活动单元格与单元格1 +单元格2 +单元格3(企业中心建筑物)之间匹配,则再添加15个点,依此类推。
所以它不仅会找到匹配,而且会重视词的位置。因此,如果输入是“企业中心大楼”,并且您在数据库中同时拥有“企业中心大楼”和“建立企业中心”,那么正确的匹配将获得更多积分。
这样的事情:
'loop in the DATABASE
For i = a To b
Range("B" & i).Activate
'try to find a match btwn active cell and one of the elements from parsed address
For Each cell In elementsListRange.Cells
If Match(ActiveCell.Value, cell.Value) Then
Range("K" & i).Value = Range("K" & i).Value + 12
If Match(ActiveCell.Value, cell.Value + cell.offest(1,0).Value) Then
Range("K"&i).Value = Range("K"&i).Value + 10
If Match(ActiveCell.Value, cell.Value + cell.offest(1,0).Value + cell.offset(2,0).Value) Then
.... ..... ..... + 15
and so on
Else
End If
Else
End If
Else
Range("K" & i).Value = Range("K" & i).Value + 0
End If
Next
最后,这是我的问题:
不幸的是,我们不能这样写:
If Match(ActiveCell.Value, cell.Value + cell.offest(1,0).Value)
你知道如何表达这个想法吗? 提前谢谢。
答案 0 :(得分:1)
如果你想加入字符串,你必须使用&符号&
而不是加号+
,所以加入两个值为Cstr(cell.Value & cell.offest(1,0).Value)
。
+
主要用于数学运算,如添加两个数字,增加迭代器等。
&符号&
用于将字符串连接在一起,例如:
Dim stringA As String, stringB as String, finalString as String
stringA = "hello"
stringB = "world!"
finalString = stringA & " " & stringB
msgbox finalString
现在,在您的情况下,您需要更改方法,因为您认为自己正在做的事情不会起作用。
首先要熟悉Split()和InStr()函数。将句子从F(数据库)列拆分为Variant数组。然后遍历B列以查找第一个匹配项。如果找到匹配项,则根据匹配结果查看下一个单词是否匹配并得分。