我有两张Excel表格。第一个有一些数据。第二个已更新数据,应该用于更改第一张表上的特定信息。
例如:如果我(在第一张表格中)有员工工资和他的号码,也在第二张表中。我想编写代码,在第二张表中找到员工编号,并根据第二张表中规定的工资更改工资。
答案 0 :(得分:4)
您不需要VBA,可以通过简单的单元格函数来完成:VLOOKUP()
。
Sheet 1中:
A B C D 1 Name No. Wage NewWage --------------------------------- 2 Adam 111 1000.00 [xxxx] 3 Brad 222 1300.00 4 Charly 333 2000.00
Sheet 2中:
A B C 1 Name No. Wage ----------------------- 2 Adam 111 1100.00 3 Brad 222 1400.00 4 Charly 333 2100.00
[xxxx]
的公式为:
=VLOOKUP(B2;Sheet2!B:C;2;FALSE)
这会从第二张表中查找每个人的新工资。填写公式。
确保Sheet2中的值按员工编号排序,否则VLOOKUP()
将找不到它们。请仔细阅读the help page for VLOOKUP()。
答案 1 :(得分:0)
你可以使用.find:
dim findHere as Range
dim result as Range
set findHere = Sheet2.Range("A:A")
set result = findHere.Find("EmployeeCode")
if not result is nothing 'you get 'nothing' back if it can't find it.
result.offset(0, 2).Value = "New Wage Here"
end if
或者你可以遍历单元格(如果可能的话,我会避免使用这个单元格,如果不禁用屏幕更新和自动计算,它可能会很慢)
Dim r as Range
dim finished as boolean
set r = Sheet1.Range("A1")
do
if r.Value = <ID> finished = true
while not unfinished
' do stuff with r
答案 2 :(得分:0)
如果员工编号不会在第二张表中排序,您也可以将MATCH与INDEX结合使用:
使用Tomalak的例子,[xxxx]的公式为:
= INDEX(Sheet 2中C:℃; MATCH(B2; Sheet 2中B:!B; 0)
实际上,MATCH语句在工作表2的B列中找到与员工ID完全匹配的行(B2)。然后,INDEX将此偏移到表2的C列中,其中存储了新工资。