动态匹配来自不同选项卡VBA的公式

时间:2018-06-29 07:18:43

标签: excel vba excel-vba

我一直在努力解决我正在寻找的解决方案。我要处理大量数据,然后根据这些数据提供预测。预测是在采购订单级别上完成的,但始终需要处理数百个不同的采购订单。采购订单编号也不总是按升序创建,因此很难预测采购订单编号将弹出的位置。我一直在研究VBA解决方案,以使其更加自动化,并且一切正常。我的问题是将公式从一个更新保存到下一个更新。

我从3种不同的提取物中提取的数据无法一次提取。该代码基本上贯穿所有三个选项卡,并将所有必要的信息汇总到一个选项卡中,在该选项卡中进行预测。由于采购订单可以在任何地方弹出,因此我将以前的预测保存到单独的工作表中,然后尝试在新提取的采购订单中匹配这些数字。由于无法按行放置来匹配它,因此我使用sumifs公式,该公式调查了每月的放置,采购订单编号,行项目编号以及我们在公司中用于规格目的的另一种类型的编号。然后,它会与我在先前的预测中输入的任何数字相匹配,并且通常为我提供准确的信息。

现在的问题是,我宁愿有整个过程来匹配输入到预测中的公式,而不是随便吐出实际数字,仅此而已。就像如果我知道此采购订单有20.000美元并且将其分散了4个月,我将使用一个非常基本的公式“ = 20000/4”来编写。运行宏后,它仍然具有执行上面编写的公式所获得的值(5000),但不再具有我在先前的预测中输入的公式。有谁对如何解决有任何想法?我确实需要此类信息保留在我的文件中以进行跟踪,因为当然公式通常不像我举的例子那么基本,所以我希望能够始终对此类信息有一个清晰的了解。数字来自。

我正在使用的代码是这样:

W1是我用于预测的工作表 W4是我存储先前预测数字的工作表

 W4.Activate
    LastRowPrev = W4.Range("A3").End(xlDown).Row               
    W4.Range(Cells(2, 1), Cells(LastRowPrev, LastColumnPrev)).Clear
    W1.Activate
    LastRowPrev = W1.Range("A3").End(xlDown).Row
    W1.Range(Cells(2, 1), Cells(LastRowPrev, LastColumn)).Copy
    W4.Range("A2").PasteSpecial xlPasteFormulasAndNumberFormats

'more code for other things

For i = 11 To LastColumnCur
        If W1.Cells(2, i) >= W6.Range("C12") Then
    W4.Activate
    Set rng = Range(Cells(3, i), Cells(LastRowPrev, i))
    For j = 3 To LastRowCur
        If W1.Range("C" & j) <> "Total" Then
        W1.Cells(j, i) = WorksheetFunction.SUMIfs(rng, _
            W4.Range("A3:A" & LastRowPrev), W1.Range("A" & j), _
            W4.Range("B3:B" & LastRowPrev), W1.Range("B" & j), _
            W4.Range("C3:C" & LastRowPrev), W1.Range("C" & j))
        W1.Cells(j, i).Style = "Comma"
        ElseIf W1.Range("C" & j) = "Total" Then
        W1.Cells(j, i) = WorksheetFunction.SUMIfs(rng, W4.Range("A3:A" & LastRowPrev), _
            W1.Range("A" & j), W4.Range("B3:B" & LastRowPrev), W1.Range("B" & j), _
            W4.Range("C3:C" & LastRowPrev), "<>Total")
        W1.Cells(j, i).Style = "Comma"
        End If
    Next j
    End If
Next i

0 个答案:

没有答案