1

我的问题很棘手,所以我会尽量说清楚。

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

例如在此处输入图像描述

我的程序的目标是找到匹配项来识别一个地方。到目前为止,这就是它正在做的事情:它激活数据库中的单元格并与“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

所以在这种情况下,有 3 次匹配,单元格 1(公司)、单元格 2(中心)和单元格 3(建筑物),总共有 36 分。

这是我想做的:现在,我想通过考虑单词的位置来使其更准确。因此,如果数据库中的单元格是“Corporate Center Building”,并且 Corporate/Center 和 Building 这两个词以相同的顺序出现,则会增加更多的分数。想法是:如果活动单元格和单元格 1(公司)之间存在匹配,则添加 12 个点并再次检查:如果活动单元格和单元格 1 + 单元格 2(公司中心)之间匹配,则添加 10 个附加点并再做一个 If:如果活动单元格与单元格 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)

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

4

1 回答 1

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

于 2013-06-17T09:36:00.467 回答