excel - 如何在循环中为不同范围编写两个 IF 语句,VBA
问题描述
我正在使用 VBA 处理 Excel 文档。该文档包含一个具有多列的数据库,但为简单起见,假设我有 2 列:
- C 列对应于名称
- F列对应于数字。
我正在尝试创建一个宏来检查 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 时,我不想要任何空白单元格或零。
解决方案
这是否解决了您的问题 - 引用 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?
推荐阅读
- javascript - 无法在 Vue 模板中显示 JSON 响应数据
- python - 使用 scikit-image 将 png 转换为 jpeg
- mysql - mysql使用变量来决定是否执行插入
- class - 为什么我收到错误消息:“Credis_Client::scan() 的参数 1 应为参考”?
- flutter-listview - Listview Builder On Scroll child == null 或 hasSize == null 等
- javascript - 从 Node child_process 执行 Argo Tunnel 时出现错误 1016
- html - 在IOS上悬停后如何返回原始位置
- perl - XML::LibXML::Pattern 安装失败
- forms - 如何将处理时间保持在 OnSleep() 内?
- ansible - 我如何在ansible的变量文件中改变dict键