Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何为循环中的不同范围编写两个IF语句,VBA_Excel_Vba_Loops_If Statement_Range - Fatal编程技术网

Excel 如何为循环中的不同范围编写两个IF语句,VBA

Excel 如何为循环中的不同范围编写两个IF语句,VBA,excel,vba,loops,if-statement,range,Excel,Vba,Loops,If Statement,Range,我正在使用VBA处理Excel文档。本文档包含一个具有多列的数据库,但为了简单起见,假设我有两列: C列对应于名称 F列对应于数字 我试图创建一个宏来检查F列中的所有数字(带有一个循环)。如果数字大于100,则检查C列中的相邻单元格。如果名称对应于条件(比如对应于John或Tom),则在另一张表中添加数字值。如果这些都不适用,请检查下一个单元格 我的问题是我找不到一种方法来定义C列中的单元格(创建一个变量/对象来调用单元格或直接调用相邻的单元格) 我的代码如下所示: 子测试1() 变暗rng

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

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

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

我的代码如下所示:

子测试1()
变暗rngnumbers、rngnames、多音标作为范围
设置rngnumbers=Sheet2.范围(“F2:F999”)
设置rngnames=Sheet2.范围(“C2:C999”)
设置多语言=并集(rngnumbers,rngnames)
以rngnumbers表示的每个麻木
如果数值>=100,则
如果Sheet2.Range(“C2”)为“John”或Sheet2.Range(“C2”)为“Tom”,那么这里的问题是它只查看单元格C2,而不查看相邻单元格
表1.范围(“I999”).结束(xlUp).偏移量(1,0).值=数值
其他的
如果结束
如果结束
下一个麻木
端接头
我尝试修改该行:

“如果Sheet2.Range(“C2”)=“John”或Sheet2.Range(“C2”)=“Tom”
则” 例如:
'newname.String=“John”

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

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

这是否解决了您的问题-引用C列中的相关单元格?偏移量提供了一个相对引用,在本例中,请查看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吗?

你想要这样的东西吗

Sub Test1()

        Dim lRow As Long, r As Long
        lRow = 1000 'last row in your data
        Dim ws As Worksheet
        Set ws = Worksheets("List with your data")

        For i = 2 To lRow
            If ws.Range("F" & i) > 100 Then
                If ws.Range("C" & i).Value = "John" Or ws.Range("C" & i).Value = "Tom" Then
                    Worksheets("Another sheet sheet").Range("A" & r) = Range("C" & i).Value ' r - Row, where we want to enter uor text
                    r = r + 1 'if you want to put next name on the next row
                End If
            End If
        Next

    End Sub
循环中的两个如果 联合版本
我通常使用阵列:

Sub Test1()

Dim rngnumbers    As Excel.Range

Dim arrVals       As variant 

Dim lngRow        As long

Arrvals = Sheet2.Range("C2:F999").value

    For Lngrow = lbound(arrvals,1) to ubound(arrvals,1)
        If arrvals(lngrow,4) >= 100 Then
                If arrvals(lngrow,1)= "John" Or arrvals(lngrow,1) = "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 = arrvals(lngrow,4)
                Else
                End If
        End If
    Next lngrow 

End Sub

实际上,我可能也会构建一个输出阵列,但我的拇指已经累了…

嗨,SJR,谢谢!使用偏移量解决了这个问题。不,使用SUMIFS不是我现在想要的。
Sub Test1()

Dim rngnumbers    As Excel.Range

Dim arrVals       As variant 

Dim lngRow        As long

Arrvals = Sheet2.Range("C2:F999").value

    For Lngrow = lbound(arrvals,1) to ubound(arrvals,1)
        If arrvals(lngrow,4) >= 100 Then
                If arrvals(lngrow,1)= "John" Or arrvals(lngrow,1) = "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 = arrvals(lngrow,4)
                Else
                End If
        End If
    Next lngrow 

End Sub