我有一张包含多张纸的单词本。我有一张名为“Info”的表,其中包含数百行员工。每个员工在B栏中分配一个员工编号;行的其余部分(24列)包含员工的其余个人信息。 我有另一张名为“数据”的表格,只需要一组20到40人,每天都有所不同 我希望能够将一个员工编号(例如:SN124523)输入到名为“数据”的工作表B列中的空单元格中。然后,我希望行的其余部分使用“信息”表中的员工信息自行填充。 我需要与最多40名员工进行此操作,因此无论我在“数据”表单的B列中选择哪个单元格,我都希望在导入信息时搜索“信息”表。 我使用VLOOKUP公式进行了这项工作,但是因为有多少人有时会使用这本书而且我有时必须删除并替换“info”表,我总是在公式中出现#REF错误。
我试过这样的事情只是为了几行数据作为试验,但我无法得到任何工作。
Sub Add_member()
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim iRow, row_count As Long
Set ws = Worksheets("Info")
Set ws1 = Worksheets("Data")
row_count = ws.Range("B" & Rows.Count).End(xlUp).Row
For iRow = 2 To row_count
If ws1.Cells(iRow, 2) = ws.Cells(iRow, 2) Then
ws1.Cells(iRow, 4).Value = ws.Cells(iRow, 4).Value
ws1.Cells(iRow, 5).Value = ws.Cells(iRow, 5).Value
‘ I would need this to fill 24 columns in total.
End If
Next
End Sub
任何帮助都得到了很多赞赏。
答案 0 :(得分:0)
未测试:
Sub Add_member()
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim f As Range, c As Range, rng As Range
Set ws = Worksheets("Info")
Set ws1 = Worksheets("Data")
Set rng = ws1.Range("B2", ws1.Cells(Rows.Count, 2).End(xlUp))
For Each c In rng.Cells
If Len(c.Value) > 0 Then
Set f = ws.Columns(2).Find(what:=c.Value, LookIn:=xlValues, _
lookat:=xlWhole)
If Not f Is Nothing Then
c.Offset(0, 2).Resize(1, 24).Value = _
f.Offset(0, 2).Resize(1, 24).Value
End If
End If
Next
End Sub
答案 1 :(得分:0)
在这种情况下,我会使用Event_Handler
。因此,当您输入数字时,数据会自动为您更新。
假设B1
是单元格,您将输入要查找的数字。
将以下代码发布到WorkSheet module
,输入一个数字,并在第1行显示该数字的数据
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fCell As Range
Dim rng As Range
Application.EnableEvents = 0
Set ws = Worksheets("Info")
If Not Intersect(Target, Range("B1")) Is Nothing Then
Set fCell = ws.Range("B2:B1000").Find(What:=Target, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not fCell Is Nothing Then
Target.Resize(, 24).Value = fCell.Resize(, 24).Value
Else
MsgBox "No number exists."
Range("B1:Y1").ClearContents
End If
End If
Application.EnableEvents = 1
End Sub
答案 2 :(得分:0)
假设
员工编号是一个字符串(如“SN124523”)
至少有一个员工编号
员工编号在表格“数据”栏B的连续范围内输入(即他们之间的空白)
然后你可以使用
Sub Add_member()
Worksheets("Data").Columns(2).SpecialCells(xlCellTypeConstants, xlTextValues).offset(, 2).Resize(, 24).FormulaR1C1 = "=Vlookup(RC2,Info!C2:C27,column()-1)"
End Sub
或,如果你想摆脱公式:
Sub Add_member()
With Worksheets("Data").Columns(2).SpecialCells(xlCellTypeConstants, xlTextValues).offset(, 2).Resize(, 24)
.FormulaR1C1 = "=Vlookup(RC2,Info!C2:C27,column()-1)"
.value = .value
End With
End Sub
当然可以删除所有上述假设,并相应地更改代码。
但上面的那个只是为了显示最短的