VBA:根据单元格值过滤数据并填写到另一张表

时间:2018-07-28 11:27:49

标签: vba excel-vba

enter image description here我有两个Excel工作表(“记录”)和(“注册”),“注册”是数据库。从这个数据库中,我需要根据每个员工的员工ID(单元格值)创建记录。我正在搜索应该为我提供培训的VBA代码。一旦我在单元格中输入了他们的ID,然后单击“命令按钮”,就记录每个雇员。随附Excel屏幕供参考。

步骤1:在“记录”表中输入员工ID 步骤2:在记录表中单击命令按钮“过滤器” 步骤3:运行和过滤“注册”中的数据并填写“记录”的VBA代码。

如果我在“记录”表中键入另一个员工ID,则它应清除上一个查询的Contents。并产生数据。

请帮助我,我在VBA中表现不好。 >

Sub Button2_Click()

'Declare the variables
Dim RegisterSh As Worksheet
Dim RecordSh As Worksheet
Dim EmployeeRange As Range
Dim rCell As Range
Dim i As Long

'Set the variables
Set RegisterSh = ThisWorkbook.Sheets("Register")
Set RecordSh = ThisWorkbook.Sheets("Record")

'Clear old data Record Sheet
RecordSh.Range("A8:F107").ClearContents

Set EmployeeRange = RegisterSh.Range(RegisterSh.Cells(6, 4), RegisterSh.Cells(Rows.Count, 6).End(xlUp))
'I went from the cell row6/column4 (or D6) and go down until the last non empty cell

i = 7

For Each rCell In EmployeeRange 'loop through each cell in the range

If rCell = RecordSh.Cells(4, 2) Then 'check if the cell is equal to "Record"

i = i + 1                                'Row number (+1 everytime I found another "Record")
RecordSh.Cells(i, 1) = i - 7               'S No.
RecordSh.Cells(i, 2) = rCell.Offset(0, 2)  'Training name
RecordSh.Cells(i, 3) = rCell.Offset(0, -2) 'End date
RecordSh.Cells(i, 4) = rCell.Offset(0, 6) 'Validity
RecordSh.Cells(i, 5) = rCell.Offset(0, 7) 'Remarks
RecordSh.Cells(i, 6) = rCell.Offset(0, 5) 'Minimal requirement

End If

Next rCell

End Sub

1 个答案:

答案 0 :(得分:1)

您的代码缺少一些您可能需要研究的基本部分:

  1. 似乎需要用户在启动宏之前选择特定的行,即使有一个命令按钮可以触发宏。如果布局保持不变,只需使用常量来存储某些输入或查找字段所在的行。
  2. 在输入表单和查找表上均使用
  3. ra。这就麻烦了...再一次,请使用常量或至少使用“ StartingRow = 3”或类似名称。
  4. 您正在将您的员工编号更正为不适合屏幕截图中提供的数据的格式。希望这只是一个虚拟数据问题,但万一您想知道为什么找不到任何东西;)
  5. 您正在逐个键入所有字段。如果您的布局始终相同,则对所有单元格值使用“变体”类型并确保已正确设置所有列的格式会容易得多。
  6. ru从未初始化?它应该是“下一行”,为什么不直接使用“ ra + 1”代替ru?另外,TRNRow和RTRNRow也不会初始化。
  7. “搜索”记录时,实际上只将同一行复制到结果中,然后“复制下一行直到员工编号错误”。因此,这仅适用于一名员工,即使如此,您也只能参加前几期培训。使用记录表中员工编号单元格上的“查找”功能查找具有该ID的下一行,然后复制该行的内容并查找下一个。

我认为,如果您熟悉Find函数,则可以轻松地自己完成此宏。这是一个很好的指南:https://excelmacromastery.com/excel-vba-find

祝你好运!

相关问题