首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建嵌套循环以检查第二个列表中是否存在一个值

如何创建嵌套循环以检查第二个列表中是否存在一个值
EN

Stack Overflow用户
提问于 2019-04-25 12:33:17
回答 4查看 356关注 0票数 0

我试图比较两个列表中的值。我希望我的代码比较第一个列表中的值,并检查第二个列表中的所有条目。如果有匹配,则代码将在第一个列表中的值旁边打印true,如果不匹配,则将打印false。

我遇到的问题是,我的代码只比较同一行中的值。

代码运行,我在两个较小的列表上尝试过,以确保数据类型是相同的,并且列表中没有任何额外的空格或逗号会导致"False“输出。我也尝试过更改for和if语句的顺序,但这也不起作用。

代码语言:javascript
运行
复制
Sub findvalues()
    For i = 2 To 16
        For j = 2 To 16
            If Cells(i, 3).Value = Cells(i, 1).Value Then
                Cells(i, 4).Value = "TRUE"
            ElseIf Cells(i, 3).Value = Cells(j + 1, 1).Value Then
                Cells(i, 4).Value = "TRUE"
            Else
                Cells(i, 4).Value = "FALSE"
            End If
        Next j
    Next i
End Sub

下面是我正在测试代码的两个列表

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-25 13:08:08

有许多是为了实现这一目标。其中之一是使用IF & COUNTIF

公式

代码语言:javascript
运行
复制
=IF(COUNTIF($E$2:$E$6,A2)>0,"TRUE","FALSE")

结果:

VBA代码

代码语言:javascript
运行
复制
Option Explicit

Sub findvalues()

    Dim i As Long
    Dim rng As Range

    With ThisWorkbook.Worksheets("Sheet1") 'Change if needed

        Set rng = .Range("A2:A130") 'set rng to includes values from column A, rows 2:130

        For i = 2 To 130 'Loop from row 2 to 130
            'Check if the values in column C includes in the rng
            If Application.WorksheetFunction.CountIf(rng, .Range("C" & i).Value) > 0 Then
                .Range("D" & i).Value = "TRUE"
            Else
                .Range("D" & i).Value = "FALSE"
            End If

        Next i

    End With

End Sub
票数 0
EN

Stack Overflow用户

发布于 2019-04-25 13:30:21

根据您在第1和第3栏中提供的数据对您的代码做了轻微的修改。

代码语言:javascript
运行
复制
Sub findvalues()
    Dim i As Long, j As Long, bResult As Boolean

    For i = 2 To 16
        strValueToLookFor = Cells(i, 1)

        For j = 2 To 16
            bResult = False

            If strValueToLookFor = Cells(j, 3).Value Then
                bResult = True
                Exit For
            End If
        Next j

        Cells(i, 6).Value = bResult
    Next i
End Sub

..。您可能只需要在第二个列表上按下列,这样第一个列表就会搜索,反之亦然。

票数 2
EN

Stack Overflow用户

发布于 2019-04-25 13:45:19

我认为不需要使用VBA --公式是可行的--但是为了避免两个循环,可以这样做:

代码语言:javascript
运行
复制
Sub findvalues()

Dim i As Long

For i = 2 To 130
    Cells(i, 4).Value = IsNumeric(Application.Match(Cells(i, 1).Value, Range("C2:C130"), 0))
Next i

End Sub

更新:这不适合多个匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55849395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档