首页 > 解决方案 > 如何在循环中为不同范围编写两个 IF 语句,VBA

问题描述

我正在使用 VBA 处理 Excel 文档。该文档包含一个具有多列的数据库,但为简单起见,假设我有 2 列:

我正在尝试创建一个宏来检查 F 列中的所有数字(带有循环)。如果数字大于 100,则检查 C 列中的相邻单元格。如果名称对应于条件(假设对应于 John 或 Tom),则在另一张表中添加数字的值。如果这些都不适用,请检查下一个单元格。

我的问题是我找不到在 C 列中定义单元格的方法(创建变量/对象来调用单元格或直接调用相邻的单元格)。

我的代码如下所示:

Sub Test1()

    Dim rngnumbers, rngnames, MultipleRange As Range

    Set rngnumbers = Sheet2.Range("F2:F999")    
    Set rngnames = Sheet2.Range("C2:C999")
    Set MultipleRange = Union(rngnumbers, rngnames)

        For Each numb In rngnumbers
            If numb.Value >= 100 Then
                    If Sheet2.Range("C2") = "John" Or Sheet2.Range("C2") = "Tom" Then '''The problem here is that it only looks at the cell C2 and not the adjacent cell
                        Sheet1.Range("I999").End(xlUp).Offset(1, 0).Value = numb.Value
                    Else
                    End If
            End If
        Next numb

End Sub

我尝试修改该行:

'If Sheet2.Range("C2") = "John" Or Sheet2.Range("C2") = "Tom"然后'到类似的东西: 'newname.String = "John" '

但是我找不到定义的方法newname。另一个想法是为 For 循环中的名称增加 If 语句。

附加说明:我也没有直接在 Excel 中使用公式,因为当 if 函数为 False 时,我不想要任何空白单元格或零。

标签: excelvbaloopsif-statementrange

解决方案


这是否解决了您的问题 - 引用 C 列中的相关单元格?OFFSET 提供相对参考,在这种情况下,查看 F 左侧的 3 列。

Sub Test1()

Dim rngnumbers As Range, rngnames As Range, MultipleRange As Range, numb As Range

Set rngnumbers = Sheet2.Range("F2:F999")
Set rngnames = Sheet2.Range("C2:C999")
Set MultipleRange = Union(rngnumbers, rngnames)

For Each numb In rngnumbers
    If numb.Value >= 100 Then
        If numb.Offset(, -3) = "John" Or numb.Offset(, -3) = "Tom" Then
            Sheet1.Range("I999").End(xlUp).Offset(1, 0).Value = numb.Value
        End If
    End If
Next numb

End Sub

您是否考虑过 SUMIFS?


推荐阅读