繁体   English   中英

用于从表中提取数据的嵌套循环

[英]Nested loops to extract data from table

从这个意义上说,我正在寻找一种从表(在 sheet1 上)中提取数据的方法:
COLUMN_A - 有我们组件的材料代码。 可能出现一次或多次
COLUMN_B - 有仓库区域。 每个物料代码可以有1个或多个仓库区域
COLUMN_C - 具有每个物料代码的每个仓库区域的数量。 它似乎只有数量 >0
请看图片:
在此处输入图像描述

我想在这个表中循环,构建一个新的工作表(在 sheet2 上),它基本上是:
在此处输入图像描述

所以我必须把每个代码,粘贴到sheet2中,并添加与sheet1中的仓库区域一样多的行,在图片“end table”中的sheet 2的C列中写仓库区域的名称,你可以看到如何手动我意识到它..有没有办法用VBA和循环来轻松获得它?

我做了类似的事情,但使用固定单元格(意味着每个代码我有 5 行),但从来没有这样动态的行范围。

非常感谢任何可以帮助我的人! 谢谢安德里亚

如果我正确理解你想要什么,也许是这样的?

Sub test()
Dim rgSrc As Range: Dim rg As Range: Dim cell As Range
Dim oFill As Range: Dim oStart As Range: Dim rc As Long
Dim el: Dim arr

With Sheets("Sheet1")
    Set rgSrc = .Range("A4", .Range("A" & Rows.Count).End(xlUp))
End With

With Sheets("Sheet2")
    Set oStart = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    Set oFill = oStart
End With

Set arr = CreateObject("scripting.dictionary")
For Each cell In rgSrc: arr.Item(cell.Value) = 1: Next

For Each el In arr
    With rgSrc
        .Replace el, True, xlWhole, , False, , False, False
        rc = Application.CountIf(rgSrc, True)
        Set rg = .SpecialCells(xlConstants, xlLogical)
        .Replace True, el, xlWhole, , False, , False, False
    End With
    Union(rg, rg.Offset(0, 1), rg.Offset(0, 2)).Copy Destination:=oFill
    Set oFill = oFill.Offset(rc, 0)
Next
    
With Range(oStart, oStart.End(xlDown)).Offset(0, 2)
    If Not .Find(0, lookat:=xlWhole) Is Nothing Then
        .Replace 0, True, xlWhole, , False, , False, False
        .SpecialCells(xlConstants, xlLogical).EntireRow.Delete
    End If
End With
    
Range(oStart.Offset(0, 1), oStart.Offset(0, 1).End(xlDown)).Cut oStart.Offset(0, 2)

End Sub

代码的作用:
在 Sheet1 的“材料”下创建一系列数据作为 rgSrc 变量。 它从单元格 A4 开始到数据的最后一行。

创建一个范围以填充“材料”列下的 Sheet2 作为 oFill 变量,并使 oStart 变量与 oFill 的范围相同。

它根据“Materiale”(rgSrc 变量)下的数据范围创建一个唯一值数组。 然后它作为el变量循环到数组中的每个元素,获取包含循环el值的单元格范围,然后将结果放入oFill。

循环完成后,它会删除 sheet2 的 C 列中值为零的所有行。 然后它将 B 列中的值移动到 C 列。

改进对我想要做的事情的解释:取 sheet1 - columnA (Material code) -> 在此列中,材料代码可以出现多次,或者只出现 1 次。 我想把这些代码中的每一个都放在 sheet2 - columnA 中。

对于每个代码,我想获取 sheet1 中的所有仓库区域并将它们复制到 sheet2 - columnC 中的相应代码下。

sheet1 中的所有代码每周都会更改。

所以我会有这样的事情:

sheet1 ABC a pdvd 100 b dep2 200 c pdph 200 a dep2 10000 a pdph 130

在 sheet2 中,我将有 ABC a pdvd 100 a dep2 10000 a pdph 130 b dep2 200

这直到所有行结束.. 清楚吗? 你的脚本会以这种方式工作吗?

BR安德烈亚

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM