Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA基于B列的值重置A列中的值_Vba_Excel_Excel 2003 - Fatal编程技术网

使用VBA基于B列的值重置A列中的值

使用VBA基于B列的值重置A列中的值,vba,excel,excel-2003,Vba,Excel,Excel 2003,我有一张表,看起来像这样,但要复杂得多: 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

我有一张表,看起来像这样,但要复杂得多:

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
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代码的帮助,该代码将B列的值重置为C列的值,如下所示:

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
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愿意显示这一点。你知道我该如何解决这个问题吗?或者用不同的方法一起解决吗?

用一个特殊的粘贴方法将值从C列复制粘贴到B列


但是C列的值显然会发生变化——因为Eistein和因果关系之类的东西。

看起来应该使用D列,并将其称为Display Count,或者类似的东西。在D列中使用此公式:

=IF(C18="n/a", 0, C18)
如果B列和C列混淆了您的上司,则可以隐藏它们


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

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

=在“实际计数”列中的最大值(B2,0)?我真的不明白你想做什么请把你尝试过但失败过的东西贴出来?如果您向我们展示您尝试过但不起作用的内容,而只是为您编写代码,我们可以为您提供更好的帮助:)为什么不复制c列并粘贴B列中的值?这会弄乱Cal列中“n/a”旁边的B列中的值,所以它需要是VBA代码。我不会是那个使用这个程序的人,所以我必须向我的老板详细说明一切。这会导致其他几个问题,所以它需要VBA代码。我不会是那个使用这个程序的人,所以我必须向我的老板详细说明一切。它还造成了什么问题?你可以很容易地用VBA实现复制和粘贴的自动化,但这是一个非常基本的操作,你不必这么做。我知道它涉及的信息比我第一次给出的要多,但我确实说过我真正的程序要复杂得多。好吧,我试过这个代码,但它根本不起作用。可悲的原因是我不知道为什么它不起作用。我的电脑没有问题,但它没有改变任何东西。我对您的程序所做的唯一更改是将“Sheet1.Cells(I,3).Value”和simular替换为“Sheets(count).Cells(1,3)Value”。其他的一切都是一样的,但这对我的工作表没有任何影响。我不知道你为什么要改变变量,即count和I。正确的代码应该是Sheet1.Cells(i,3)。仅当Sheet1是页码,i是变量时,才使用值。只在一张纸上尝试它,如果它是变量i,则将其扩展到其他纸或所有纸上。我所做的只是重命名“纸”,以便在我已经使用的程序中尝试代码。好主意,但不是我要做的。我想在一天结束时重置工作表,以便我们有一个固定计数,而不是公式计数。我想这样做,如果他想改变一个计数点击它,并更新一个数字,他可以。然后它将在下一个单元格中显示新的计数,当我们重置时,它将在第一个单元格中显示正确的计数。例如,如果我的老板卖掉了一辆完整的自行车,他可以点击b21,更改计数,点击“结束日”按钮后,我们将在B列中获得准确的计数,并且与C列匹配。好的,我进行了修补,这一个有效。我可以做一个特殊的粘贴,并将D列中的值复制到B列。这允许每天晚上更新。非常感谢。