Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2007-动态重复数据_Excel_Vba_Excel 2007 - Fatal编程技术网

Excel 2007-动态重复数据

Excel 2007-动态重复数据,excel,vba,excel-2007,Excel,Vba,Excel 2007,所以我有一个Excel工作簿,基本上应该是每个员工工作服的数据表。我想要的是每人一张(名字和姓氏),然后每件衣服一张 然后用一张纸把它合并在一起。但是,这将涉及到重复每个名称的次数,因为有独特的布料类型。很难解释,但我有一个工作簿可在这里下载: Sheet2(用户)包含每个唯一用户的简单列表。第3页(文章)包含每个独特服装文章的列表。最后我们有了第一张表(摘要),其中包含了所有内容的合并列表。基于这个汇总表,我稍后将创建一个透视表。但首先我需要这里的功能是动态的。无论何时添加或删除新用户或衣服

所以我有一个Excel工作簿,基本上应该是每个员工工作服的数据表。我想要的是每人一张(名字和姓氏),然后每件衣服一张

然后用一张纸把它合并在一起。但是,这将涉及到重复每个名称的次数,因为有独特的布料类型。很难解释,但我有一个工作簿可在这里下载:

Sheet2(用户)包含每个唯一用户的简单列表。第3页(文章)包含每个独特服装文章的列表。最后我们有了第一张表(摘要),其中包含了所有内容的合并列表。基于这个汇总表,我稍后将创建一个透视表。但首先我需要这里的功能是动态的。无论何时添加或删除新用户或衣服,我只想在Sheet2或Sheet3中执行此操作。Sheet1中的任何内容都应该动态收集数据

有什么想法吗?我是否需要创建一个宏来执行此操作

编辑:好的,我创建了一个包含两个公共字典的模块。以下是我目前掌握的代码:

此工作簿

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
获取一些信息,但当您要扩展数组时(我将编辑我的答案,您不必在单元格上循环,只需在数组上循环),我觉得这不值得。看看我更新的第一篇帖子。我现在设法收集了一些数据。但实际上比较数据,发现重复