Excel 2007-动态重复数据
所以我有一个Excel工作簿,基本上应该是每个员工工作服的数据表。我想要的是每人一张(名字和姓氏),然后每件衣服一张 然后用一张纸把它合并在一起。但是,这将涉及到重复每个名称的次数,因为有独特的布料类型。很难解释,但我有一个工作簿可在这里下载: Sheet2(用户)包含每个唯一用户的简单列表。第3页(文章)包含每个独特服装文章的列表。最后我们有了第一张表(摘要),其中包含了所有内容的合并列表。基于这个汇总表,我稍后将创建一个透视表。但首先我需要这里的功能是动态的。无论何时添加或删除新用户或衣服,我只想在Sheet2或Sheet3中执行此操作。Sheet1中的任何内容都应该动态收集数据 有什么想法吗?我是否需要创建一个宏来执行此操作 编辑:好的,我创建了一个包含两个公共字典的模块。以下是我目前掌握的代码: 此工作簿Excel 2007-动态重复数据,excel,vba,excel-2007,Excel,Vba,Excel 2007,所以我有一个Excel工作簿,基本上应该是每个员工工作服的数据表。我想要的是每人一张(名字和姓氏),然后每件衣服一张 然后用一张纸把它合并在一起。但是,这将涉及到重复每个名称的次数,因为有独特的布料类型。很难解释,但我有一个工作簿可在这里下载: Sheet2(用户)包含每个唯一用户的简单列表。第3页(文章)包含每个独特服装文章的列表。最后我们有了第一张表(摘要),其中包含了所有内容的合并列表。基于这个汇总表,我稍后将创建一个透视表。但首先我需要这里的功能是动态的。无论何时添加或删除新用户或衣服
Private Sub Workbook_Open()
' Create dictionaries
Set dictName = New Dictionary
Set dictClothItems = New Dictionary
' Collect data
collectDictName
collectDictClothItems
End Sub
模块1:
Public dictName As Dictionary
Public dictClothItems As Dictionary
Public Sub collectDictName()
Dim v As Variant
Dim rngName As Range
' Add values
With ThisWorkbook.Sheets(2)
Set rngName = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
For Each strName In rngName
dictName.Add strName, ""
Next
End With
End Sub
Public Sub collectDictClothItems()
Dim v As Variant
Dim rngName As Range
' Add values
With ThisWorkbook.Sheets(3)
Set rngName = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
For Each strClothName In rngName
dictClothItems.Add strClothName, ""
Next
End With
End Sub
因此,这里我收集数据并将其存储在一个数组中。我不确定如何从范围中收集数据,因此我对rngName中的每个strName使用了
。看起来它还收集了我真的不需要的其他数据。可能可以通过创建一个字符串变量并为其赋值来解决这个问题。然后将该字符串添加到字典中。不管怎样,既然数据已经收集好了,我现在需要比较并将其添加到实际的汇总表中。你知道从哪里开始吗?重新表述问题
所以基本上,你想要的是:
每次在Sheet2(用户)或Sheet3(衣服)上添加新值时,您都希望Excel在Sheet1(摘要)上为另一张图纸上的每个值(用户或衣服取决于更改的值)动态添加一个新行
顺便问一下,金额从何而来
回答
然而,要回答您的问题,最简单的方法是使用VBA,这样它将是动态的
以下是您可以做的:
- 在第2页和第3页上添加en事件
工作表\u Change()
(请参见如何操作)
- 此程序将监视这些表上的每一个更改。每次用户添加值时,您都应该在另一张表上循环从另一张表中获取值并填充一个数组(衣服或用户取决于该值)
- 依我看,整合数据的最简单方法是在已创建的数组上创建循环(或使用a),并将每一行添加到数组中
- 最后,您可以在
摘要
工作表中添加数组
如果你需要,请毫不犹豫地询问更多的信息,如果你仍然被困住,请用你已经尝试过的东西问一个新问题
[编辑2]这是一个完整的文章工作解决方案(易于适应用户)
第3页上的代码(文章)
模块中的代码
Option Explicit
Public vNames As Variant
Public vClothes As Variant
Public Sub collectNames()
With ThisWorkbook.Sheets(2)
vNames = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
End With
End Sub
Public Sub collectClothItems()
With ThisWorkbook.Sheets(3)
vClothes = .Range("A2", .Range("B" & Rows.Count).End(xlUp))
End With
End Sub
我没有使用字典(也许@Issun在这里有一个想法,他是一个dict专家),而是使用数组,因为它更容易映射到工作表范围。问题的重新表述
所以基本上,你想要的是:
每次在Sheet2(用户)或Sheet3(衣服)上添加新值时,您都希望Excel在Sheet1(摘要)上为另一张图纸上的每个值(用户或衣服取决于更改的值)动态添加一个新行
顺便问一下,金额从何而来
回答
然而,要回答您的问题,最简单的方法是使用VBA,这样它将是动态的
以下是您可以做的:
- 在第2页和第3页上添加en事件
工作表\u Change()
(请参见如何操作)
- 此程序将监视这些表上的每一个更改。每次用户添加值时,您都应该在另一张表上循环从另一张表中获取值并填充一个数组(衣服或用户取决于该值)
- 依我看,整合数据的最简单方法是在已创建的数组上创建循环(或使用a),并将每一行添加到数组中
- 最后,您可以在
摘要
工作表中添加数组
如果你需要,请毫不犹豫地询问更多的信息,如果你仍然被困住,请用你已经尝试过的东西问一个新问题
[编辑2]这是一个完整的文章工作解决方案(易于适应用户)
第3页上的代码(文章)
模块中的代码
Option Explicit
Public vNames As Variant
Public vClothes As Variant
Public Sub collectNames()
With ThisWorkbook.Sheets(2)
vNames = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
End With
End Sub
Public Sub collectClothItems()
With ThisWorkbook.Sheets(3)
vClothes = .Range("A2", .Range("B" & Rows.Count).End(xlUp))
End With
End Sub
我没有使用字典(也许@Issun在这里有一个想法,他是dict专家),而是使用数组,因为它更容易映射到工作表范围。你有这个想法了!:)我希望汇总表使用新值进行更新,如果在表2和表3中添加或删除了任何内容,则删除或添加行。这笔钱不是从任何地方来的。这就是我们手动进入并添加所需金额的地方:)。你认为工作表的更改是必要的吗?我想那可能会更快。我必须尝试几件事:)顺便说一句,你对如何在VBA中构造我需要的函数有什么聪明的想法吗?也许我可以组合Excel公式?我知道的唯一方法是遍历每个单元格,检查值,转到下一步。使用公式,您可以使用VLOOKUP
获取一些信息,但当您要扩展数组时(我将编辑我的答案,您不必在单元格上循环,只需在数组上循环),我觉得这不值得。看看我更新的第一篇帖子。我现在设法收集了一些数据。但实际上比较数据,发现重复