宏来整合名称并从多个列添加数量

时间:2016-09-15 11:54:24

标签: excel vba excel-vba macros

我有一个Excel模板,我正在作为我们部门的工具,它有多个可以复制的工作表,它最终做的是从前几页编译数据以创建工作表列表在我们的制造工厂生产的货物。每个订单项都包含数量,然后是核心材料和两个面。此列表是一个单独的工作表,可以复制以创建许多不同的列表,所有列表都引用相同的前三张表中的数据。

我需要能够快速,并在一个有点自动化的过程中,从第一个列表的数据创建一个辅助列表。次要列表需要告诉我总共每个独特的核心,面部和支持者。一些支持者与面部相同,因此应该合并。

我已经有一个宏可以让用户选择一系列数据,然后它会发出一个包含数量和名称的综合列表。问题是这只适用于3列数据,并使用第3列作为名称,第一列作为数量。我还没弄明白如何让它查看不完全相邻或超过3列的数据列。

我对电子表格公式感觉更舒服,但我认为如果我能弄明白,宏将是最好的解决方案,因为这个电子表格的最终用户对excel的了解有限,而且我没有&# 39;我想依靠他们记住一堆步骤。

First List Start of Second List

这是我到目前为止的宏。

 Sub Macro1()

Dim i, J, K, L, M, R1, R1F, C1F, Temp As Integer
Dim SemiFinalData(500, 2) As Variant
Dim FinalData(500, 2) As Variant

i = J = 0

Set InputData = Application.InputBox(prompt:="Select the full range of Data (Qty Through Description)", Type:=8)
R1 = InputData.Rows.Count 'Gets Data to Summarize and Counts the Number of Rows

For i = 1 To R1
    If InputData(i, 3) <> "" Then
        SemiFinalData(J, 0) = InputData(i, 1)
        SemiFinalData(J, 1) = InputData(i, 2)
        SemiFinalData(J, 2) = InputData(i, 3)
        J = J + 1
    End If
Next i  'Extracts Non-Blank Data into Array

M = 0
For i = 0 To J - 1  'Loops for each value in SemifinalData
    L = 0
    For K = 0 To J - 1    'Second loop for each value in SemifinalData
        If SemiFinalData(i, 2) = FinalData(K, 2) Then 'Counter for Duplication Test
            L = L + 1
        End If
    Next K
    If L < 1 Then    'Tests for Duplication and Extracts Data to FinalData Array
        FinalData(M, 1) = SemiFinalData(i, 1)
        FinalData(M, 2) = SemiFinalData(i, 2)
        M = M + 1
    End If
Next i

For i = 0 To M - 1
    Temp = 0
    For K = 0 To J - 1
        If FinalData(i, 2) = SemiFinalData(K, 2) Then
            Temp = Temp + SemiFinalData(K, 0)
        End If
    Next K
    FinalData(i, 0) = Temp
Next i





Set OutputData = Application.InputBox(prompt:="Select the first Cell of Output Range (for Qty)", Type:=8)
R1F = OutputData.Row
C1F = OutputData.Column  'Gets Row/Column for Start of Output Range

For K = 0 To 2
    Cells(R1F, C1F + K).Select
    For i = 0 To M - 1
        Selection = FinalData(i, K)
        ActiveCell.Offset(1, 0).Range("A1").Select  'Writes Data to Sheet
    Next i
Next K


End Sub

基本上我正在努力处理第一个列表中同一行的3种类型的数据,以及在第二张表单上将它们分成各自行的最佳方法。

1 个答案:

答案 0 :(得分:0)

您可能想看一下使用情况 Worksheets().range().AdvancedFilter(....) 这可以帮助您更轻松地选择您正在寻找的数据。 Check the office vba reference for more details.