首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用公式填充另一个满足某些条件的工作表的数据

使用公式填充另一个满足某些条件的工作表的数据
EN

Stack Overflow用户
提问于 2017-12-10 13:54:08
回答 1查看 53关注 0票数 0

下面是我试图在excel中不使用VBA所做的事情的描述:

假设您有一些数据,如下面Sheet1中的图像所示。

链接到Sheet1图像(主要数据)

如果上面的链接不起作用,下面是sheet1中的数据:

代码语言:javascript
复制
ProductionDate      ProductionLine    ProductCode    ProductName   ProductionQuantity  
1/5/2017            A                 805            AA            100  
1/5/2017            B                 912            BB            50  
13/6/17             A                 916            CC            250  
15/6/17             B                 805            AA            150  
23/6/17             B                 535            DD            50  
2/9/2017            B                 916            CC            200   
12/9/2017           A                 916            CC            200  
27/09/17            A                 805            AA            200

在Sheet2中,我需要按生产线获得每个产品的生产量,也需要该产品的总生产量(所有生产线的生产量之和)。这意味着我需要在sheet2中得到的结果类似于下面的图像。

链接到Sheet2图像(我正在寻找结果)

如果上面的链接不起作用,下面是我在Sheet2中寻找的结果

代码语言:javascript
复制
ProductCode     ProductName     ProductionLine  ProducedQuantityByLine  TotalQuanity
535             DD              B               50                      50
805             AA              A               300                     450
805             AA              B               150                     450
912             BB              B               50                      50
916             CC              A               450                     650
916             CC              B               200                     650

我真的需要知道怎么做。我需要一些公式来为Sheet2中的每个产品代码自动填充Sheet1。我不能手动输入Productode,因为真实的数量和范围很大(假设1000个产品代码)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-10 16:36:06

下面的代码粘贴在一个模块中,应该可以满足您的需要。不过,也有一些注释和注意事项。

  1. 代码假定两个工作表名为"Sheet1“和"Sheet2”
  2. 代码假定要处理的数据位于"Sheet1“中,并以单元格"A2”开头。
  3. 代码假定结果将写入"Sheet2“,并以"A2”开头。
  4. 代码假定头已经出现在"Sheet2“中。
  5. 代码假定"Sheet2“中除标头外没有其他数据。
  6. 代码假定数据是连续的,即没有空行或空单元格行(特别是在ProductionDate列中)。
  7. 这段代码资源非常多,因为它不断地与工作表本身进行交互,这意味着大型数据集将需要很长时间。在我看来,一个更好的解决方案,但在我看来,也是一个更复杂的解决方案,就是处理数组。这样,代码只读写一次。
代码语言:javascript
复制
Option Explicit

Sub combineAndCopyData()
    Dim wsData As Worksheet, wsResult As Worksheet
    Dim i As Long, j As Long
    Dim blnRecorded As Boolean, blnAdded As Boolean
    Dim lngTotal As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlManual

    Set wsData = ThisWorkbook.Worksheets("Sheet1") 'Substitute Sheet1 for the actual name of your sheet
    Set wsResult = ThisWorkbook.Worksheets("Sheet2") 'Subtitue Sheet2 for the actual name of your sheet

    For i = 2 To wsData.Cells(2, 1).End(xlDown).Row
        blnRecorded = False
        blnAdded = False
        For j = 1 To wsResult.Cells(wsResult.Rows.Count, 1).End(xlUp).Row + 1
            If wsData.Cells(i, 3) = wsResult.Cells(j, 1) And wsData.Cells(i, 2) = wsResult.Cells(j, 3) Then
                wsResult.Cells(j, 4) = wsResult.Cells(j, 4) + wsData.Cells(i, 5)
                blnRecorded = True
            End If
            If wsResult.Cells(j, 1) = Empty And Not blnRecorded Then
                wsResult.Cells(j, 1) = wsData.Cells(i, 3)
                wsResult.Cells(j, 2) = wsData.Cells(i, 4)
                wsResult.Cells(j, 3) = wsData.Cells(i, 2)
                wsResult.Cells(j, 4) = wsData.Cells(i, 5)
                wsResult.Cells(j, 5).Formula = "=SUMIF(A:A," & wsResult.Cells(j, 1).Address & ",D:D)" 'Keep in mind that Excel may require ";" or "," as argument separation.

            End If
        Next
    Next

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

备注

在我最初的回答中,我注意到TotalQuantity on Sheet2没有正确地加起来。上面的代码已经纠正了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47739541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档