Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel-VBA:与两个组合单元格匹配?_Excel_Vba_Match_String Comparison - Fatal编程技术网

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

Excel-VBA:与两个组合单元格匹配?,excel,vba,match,string-comparison,Excel,Vba,Match,String Comparison,我的问题很棘手,所以我会尽量把它弄清楚 在我的程序中,我将单元格值与数据库进行比较,以找到匹配项。 我正在比较的单元格采用列格式,每个单元格中有一个单词。另一方面,我数据库中的单元格在单元格中包含一个完整的句子 例如: 我的程序的目标是找到匹配项以确定位置。 到目前为止,它是这样做的:它激活数据库中的单元格,并与“ElementsListange”的每个单元格进行比较,这是从列中选择的元素(在我的图片“B2:B7”中)。当有一场比赛时,它会在这条线上加上12分 'loop in the DAT

我的问题很棘手,所以我会尽量把它弄清楚

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

例如

我的程序的目标是找到匹配项以确定位置。 到目前为止,它是这样做的:它激活数据库中的单元格,并与“ElementsListange”的每个单元格进行比较,这是从列中选择的元素(在我的图片“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
因此,在本例中,有三次匹配,第一单元(公司)、第二单元(中心)和第三单元(建筑),总共得到36分

以下是我想做的:现在,我想通过考虑单词的位置使它更准确。因此,如果数据库中的单元格是“Corporate Center Building”,并且单词Corporate/Center和Building的显示顺序相同,则会添加更多的点。想法是:如果活动单元和1号单元(公司)匹配,则增加12分并再次检查:如果活动单元和1号单元+2号单元(公司中心)匹配,则增加10分,如果活动单元和1号单元+2号单元+3号单元(公司中心大楼)匹配,则增加15分,等等

因此,它不仅会找到匹配项,而且会重视单词的位置。因此,如果输入为“Corporate Center Building”,并且数据库中既有“Corporate Center Building”又有“Building Corporate Center”,那么正确的匹配项将获得更多分数

类似这样的内容:

'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)
你知道如何表达这个想法吗?
提前感谢。

如果您想连接字符串,您必须使用与
&
而不是加号
+
,以便连接两个值
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

现在,在你的情况下,你需要改变方法,因为你认为你正在做的是行不通的

首先,要熟悉系统和功能。将句子从F(数据库)列拆分为变量数组。然后遍历B列以找到第一个匹配项。如果找到匹配项,则查看下一个单词是否匹配,并根据匹配结果进行评分。

如果要连接字符串,则必须使用与
&
而不是加号
+
,以便连接两个值
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

现在,在你的情况下,你需要改变方法,因为你认为你正在做的是行不通的

首先,要熟悉系统和功能。将句子从F(数据库)列拆分为变量数组。然后遍历B列以找到第一个匹配项。如果找到匹配项,则查看下一个单词是否匹配,并根据匹配结果进行评分。

谢谢您的解释,非常有用。我试过这样做:如果匹配(ActiveCell.Value、cell.Value和cell.Offset(1,0.Value))并且确实不起作用,它仍然无法识别单词的组合,这意味着即使只发现第二个单词而不是整个“word1-word2”,它也会得分。我不明白为什么它在寻找匹配的“word1”时会起作用,但对于“word1 word2”却不起作用。没什么不同。。。我想看看你的其他建议,但我担心这对我来说太复杂了,我的数据库太大了,我不知道如何使用数组等等。数组的概念太难理解了,谢谢你的链接,我会在这条消息之后读完它。虽然我的想法很简单,但看起来很复杂。下面是我所做的:“Dim stringData()作为I=a到b范围(“b”&I)的变量。激活stringData=Split(ActiveCell.Value,”)”我现在尝试找到一种方法,在数组的元素中循环,并使用类似于偏移量的东西逐元素比较元素。
对于I=lbound(stringData)到ubound(stringData)msgbox stringData(I)接下来我
谢谢!最后一个问题,我会有一切我需要的程序。我以前有:“If Match(ActiveCell.Value,cell.Value)Then”现在,我不使用ActiveCell.Value,而是在特定时间使用数组的元素。怎么称呼它?stringData.Value?在这种情况下,stringData.offset(1).Value可以用来选择下一个元素吗?谢谢你的解释,非常有用。我试过这样做:如果匹配(ActiveCell.Value、cell.Value和cell.Offset(1,0.Value))并且确实不起作用,它仍然无法识别单词的组合,这意味着即使只发现第二个单词而不是整个“word1-word2”,它也会得分。我不明白为什么它在寻找匹配的“word1”时会起作用,但对于“word1 word2”却不起作用。没什么不同。。。我想看看你的其他建议,但我担心这对我来说太复杂了,我的数据库太大了,我不知道如何使用数组等等。数组的概念太难理解了,谢谢你的链接,我会在这条消息之后读完它。虽然我的想法很简单,但看起来很复杂。下面是我所做的:“Dim stringData()作为I=a到b范围(“b”&I)的变量。激活stringData=Sp