首页 > 解决方案 > 搜索唯一编号并将其特定数据复制到另一张工作表

问题描述

我有一本包含三张纸的工作簿。

在名为“Grade Wise”的第二张表上,我有原始数据。

在名为“Sheet1”的第三张工作表上,我想要一个按钮,它将数据从第二张工作表复制到第三张工作表。

在第二张纸上,在 A 列和 B 列中重复数据。这些农民提供了不同重量的不同等级。

我想将每个农民的唯一农民编号和名称(A 列和 B 列)数据复制到第三张表(如附图所示)。

在第二张表中,C 列有不同的等级,其起始字母为 X、C、M、B,第三个字母也包括 A、F、C。

挑战 1:我想将所有 X 的总和复制到 X(在第三张表 D 列上)、所有 C 到 C 的总和(在第三张表 E 列上)、所有 M 到 M 的总和(在第三张表 F 列上)和总和每个唯一编号的所有 B 到 B (在第 3 页 G 列上) - 如附图所示。

(VBA 代码是为这个挑战编写的并且正在工作,但我想添加以下操作)

挑战 2:它还应该寻找第三个字母(A、F、C)并将它们的所有 A 的总和复制到 A(在第三张表 N 列上)、所有 F 到 F 的总和(在第三张表列 O)、总和所有 C 到 C(在第 3 页 P 列),如附图所示。

挑战 1 代码是:

Sub test2()
Dim c As Object ' Dictionary
Dim Ws As Worksheet
Dim toWs As Worksheet
Dim vDB, vNum(), vR()
Dim k As Long, i As Long
Dim x As Long, y As Long
Dim s As String

Set Ws = Sheets(2)
Set toWs = Sheets(3)

Set c = CreateObject("Scripting.Dictionary")

vDB = Ws.Range("a1").CurrentRegion

For i = 2 To UBound(vDB, 1)
    If Not c.Exists(vDB(i, 1)) Then 'Farmer NO.
        k = k + 1
        c.Add vDB(i, 1), k 'Farmer NO.
        ReDim Preserve vNum(1 To 3, 1 To k)
        vNum(1, k) = k
        vNum(2, k) = vDB(i, 1)
        vNum(3, k) = vDB(i, 2)
    End If
Next i
ReDim vR(1 To k, 1 To 10)
For i = 2 To UBound(vDB, 1)
    s = Left(vDB(i, 3), 1)
    y = c.Item(vDB(i, 1)) 'Farmer no
    x = getIndex(s)
    vR(y, x) = vR(y, x) + vDB(i, 4) 'Bales
    vR(y, 5) = vR(y, 5) + vDB(i, 4) 'Sum of Bales
    vR(y, x + 5) = vR(y, x + 5) + vDB(i, 5) 'New Weight
    vR(y, 10) = vR(y, 10) + vDB(i, 5) 'Sum of Weight
Next i

With toWs
    .UsedRange.Offset(2).Clear
    .Range("a3").Resize(k, 3) = WorksheetFunction.Transpose(vNum)
    .Range("d3").Resize(k, 10) = vR
    .UsedRange.Borders.LineStyle = xlContinuous
End With
End Sub


Function getIndex(v As String)
    Dim i As Integer
    Select Case v
    Case "X"
        i = 1
    Case "C"
        i = 2
    Case "M"
        i = 3
    Case "B"
        i = 4
    End Select
    getIndex = i
End Function

样本数据图片
在此处输入图像描述

标签: excelvba

解决方案


使用 Vlookup 填充前两列 Farmer No.(使用高级过滤器从数据中选择唯一值)和 Farmer Name 后,一个简单的公式就足够了。然后,您只需要一个公式=SUMIFS($C$2:$C$18,$A$2:$A$18,$E2,$B$2:$B$18,F$1&"*"),然后您就可以将其复制下来。

见图片。

在此处输入图像描述

如果您担心为新客户的新条目自动执行此操作,您可以简单地在包含 FarmerNo 的同一工作簿中维护一个主表。和名称。在输入数据之前,您只需要检查农民是否在主人中。您可以使用重复名称的简单条件格式来做到这一点。如果这样做,您甚至可以取消数据中的名称列或 Sheet3 中的农民编号 col


推荐阅读