Excel – VBA:与两个组合单元格匹配?

我的问题是非常棘手的,所以我会尽可能地把它弄清楚。

在我的程序中,我将单元格值与数据库进行比较以查找匹配项。 我正在比较的单元格是列格式,每个单元格中有一个单词。 另一方面,我的数据库中的单元格包含单元格中的全部句子。

例如在这里输入图像说明

我的计划的目标是find匹配来确定一个地方。 到目前为止,这是它在做什么:它激活数据库中的单元格,并与每个单元格的“elementsListRange”(这是从列中的元素的select(所以在我的图片“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(build筑物)共36点。

这是我想要做的事情:现在,我想通过考虑文字的位置来使它更加准确。 因此,如果数据库中的单元格是“企业中心大楼”,并且“企业/中心”和“build筑”这两个词按相同顺序出现,则会添加更多点。 这个想法是:如果活动单元格与单元格1(公司)匹配,则添加12个点并进行另一个检查:如果活动单元格与单元格1 +单元格2(公司中心)相匹配,则添加10个附加点做另一个如果:如果活动单元格与单元格1 +单元格2 +单元格3(公司中心大楼)之间匹配,则添加15个附加点,依此类推。

所以它不仅会find匹配,而且会重视词的位置。 所以如果input的是“企业中心大厦”,在数据库中同时拥有“企业中心大楼”和“build筑企业中心”,那么正确的匹配将会得到更多的分数。

像这样的东西:

 '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) 

你知道如何expression这个想法? 提前致谢。

如果你想joinstring,你必须使用&符号而不是加号+来join这两个值
Cstr(cell.Value & cell.offest(1,0).Value)
+主要用于math运算中,如添加两个数字,增加迭代器等。
&符号用于将string连接在一起,例如:

 Dim stringA As String, stringB as String, finalString as String stringA = "hello" stringB = "world!" finalString = stringA & " " & stringB msgbox finalString 

现在在你的情况下,你需要改变方法,因为你认为你正在做的不是工作。
开始熟悉Split()和InStr()函数。 将您的句子从F(数据库)列拆分为Variant数组。 然后遍历B列find第一个匹配。 如果find匹配,则查看下一个单词是否匹配,并根据匹配结果进行评分。