Excel 如果名称等于其他工作表上的字符串,则向值添加1

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

我想做一些清单。因此,当我在第二张表中添加某个产品的名称时,它将该产品的E行第一张表中的库存加1。这适用于第二页中的名称列表,而不是此处VBA代码中尝试的仅一个名称

完成列表后,我应该能够清除表2,并保存值。 当我尝试这样做时,它会给出一个错误,我只是不知道如何让它在整个列表中运行

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()
,这更优雅,思维也更美好。