(VBA)Excel:如果两列中的内容匹配,则采取行动

一张图片胜过千言万语,以便说清楚,这里是一张图片来说明情况: 在这里输入图像描述

所以我在C列中有一些从C2C16的内容(string和整数)。 我有另一列G从G21G25的一些城市名称(string)。

这是我想要做的:我想我的方法probaCity()来查找这两列之间的匹配。 如果有匹配,我希望它在G列的相应行(在“城市的概率”数组中)中显示一些值(例如10),如果不匹配,那么它将是0。

所以,在单元格G13中,它应该写10,因为在“Quezon”中有一个匹配,而在数组的所有其他单元中都是0。

这是我的代码:

Sub probaCity() Dim count As Integer, myResult As Boolean For count = 2 To lastRow Range("C" & count).Activate myResult = IsNumeric(Application.Match(ActiveCell.Value, Range("G21:G25"), 0)) If myResult = True Then Range("G" & ActiveCell.Row).Value = Range("G" & ActiveCell.Row).Value + 0 Else Range("G" & ActiveCell.Row).Value = Range("G" & ActiveCell.Row).Value + 10 End If Next count End Sub 

这个代码的问题是,myResult的返回值总是为false(所以在我的数组中所有东西都设置为0)。

非常感谢你的帮助。

编辑:在尝试一个build议之后
1 /使用VBA(除了“Quezon”以外的其他所有工作) 在这里输入图像说明 2 /使用公式…相同的问题。 在这里输入图像说明

我想我的方法probaCity()来查找这两列之间的匹配。 如果有匹配,我希望它在G列的相应行(在“城市的概率”数组中)中显示一些值(例如10),如果不匹配,那么它将是0。

没有必要为此使用VBA。

看到这个例子

使用这个数组公式。 input公式后,您必须按下CTRL + SHIFT + ENTER

 =IF(COUNT(FIND($C$9:$C$11,A1)),"10","") 

截图

在这里输入图像说明

编辑 :既然你想要一个VBA方法,试试这个。

VBA方法(这将与您的原始文章中的示例数据一起工作)

 Sub Sample() Dim ws As Worksheet Dim LookUpRange As Range Dim lRow As Long '~~> Change this to the relevant sheet Set ws = ThisWorkbook.Sheets("Sheet1") With ws '~~> This is your city list Set LookUpRange = .Range("G21:G25") lRow = .Range("C" & .Rows.Count).End(xlUp).Row For i = 2 To lRow .Range("G" & i).Value = Application.Evaluate("=IF(COUNT(FIND(" & _ LookUpRange.Address & _ "," & .Range("C" & i).Address & ")),""10"",""0"")") Next i End With End Sub 

这个代码的问题是,myResult的返回值总是为false(所以在我的数组中所有东西都设置为0)。

你确定myResult总是为false,还是从显示的0值中推导出来的?

不知道这是否会有所帮助,但IsError在这里感觉比IsNumeric更自然。 你原来的If语句将按正确的顺序。

不需要VBA。

  1. inputformula =IF(ISNA(MATCH(C2,$G$21:$G$25,0)),0,10)G2
  2. G2复制到G3:G17