将数据与单独工作表中的值相乘 - vba

时间:2015-03-11 01:02:23

标签: arrays excel vba excel-vba

我正在尝试创建一个宏来获取位于工作表中的未知数量的客户(和产品)的销售数据"客户"并将其乘以位于单独工作表"产品"中的一组价格中断。例如,假设客户1订购了150个单位的产品1.如果价格中断少于500个单位是10.00美元,我需要找到150和10的产品并将其显示在客户工作表中。我构建了for循环来遍历销售数据并将其放在正确的位置,但是我遇到了一个问题,试图将销售数据乘以价格中断,因为它们位于不同的工作表中。使用此代码,我得到一个"下标超出范围"错误。我已经研究并尝试了我能想到的一切,但无法弄清楚什么是超出范围"。我做错了什么?

    Dim anchor As Range, rngGadgets As Range, rngClients As Range, _
    anchorABED As Range, anchorAAED As Range, _

    Dim numGadgets As Integer, numClients As Integer, x As Integer, _
    i as integer, j as integer

    set anchor = range("A4")

    numGadgets = (Cells(4, Columns.Count).End(xlToLeft).Column - 1)
    MsgBox numGadgets
    numClients = (Cells(Rows.Count, 1).End(xlUp).Row - 4)
    MsgBox numClients

    'Amount before extra discount label
    Set anchorABED = anchor.Offset(0, numGadgets + 2)
    For x = 0 To numGadgets - 1
        anchorABED.Offset(0, x).Value = "Gadget " & x + 1
    Next x

    'multiplication loop 
    For j = 0 To numGadgets - 1
      For i = 1 To numClients
        If anchor.Offset(i, j + 1) < 100 Then
            anchorABED.Offset(i, j).Value = anchor.Offset(i, j + 1) * _
            Worksheets("sheet1").anchor.Offset(j + 1, 1)
        ElseIf anchor.Offset(i, j + 1).Value < 500 Then
            anchorABED.Offset(i, j).Value = anchor.Offset(i, j + 1) * _
            Worksheets("sheet1").anchor.Offset(j + 1, 2)
        ElseIf anchor.Offset(i, j + 1).Value < 1000 Then
            anchorABED.Offset(i, j) = anchor.Offset(i, j + 1) * _
            Worksheets("sheet1").anchor.Offset(j + 1, 3)
        ElseIf anchor.Offset(i, j + 1).Value >= 1000 Then
            anchorABED.Offset(i, j).Value = anchor.Offset(i, j + 1) * _
            Worksheets("sheet1").anchor.Offset(j + 1, 4)
        End If
      Next i
    Next j

1 个答案:

答案 0 :(得分:0)

在乘法循环中,您尝试将 anchor 的偏移值(设置为活动工作表的范围对象的A4)与 anchor <的偏移量相乘/ em>在另一个工作表上。您不能像这样随意重置 anchor 的父级。

我假设要繁殖的两个单元在它们各自的工作表上具有相同的位置。您可以使用 anchor&#39> 地址来引用另一个工作表上与 anchor 具有相同单元格地址的单元格。

anchorABED.Offset(i, j - 1).Value = anchor.Offset(i, j + 1) * _
   Worksheets("sheet1").Range(anchor.Address).Offset(j + 1, 1)

这不是最好的方法,因为要求是来自不同工作表的两个单元格保持单元格引用同步。最好有列和行标题信息,以便可以对第二个工作表上的数据矩阵执行动态查找。