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

时间:2013-06-17 09:12:08

标签: excel vba match string-comparison

我的问题非常棘手,所以我会尽量让它变得清晰。

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

例如enter image description here

我的计划的目标是找到匹配以识别地点。 到目前为止,这是它正在做的事情:它从数据库激活单元格并与“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)

你知道如何表达这个想法吗? 提前谢谢。

1 个答案:

答案 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列以查找第一个匹配项。如果找到匹配项,则根据匹配结果查看下一个单词是否匹配并得分。