vba - Excel VBA 逻辑不起作用
问题描述
第一列有两张公司名称,第一行是商品价格。现在我需要公司名称是否匹配,而不是检查行并更新值
Sub addition()
Dim j As Integer
Dim i As Integer
Dim a As Integer
Dim b As Integer
For i = 2 To 15
For j = 2 To 15
If Sheet1.Cells(i, 1) = Sheet1.Cells(j, 1) Then
For a = 2 To 5
For b = 2 To 5
If Sheet1.Cells(1, a) = Sheet2.Cells(1, b) Then
Sheet1.Cells(i, a) = Sheet2.Cells(j, b) + Sheet1.Cells(i, a)
End If
Next b
Next a
End If
Next j
Next i
End Sub
但在某些行逻辑中,其他行逻辑不起作用。
解决方案
For i = 2 To 15
For j = 2 To 15
If Sheet1.Cells(i, 1) = Sheet1.Cells(j, 1) Then
...
上面的代码将找到 14 个匹配项,因为 i 和 j 有 14 次相同的值,并且它们都引用同一个工作表,同一列。
由于您稍后在代码中使用 j 来引用 Sheet2 上的一行,因此上面的内容很可能更接近于此。
For i = 2 To 15
For j = 2 To 15
If Sheet1.Cells(i, 1) = Sheet2.Cells(j, 1) Then
...
但是,即使切换到 Sheet2.Cells(j, 1) 修复了逻辑,为其他所有事情做所有事情都是非常低效的。您可以使用 Exit For 语句减少循环,这些语句在找到匹配项后不会继续寻找匹配项。除了一次匹配并完成之外,还有对列值的匹配,它完全否定了内部循环。
Sub addition()
Dim i As long, a As long
Dim j As variant, b as variant
For i = 2 To 15
i = application.match(Sheet1.Cells(i, 1), Sheet2.Cells(2, 1).resize(14, 1), 0)
if not iserror(i) then
For a = 2 To 5
b = application.match(Sheet1.Cells(1, a), Sheet2.Cells(1, 2).resize(1, 4), 0)
if not iserror(b) then
Sheet1.Cells(i, a) = Sheet2.Cells(j, b) + Sheet1.Cells(i, a)
End If
Next a
End If
Next i
End Sub
推荐阅读
- python - 如何在 pyspark 中调用预测函数?
- java - 为什么 FileWriter 没有像它应该的那样创建一个新行?JAVA
- c++ - 初始化指向类对象的指针容器?
- sql - 创建与 SQL Server 存储过程的 Microsoft Excel 连接
- ios - 如何为 Google Cardboard 配置 React 360
- java - 打印上标字符在 Eclipse 中不起作用
- python - Opencv模板匹配不同大小的图片
- aurelia - 如何在 aurelia 组件中完全呈现自定义元素以进行 e2e 测试?
- mysql - 如何在zend框架3中使用动态数据连接到数据库
- java - {c++} Vertex* myList 和 {java} List myList 有什么相似之处?