【问题标题】:EXCEL VBA for permutation and combinations calculations [closed]用于排列和组合计算的 EXCEL VBA [关闭]
【发布时间】:2020-12-12 15:50:22
【问题描述】:

我对 Excel VBA 完全陌生,我正在尝试编写代码来完成一项简单的任务。

一个 Excel 中有 3 个工作表:SummaryDiscountPrice

工作表Summary 包含以下数据:

下拉列表B1B3 中的数据):

Type: Supermarket,Hopcoms
Product:Dairy,Meat,Combo
Category:Chicken,Eggs,Eggs+Chicken

工作表Discount 包含以下数据:

工作表Price 包含以下数据:

任务:

  1. 摘要表中的用户通过下拉列表选择B1:B3 中的数据。
  2. 根据选择,应从折扣表中为相应组合选择折扣百分比 例如:如果用户在汇总表(来自 #1)中选择超市-组合-鸡蛋+鸡肉,则可用的总折扣应为 13%(根据折扣表)。
  3. 用户导航到价格表并在总价列中为每个客户输入数据
  4. 当用户现在点击计算折扣按钮时,所有客户的总价格应应用 13% 的折扣,折扣金额应在已提供的折扣列中更新
  5. 应在 T.Discount 旁边更新提供给所有客户的总折扣价。

对于任何错误深表歉意,有人可以解决这个问题吗? 如有任何问题请告诉我

【问题讨论】:

  • 只是一组规范的问题,没有代码,也没有具体的问题描述(VBA 新手不符合该要求)往往会在这里关闭。您可以通过描述具体阻止您实施此功能的原因来帮助您获得帮助的机会。
  • 感谢@ashleedawg 的编辑。我在使用 for 循环并为上述所有 PnC 提供 if 和语句时遇到了麻烦。由于我没有取得太大进展,因此没有发布任何代码。
  • 我认为通过替换现有价格来应用折扣并不是最好的方法。我正在研究代码解决方案,我将插入一个“价格”列,用户设置的价格将保留在其中,在接下来的两列中,“总价”和“折扣”......这样可以吗?
  • 是的@FaneDuru,那会很好。

标签: excel vba drop-down-menu compare dropdown


【解决方案1】:

请测试下一个代码。但在此之前,请在Price 工作表中插入另一列,在现有“客户”(B:B) 和“总价格”(C:C) 之间,并将其命名为“价格”。在那里,用户将填写标准价格(没有任何折扣),并在“总价”中应用折扣计算价格:

Sub TestApplyDiscount()
 Dim shS As Worksheet, shD As Worksheet, shP As Worksheet, lastRowP As Long
 Dim strType As String, strProd As String, strCat As String, i As Long, j As Long
 Dim rowType As Long, rowProd As Long, rowCat As Long, disc As Double
 
 Set shS = Worksheets("Summary")
 Set shD = Worksheets("Discount")
 Set shP = Worksheets("Price")
 lastRowP = shP.Range("A" & Rows.count).End(xlUp).Row
 
 strType = shS.Range("B1").value
 strProd = shS.Range("B2").value
 strCat = shS.Range("B3").value
 
 With WorksheetFunction
       rowType = .Match(strType, shD.Range("A1:A19"), 0)

        rowProd = .Match(strProd, shD.Range("B" & rowType & ":B" & rowType + 8), 0)
        rowProd = rowProd + rowType - 1
        
         rowCat = .Match(strCat, shD.Range("C" & rowProd & ":C" & rowProd + 3), 0)
         rowCat = rowCat + rowProd - 1
         
         disc = shD.Range("D" & rowCat).value
 End With
 For i = 2 To lastRowP
    shP.Range("E" & i).value = disc & "%"
    shP.Range("D" & i).FormulaR1C1 = "=RC[-1]-(RC[-1]*RC[1])"
 Next i
End Sub

我正在等待一些反馈...

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2011-11-04
    • 2011-12-15
    相关资源
    最近更新 更多