Excel 如果名称等于其他工作表上的字符串,则向值添加1
我想做一些清单。因此,当我在第二张表中添加某个产品的名称时,它将该产品的E行第一张表中的库存加1。这适用于第二页中的名称列表,而不是此处VBA代码中尝试的仅一个名称 完成列表后,我应该能够清除表2,并保存值。 当我尝试这样做时,它会给出一个错误,我只是不知道如何让它在整个列表中运行Excel 如果名称等于其他工作表上的字符串,则向值添加1,excel,vba,Excel,Vba,我想做一些清单。因此,当我在第二张表中添加某个产品的名称时,它将该产品的E行第一张表中的库存加1。这适用于第二页中的名称列表,而不是此处VBA代码中尝试的仅一个名称 完成列表后,我应该能够清除表2,并保存值。 当我尝试这样做时,它会给出一个错误,我只是不知道如何让它在整个列表中运行 Private Sub CommandButton1_Click() Dim x As Integer x = Sheets("Sheet1").Cells(1, "E").Value For
Private Sub CommandButton1_Click()
Dim x As Integer
x = Sheets("Sheet1").Cells(1, "E").Value
For Each cell In Sheets(Sheet1).Range("A:A")
If cell.Value = Sheets("Sheets2").Cells(1, "A").Value Then
x = x + 1
End If
Next cell
End Sub
试试这个:
Private Sub CommandButton1_Click2()
Dim x As Integer
Dim lastRow As Long
Dim cell as Range
x = Sheets("Sheet1").Range("E1").Value
lastRow = Range("A" & Rows.Count).End(xlUp).Row ' assuming Col. A has most data
For Each cell In Sheets("Sheet1").Range("A1:A" & lastRow)
If cell.Value = Sheets("Sheets2").Range("A1").Value Then
x = x + 1
End If
Next cell
Debug.Print "x is now " & x
' Put the new value in E1
Sheets("Sheet1").Range("E1").Value = x
End Sub
我没有做太多,只是缩短了范围,这样您就不会在A列中循环。添加了
Dim单元格作为范围
,并在循环开始部分的表1
周围加上引号。(这就是那条线上错误的来源)。您可以执行Sheet1.Range()
,或Sheets(“Sheet1”).Range
,但不能执行Sheets(Sheet1)。Range
无需一些额外的编码/奇怪的变量设置。您认为x
表示单元格,但它是一个以Sheet1上E1中的值开头的内存变量
如果希望范围增大,则将变量设为范围并将其设置为所需的范围,或将其全部跳过:
Private Sub CommandButton1_Click()
Dim cell as Range
With Worksheets("Sheet1")
For Each cell In Intersect(.Range("A:A"),.UsedRange)
.Range("E1").value = .Range("E1").value + Application.WorksheetFunction.COUNTIF(Worksheets("Sheet2").Range("A:A"),cell.Value)
Next cell
End With
End Sub
有点不清楚<代码>表1
在E1
中有一个值。说“20”。在浏览Sheet1 A列时,如果该值与Sheet2 A1中的值匹配,则将该数字添加到20。。。。?还有,你得到了什么错误?根据值的不同,您可能需要Dim x作为Long
而不是Integer
。然后,它应该将1添加到E1中的20。它只是给出了一个我要求调试的问题,它用黄色显示了第三行,很可能是一个编码错误,但无法确定哪一行始终是E1,或者您是在逐行计数吗?您应该查看excel内置的SUMIF函数。检查此示例@Sithu,它将采用vba,因为OP已声明,一旦代码运行,参考表将被清除和更新。SUMIF作为一个公式是有效的,当sheet2上的数据被清除时将返回0。此外,COUNTIF更合适。哦,使用COUNTIF()
,这更优雅,思维也更美好。