1

一张图抵得上一千个字,所以为了清楚起见,这里有一张图来说明情况: 在此处输入图像描述

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

这是我尝试做的事情:我希望我的方法 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)。

非常感谢你的帮助。

编辑:在尝试了一个建议后
1/使用 VBA(适用于除“Quezon”之外的所有内容) 在此处输入图像描述 2/使用公式......同样的问题。 在此处输入图像描述

4

3 回答 3

3

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

无需为此使用 VBA。

看这个例子

使用此数组公式。输入公式后必须按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
于 2013-04-18T10:33:18.390 回答
0

此代码的问题是 myResult 返回的值始终为 false(因此我的数组中的所有内容都设置为 0)。

您是否确保 myResult 始终为假,或者您是否从显示的 0 值中推断出它?

不确定它是否会有所帮助,但IsError感觉比IsNumeric这里更自然。您的原始 If 语句将按正确的顺序排列。

于 2013-04-18T09:42:51.067 回答
0

不需要VBA。

  1. =IF(ISNA(MATCH(C2,$G$21:$G$25,0)),0,10)在 中输入公式G2
  2. 复制G2G3:G17.
于 2013-04-19T00:37:23.473 回答