excel - 如何使用员工 ID 作为标识符将多个工作表中的数据复制到一个工作表中
问题描述
我对 Excel 和宏很陌生。
我有一个文件,其中员工数据分散在同一个文件中的多个工作表中。我想在以“数据源 1”表开头的每个表中搜索员工编号,并将每行中的所有数据与员工 ID 复制到“组合数据”表中。
接下来,我想在工作表“数据源 2”中搜索相同的员工 ID,并将信息复制到指定列中的“组合工作表”,如果信息不可用,则在“数据源 3”中搜索相同的员工 ID,并将数据复制到组合仅在指定列中再次工作表。
如果它不存在,则再次循环从“数据源 1”表中搜索新员工 ID 开始。
我被卡住了,无法理解如何继续前进。
当前使用的代码:
Sub Search_cell()
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
On Error GoTo Err_Execute
'Start search in row 3
LSearchRow = 3
'Start copying data to row 2 in Sheet Combined_data (row counter variable)
LCopyToRow = 2
Sheets("Data source 1").Select
While Len(Range("A" & CStr(LSearchRow)).Value) > 0
'If value in column A = "123", copy entire row to sheet Combined_data
If Range("A" & CStr(LSearchRow)).Value = "123" Then
'Select row in Sheet Data Source 1 to copy
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'Paste row into Sheet Combined_data in next row
Sheets("Combined_data").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
ActiveSheet.Paste
'Move counter to next row
LCopyToRow = LCopyToRow + 1
'Go back to Sheet1 to continue searching
Sheets("Data source 1").Select
End If
LSearchRow = LSearchRow + 1
Wend
'Position on cell A3
Application.CutCopyMode = False
Range("A3").Select
MsgBox "All matching data has been copied."
Exit Sub
Err_Execute:
MsgBox "An error occurred."
End Sub
问题 :
我必须手动提供要搜索的 Ideantifier 示例“123”,我希望它直接通过转到工作表“数据源 1”中的下一行来获取
此代码复制并粘贴发生匹配的整行数据,而不是将数据从工作表“数据源 2”粘贴到“Combined_data”工作表中的 E 列到 H 列。
我不明白如何为工作表数据源 2、数据源 3 复制相同的过程。
解决方案
请尝试以下代码。
还将您的工作表名称从“日期源 1”更正为“数据源 1”
Sub CombineData()
Dim dataRng1 As Range, dataRng2 As Range, dataRng3 As Range
Dim searchRng As Range, lrow As Long, combRng As Range
Set dataRng1 = Worksheets("Data source 1").Range("A3", Worksheets("Data source 1").Range("D" & Rows.Count).End(xlUp))
Set dataRng2 = Worksheets("Data source 2").Range("A3", Worksheets("Data source 2").Range("E" & Rows.Count).End(xlUp))
Set dataRng3 = Worksheets("Data source 3").Range("A3", Worksheets("Data source 3").Range("D" & Rows.Count).End(xlUp))
lrow = Worksheets("Combined").Range("A" & Rows.Count).End(xlUp).Row
Set searchRng = Worksheets("Combined").Range("A2", Worksheets("Combined").Range("A2").End(xlDown))
Set combRng = Worksheets("Combined").Range("A3", Worksheets("Combined").Range("K" & lrow))
combRng.Cells.Clear
Dim rw As Range, destRow As Long
For Each rw In dataRng1.Rows
rw.Copy Worksheets("Combined").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Next rw
For Each rw In dataRng2.Rows
If Not searchRng.Find(What:=rw.Cells(1, 1).Value, LookAt:=xlWhole) Is Nothing Then
destRow = searchRng.Find(What:=rw.Cells(1, 1).Value, LookAt:=xlWhole).Row
rw.Offset(0, 1).Resize(, rw.Columns.Count - 1).Copy Worksheets("Combined").Range("E" & destRow, "H" & destRow)
End If
Next rw
For Each rw In dataRng3.Rows
If Not searchRng.Find(What:=rw.Cells(1, 1).Value, LookAt:=xlWhole) Is Nothing Then
destRow = searchRng.Find(What:=rw.Cells(1, 1).Value, LookAt:=xlWhole).Row
rw.Offset(0, 1).Resize(, rw.Columns.Count - 1).Copy Worksheets("Combined").Range("I" & destRow, "K" & destRow)
End If
Next rw
End Sub
推荐阅读
- ios - 在 Xcode 中的其他对象之间居中一组对象
- ruby - 删除/替换字符串中保留或无效的 url 字符
- google-bigquery - 如何将大查询表中的数据加载到其他数据库?(DB2)
- android - 如何在三个不同的活动中使用一个片段
- java - IntelliJ 升级后 Jar 文件不运行
- c# - 当不同的线程和库变量更改时更新 C# WPF GUI
- python - 多处理 python 包是否适用于 Google Cloud ml-engine?
- javascript - 在javascript中检索深度嵌套的对象时不使用两次查找
- r - 通过 R 使用 Linux Azure DSVM 进行 SSH 公钥身份验证
- python - python 的 dict .get() 方法如何检查默认参数?