【问题标题】:lookup a number and increment value in another cell within same row在同一行内的另一个单元格中查找数字和增量值
【发布时间】:2013-06-28 02:15:28
【问题描述】:

我想在 Excel 中创建一个宏,让我在按下命令按钮时增加零件的计数。

目前,我的概念是使用 vlookup 使用以下内容获取该部分的现有计数。但是,它不会增加单元格中的实际计数值,这正是我想要的。我怀疑它的 cos vlookup 仅用于返回单元格内的值,但在实际增量的过程中未激活单元格。有人可以建议我如何纠正它吗?我还是 vba 的新手。谢谢!!! :)

例如Vlookup 在 Sheets("Location") 的单元格 A5 中找到 C1value。它会自动将单元格 C5 中的值加 1。

Sub FindAddTools()

Dim C1Qnty As Double

C1value = Sheets("Issue").Range("D11")

Sheets("Location").Activate

C1Qnty = WorksheetFunction.VLookup(C1value, Range("A:D"), 3, False)

C1Qnty = C1Qnty + 1

End Sub

附加:对我原来的问题的附加。我想知道是否可以对整个范围执行相同的操作?

例如C1value 现在是 Sheets("Issue").Range("D11:D20") 的范围。我想在 Sheets("Location") 中找到此范围内的所有值,并在 C 列中增加它们的相应计数。

有没有办法做到这一点,而无需对范围内的所有单元格重复相同的过程? 谢谢! :)

【问题讨论】:

  • 应该增加哪个单元格?
  • 我查找的值在 A 列中,当我找到该值时,我想增加同一行 C 列中的计数。

标签: vba


【解决方案1】:

这是我的尝试。如果值不匹配,则不会发生任何事情:

Sub FindAddTools()
Dim RangeToMatch As Excel.Range
Dim cell As Excel.Range
Dim C1Value As Variant
Dim C1Row As Variant

Set RangeToMatch = Sheets("Issue").Range("D2:D11")
For Each cell In RangeToMatch
    C1Value = cell.Value
    With Sheets("Location")
        C1Row = Application.Match(C1Value, .Range("A:A"), 0)
        If Not IsError(C1Row) Then
            .Range("C" & C1Row).Value = .Range("C" & C1Row).Value + 1
        End If
    End With
Next cell
End Sub

我对其进行了编辑,使其在一系列单元格中循环以进行匹配。该范围设置为上面的D2:D11

【讨论】:

  • 谢谢道格!如果我想匹配“问题”中的整个范围并增加“位置”列 C 中的所有相应计数怎么办。是否也可以这样做?
  • 很高兴能帮上忙。欢迎来到 SO。
【解决方案2】:

根据您的 cmets,我认为应该这样做。

注意:您不必Activate 工作表来执行引用其单元格/范围的功能。

Sub FindAddTools()
Dim shIssue as WOrksheet: Set shIssue = Sheets("Issue")
Dim shLoc as Worksheet: Set shLoc = Sheets("Location")
Dim allC1Values as Range
Dim C1Value as Variant 
Dim C1Qnty As Double
Dim foundRow as Long


Set allC1Values = shIssue.Range("D11:D100") '## Modify as needed.
For each C1Value in allC1Values.Cells

    C1Qnty = WorksheetFunction.VLookup(C1value, shLoc.Range("A:D"), 3, False)
    C1Qnty = C1Qnty + 1

    foundRow = WorksheetFunction.Match(c1Value,shLoc.Range("A:A"),False)
    shLoc.Range("C" & foundRow).Value = CqQnty
Next
End Sub

对此要小心。您会立即使用 VLOOKUP 函数写入您刚刚“找到”的同一个单元格,因此,很明显,如果您再次运行此宏,您将再次增加它。但是,这可能是想要的功能,如果是这样,没问题。

注意:如果在VLOOKUPMATCH 函数中发现C1Value not,则不会出现错误捕获。

【讨论】:

  • 谢谢大卫!如果我想在“问题”中对整个范围执行相同的操作,并在“位置”列 C 中增加所有相应的计数怎么办。您是否可以考虑这样做而不必为其他值再次重复该过程?
  • 是的,这很容易做到。见我上面的修订。我还没有测试过,但我很确定它会起作用。
猜你喜欢
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2014-09-22
相关资源
最近更新 更多