-1

我在 VBA 中编写了一个代码,如果满足某个条件,则在其中完成 V-Lookup。它工作得很好,但现在我怎样才能对下一行数据值做同样的事情而无需重写代码。

Sub starting_stock()
If Worksheets("out").Range("E2").Value = "" Then
Set ItemRef = Worksheets("out").Range("A2")
Set MyRange = Worksheets("Inventory").Range("A:G")
Worksheets("out").Range("D2").Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 7, False)
End If
End Sub

我想用 E3、A3 的值对 D3 做同样的事情,而不需要每次都重写代码。

这是一个库存控制系统。

有两张表,一张称为“Inventory”,另一张称为“out”。库存中的字段:ProductRef、初始库存、出库(对应于特定 ProductRef 的所有 Qty Out 的 SUMIF)、最终库存。输入输出字段:产品参考、起始库存、输出数量、剩余库存、日期。

这里的目的是如果 Qty Out 为 Null 并根据产品 Ref 的 V-Lookup 标准,将最终库存从库存 V-lookup 到起始库存。

Remaining Out 有一个简单的公式Starting Stock- Qty Out。

不能使用常规公式,因为在数量中所做的任何更改都会影响之前具有相同产品参考的所有条目。

起始库存应为截至日期并保持不变。

4

3 回答 3

0

您需要做的就是将其包装在一个For循环中。见下文:

Option Explicit

Sub starting_stock()

    Dim i As Long

    For i = 2 To 3
        If Worksheets("out").Range("E" & i).Value = "" Then
            Set ItemRef = Worksheets("out").Range("A" & i)
            Set MyRange = Worksheets("Inventory").Range("A:G")
            Worksheets("out").Range("D" & i).Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 7, False)
        End If
    Next i

End Sub

在此处阅读有关For循环的更多信息:https ://excelmacromastery.com/vba-for-loop/

于 2019-08-19T07:50:30.163 回答
0

我假设这就是您要查找的内容:
您想在一列中选择一个单元格并运行代码,它将使用同一行上 A 列的值来执行 vlookup 并将值粘贴到 D 列中排?

在这种情况下 ActiveCell.row 可能是您需要的。

Sub starting_stock()
    If Worksheets("out").Range("E" & ActiveCell.Row).Value = "" Then
        Set ItemRef = Worksheets("out").Range("A" & ActiveCell.Row)
        Set MyRange = Worksheets("Inventory").Range("A:G")
        Worksheets("out").Range("D" & ActiveCell.Row).Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 7, False)
    End If
End Sub
于 2019-08-19T09:28:33.227 回答
0

我找到了以下解决方案:

Sub Button_Click()

 Dim i As Integer

i = 2

Do While Worksheets("out").Cells(i, 1).Value <> ""

        If Worksheets("out").Range("E" & i).Value = "" Then
            Set ItemRef = Worksheets("out").Range("A" & i)
            Set MyRange = Worksheets("Current Inventory").Range("F:M")
            Worksheets("out").Range("D" & i).Value = Application.WorksheetFunction.VLookup(ItemRef, MyRange, 8, False)
        End If
i = i + 1

Loop

End Sub

条件为非空 ProductRef 的 while 循环。

于 2019-08-19T09:29:03.293 回答