0

我有一张看起来像这样的工作表,但更复杂:

Product            count     real count
Rake Complete      -1        n/a
Rake Head          2         =B3+B2
Rake Handle        2         =B4+B2
Bike Complete      -5        n/a
Bike Handle        10        =B6+B5
Bike Wheel         25        =B7+B5+B5
Bike Frame         90        =B8+B5+B6

随着公式的工作,它看起来像这样:

Product            count     real count
Rake Complete      -1        n/a
Rake Head          2         1
Rake Handle        2         1
Bike Complete      -5        n/a
Bike Handle        10        5
Bike Wheel         25        15
Bike Frame         90        85

我会感谢 VBA 代码的帮助,它将 B 列的值重置为 C 列的值,如下所示:

Product            count    real count
Rake Complete      0        n/a
Rake Head          1        1
Rake Handle        1        1
Bike Complete      0        n/a
Bike Handle        5        5
Bike Wheel         15       15
Bike Frame         85       85

我有其他 VBA 代码放在其他工作表上,这些工作表对count列中的值进行加减。为了使这个工作清单尽可能准确并且不基于变量,我想每天重置 B 列。这样,如果计数稍微偏离,我就不必重置所有内容。

我已经为此工作了一段时间,我知道有比我尝试过但失败的五个更好的方法来做到这一点。虽然它需要基于列,但我的工作表有 465 行需要应用,并且随着业务的增长,此工作表上的行也将如此。

让我最接近的代码是这样的:

Sub CommandButton1_Click()

    Columns("C:C").Select
    Selection.Copy
    Columns("B:B").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Dim r As Long
    For r = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
        If Cells(r, 2) = "n/a" Then Cells(r, 2).value = 0
    Next r

End Sub

我遇到的主要问题是每次运行代码时,我的其他一些产品的数量都会增加。如果您查看自行车车架,您可以单独出售它,但您也可以在出售时获得自行车把手。当此代码重置时,它总是添加自行车把手。如果我运行它 10 次而不进行任何更改,我的库存会增长得更高,那么 excel 愿意显示。知道如何解决这个问题或任何不同方式的想法吗?

4

3 回答 3

1

从 C 列复制和粘贴值 - 使用特殊粘贴 - 从 C 列到 B 列。

但是随后 C 列的值显然会发生变化——因为爱斯坦和因果关系或类似的东西。

于 2012-08-17T18:15:46.557 回答
1

看起来您应该使用 D 列并将其称为“显示计数”或类似的名称。在 D 列中使用此公式:

=IF(C18="n/a", 0, C18)

然后,如果 B 和 C 列让您的老板感到困惑,您可以隐藏它们。

显示计数列

于 2012-08-20T01:06:05.900 回答
0

在工作簿打开事件中尝试此宏。我希望它可以解决您的问题:

Dim realcount() As Variant
Dim x As Single

Private Sub Workbook_Open()
   On Error Resume Next:
    x = Sheet1.Cells(2, 3).End(xlDown).Rows
    ReDim realcount(x)
    For i = 2 To x
        realcount(i) = Sheet1.Cells(i, 3).Value
        Sheet1.Cells(i, 2).Value = realcount(i)
        If Sheet1.Cells(i, 3).Value = "n/a" Then
            Sheet1.Cells(i, 2).Value = 0
        End If
    Next
End Sub
于 2012-08-20T07:21:23.863 回答