Arrays 设置库存的上限和下限

Arrays 设置库存的上限和下限,arrays,vba,excel,limits,Arrays,Vba,Excel,Limits,所以我在VBA方面遇到了一些麻烦。我一直在做一个清单项目,就在我即将完成它的时候,我被抛出了一个涉及VBA的额外任务。我对VBA非常缺乏经验,所以希望有人能给我指出正确的方向 Unfortunately, I cannot post actual pictures of the inventory sheets, so I will make a mock-up. The actual quantities of the items are in column G, starting at ro

所以我在VBA方面遇到了一些麻烦。我一直在做一个清单项目,就在我即将完成它的时候,我被抛出了一个涉及VBA的额外任务。我对VBA非常缺乏经验,所以希望有人能给我指出正确的方向

Unfortunately, I cannot post actual pictures of the inventory sheets, so I will make a mock-up. The actual quantities of the items are in column G, starting at row 10 down to row 2084. 

Example: 2 8 4 13 29 29 38 55 8 75.
我的客户想要的是使用VBA脚本设置库存数量的上限和下限。要求的参数如下:

**Low Limit:** 
IF value is 10 or less - set low limit to 10;
IF value is between 10 and 30 - set low limit to 10;
IF value is 30 or greater - set low limit to 30;

**High Limit:** 
50% more than what each value is, rounded to the nearest whole number, unless that value is 10 or below. In which case the high limit would be 15, since the low limit of those values is set to 10. 
我目前拥有的库存数量是初始数量。这些数量将随着物品被移除/添加到库存中而改变。但是,这些初始数量将用作高/低限值的基线。因此,我的想法是,初始数量需要存储到一个数组中,数组中的这些初始数量将用于计算上限/下限,即使在更新库存时也是如此。如果这是不可能的,我只会添加一个初始库存列到电子表格,但它是一个固定的模板,所以他们希望我不要这样做

此外,在运行VBA脚本以确定高/低限制后,如果该值低于低限制,我希望单个数量单元格变为红色,如果该值高于高限制,则变为蓝色。显然,第一次运行时,不会有高于上限的值,因为这些值将用于计算上限。然而,所有最初低于10的量将使其单元格变为红色,因为它们开始低于其定义的下限


我知道这是很多,但任何帮助都将不胜感激,因为我不知道从哪里开始。谢谢

我相信这就是你需要的

如果要保存初始值的上限,则需要创建新的工作表,并使用普通excel函数为ex.Config调用它来创建上限值。(在表1中,我创建了示例值列表)


=ROUND(如果我没有得到你所描述的你想要得到的东西)非常简单的问题。你能简单地描述一下你的问题和目标吗?我不确定我是否把一切都说清楚了。在任何给定的时间,客户都希望能够运行VBA脚本,查看库存中哪些项目高于上限和低于下限。如果低于下限,单元格将变为红色,如果高于上限,单元格将变为蓝色限制。但是,限制是使用初始库存计算的。因此,数量将发生变化,但每个项目的高/低限制将保持不变。这有助于澄清问题吗?如果这是一个非常简单的解决方案,我很抱歉,在VBA方面,我只是一个新手。我理解这个低限制,但高限制是错误的…如果第一个出现的值是上限的参考值,因此对于ex.2-将其设置为5。现在它处于下限(3)…对于10或更少的数字,上限值将设置为15谢谢!!因此需要将上限值粘贴到显示“配置”的位置?是的。您需要记住,配置中的值应与表1中的值一致。如果这是您的解决方案,请在答案左侧用绿色勾号标记。
=ROUND(IF(Sheet1!A1<=10; 15;Sheet1!A1*1,5);0)
Private Sub prcCheckLimits()
    Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet
    Dim wsHighLimit As Worksheet: Set wsHighLimit = ThisWorkbook.Sheets("Config")
    Dim lngRow As Long 'lastRow
    Dim i As Long

    lngRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 1 To lngRow
        With ws
            If .Cells(i, 1).value < fncLowLimit(.Cells(i, 1).value) Then
                .Cells(i, 1).Interior.ColorIndex = 3
            ElseIf .Cells(i, 1).value > wsHighLimit.Cells(i, 1).value Then
                .Cells(i, 1).Interior.ColorIndex = 37
            Else
                .Cells(i, 1).Interior.ColorIndex = 0
            End If
        End With
    Next i
End Sub

Private Function fncLowLimit(value As Long) As Long
    Dim result As Long

    If value < 30 Then
        result = 10
    Else
        result = 30
    End If

    fncLowLimit = result
End Function