(VBA)Excel:如果两列中的内容匹配,则采取行动
一张图片胜过千言万语,以便说清楚,这里是一张图片来说明情况:
所以我在C列中有一些从C2到C16的内容(string和整数)。 我有另一列G从G21到G25的一些城市名称(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。
- inputformula
=IF(ISNA(MATCH(C2,$G$21:$G$25,0)),0,10)
到G2
。 - 将
G2
复制到G3:G17
。