VBA:根据特定范围

时间:2017-11-18 16:53:00

标签: excel vba excel-vba sorting

我对VBA很新,并且发现这是一个很好的资源。我完全理解通常会找到别人的代码并将其修改为我需要它做的事情,但我已经被困在这里了。我已经尝试过多次以不同的方式对其进行编码,但似乎无法将其付诸实践,而且我并不过分确信我是以正确的方式开始使用它。我希望有人愿意帮助我。

这是我尝试做的事情的理论范例。

我有一张表格,其中包含某种产品类型的订单组,其数量按照他们当前所在流程的步骤列出:

正在处理的订单

Current orders in process

我需要"排序"他们或重新订购,以便:    1.根据流程步骤将订单复制到选项卡中,首先列出最远的流程步骤,然后回到最近的处理步骤,并且......    2.完成"中列出的订单"步骤需要完全排除,并...    3.我需要对多个产品类型执行此操作,这些产品类型具有不同的处理步骤数,因此需要以某种方式识别结束列(作为动态变量或某些触发器)

对于示例,它看起来像这样:

排序数据

Sorted data

我已经想过通过六种方式来逻辑地解决这个问题并试图弄清楚如何使用代码来做到这一点,但是我被卡住了......我感觉到那里可能是1或2"最好"如何解决这个问题,这个社区中的某个人可能知道他们的头脑。提前谢谢。

编辑:这是我第一次尝试编写大纲。我意识到有一些组件缺失,但我们喜欢这些看起来是一种可用或有效的方法的反馈。

Sub test1()
Dim skuStartRow As Long, skuEndRow As Long
Dim qty As Integer
Dim colCheck as long, lastCol as Long


skuStartRow = .Range("A:A").Find(what:=sku, after:=.Range("A1")).Row
skuEndRow = .Range("A:A").Find(what:=sku, after:=.Range("A1"), searchdirection:=xlPrevious).Row
' Code here to identify last column (lastCol) either by .UsedRange or by header?

For colCheck = 3 To lastCol

    For rowCheck = skuStartRow To skuEndRow

      qty = Cells(rowCheck, colCheck).Value
      If qty <> "" Then
        'copy current row and paste into destination worksheet
        MsgBox qty 'test to see if correct qty is displayed
      End If
    Next rowCheck

Next colCheck

End Sub

更新

仍有问题。

  1. 我已根据产品类型将整个订单范围复制/粘贴到新工作表中,然后对其进行排序。

  2. 我已插入一列并使用Variatus提供的匹配/索引公式(自动填充下来)来创建索引列。

  3. 插入新列并使用RANK函数创建排名顺序列表,因为Helper / Index列中有重复项。

  4. 使用INDEX / MATCH函数将值返回到工作订单编号和数量值的等级排序列表中。

  5. 我目前使用的代码 - 除了它使用FormulaRICI = ...命令进行硬编码。我遇到了重大挑战,想知道如何转换代码以允许将MATCH / INDEX函数与变量一起使用。我需要这样做b / c取决于产品类型,总订单数量不同,以及不同数量的步骤;所以我需要为行/列提供动态范围。

    我看了很多例子,但似乎无法找到正常工作的东西。我见过的最有希望似乎是使用&#34;替换&#34;在VBA中运作,但我的头脑即将爆炸。

    非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我想知道你是否真的需要VBA。请考虑以下步骤。

  1. 在工作表中使用此公式在第2行中插入一列,向下复制。 =IFERROR(MATCH(TRUE,INDEX($D2:$I2<>0,0),0),0)。范围D2:I2由D2 =步骤1和I2 =&#34;完成&#34;定义。公式查找范围中的第一个非空白单元格。该列可以隐藏。
  2. 对辅助列上的工作表进行排序,从最大到最小。
  3. 应用过滤器。
  4. 过滤产品。
  5. 您在此处看到的是您希望使用VBA创建的列表,但包括“完成”和“完成”。列和右侧的任何其他列。

    有许多方法可以自动执行此过程。您可以编写代码以自动在辅助列中插入公式或其结果。这可以在需要时完成,而无需永久的额外列。您可以编写代码来自动进行排序和过滤,例如,基于当前选定的产品。最后,您可以编写代码将结果复制到另一个工作表,删除不需要的列,并将原始工作表恢复到原始状态(可能按订单号排序)。