可以使用VBA编写一个宏来按照指定字段批量提取工作表中的信息,并将提取的内容填入指定的工作表中。下面是一个简单的示例代码:
Sub ExtractData()
Dim wsSrc As Worksheet, wsDest As Worksheet
Dim rngSrc As Range, rngDest As Range
Dim cel As Range, celHeader As Range
Dim lastRow As Long, i As Long
Dim dict As Object
' 设置源表和目标表
Set wsSrc = ThisWorkbook.Sheets("表1")
Set wsDest = ThisWorkbook.Sheets("表2")
' 获取源表的数据范围
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
Set rngSrc = wsSrc.Range("A1:F" & lastRow)
' 获取目标表的表头范围
Set celHeader = wsDest.Range("A1")
' 创建字典来存储提取的数据
Set dict = CreateObject("Scripting.Dictionary")
' 遍历源表的每一行数据
For i = 2 To lastRow
Set cel = rngSrc.Cells(i, "B") ' 根据关键字段提取数据
If Not dict.Exists(cel.Value) Then
' 如果字典中不存在该关键字段,则创建一个新的项
dict(cel.Value) = New Collection
End If
' 将该行数据添加到关键字段对应的集合中
dict(cel.Value).Add rngSrc.Rows(i).Value
Next i
' 遍历目标表的每个表头单元格,并按照关键字段提取对应的数据
For Each celHeader In wsDest.Range("A1:F1").Cells
If dict.Exists(celHeader.Value) Then
' 如果字典中存在该关键字段,则将对应的数据填入目标表
Set rngDest = celHeader.Offset(1, 0).Resize(dict(celHeader.Value).Count, rngSrc.Columns.Count)
rngDest.Value = CollectionToArray(dict(celHeader.Value))
End If
Next celHeader
End Sub
Function CollectionToArray(col As Collection) As Variant()
Dim arr() As Variant
Dim i As Long
ReDim arr(1 To col.Count, 1 To col(1).Count)
For i = 1 To col.Count
arr(i, 1) = col(i)(1)
arr(i, 2) = col(i)(2)
arr(i, 3) = col(i)(3)
arr(i, 4) = col(i)(4)
arr(i, 5) = col(i)(5)
arr(i, 6) = col(i)(6)
Next i
CollectionToArray = arr
End Function
答案来自 我点评开发社区 https://www.wodianping.com/
此宏将根据表1中的“B”列中的关键字段提取数据,并将提取的数据填入表2中相应的表头中。请根据实际情况修改代码中的工作表名称和列号。