[英]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.