我有两个Excel工作表。第一个有一些数据。第二个更新了数据,应该用来更改第一个表单上的特定信息。在Excel中选择特定的单元格
例如:如果我有(在第一张)雇员工资和他的编号,并在第二张也。我想编写代码在第二张表中找到雇员编号,并根据第二张表中所列的工资更改工资。
我有两个Excel工作表。第一个有一些数据。第二个更新了数据,应该用来更改第一个表单上的特定信息。在Excel中选择特定的单元格
例如:如果我有(在第一张)雇员工资和他的编号,并在第二张也。我想编写代码在第二张表中找到雇员编号,并根据第二张表中所列的工资更改工资。
你不需要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()了解更多详情。
你可以使用.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
或者你可以遍历细胞(我会避免这一个,如果可能的,虽然,它可以是V慢,如果你不关闭屏幕更新和自动计算)
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
如果员工数不会在第二片进行排序,也可以结合使用MATCH搭配指数:
使用托默勒格的例子,形式乌拉为[ⅩⅩⅩⅩ]将是:
= INDEX(Sheet 2中C:℃; MATCH(B2; Sheet 2中B:!B; 0)
在效果上,MATCH语句查找在列B中的行工作表2,其中有员工ID(B2)的完全匹配。 INDEX然后将这个值存入新工资存储单2的C栏的偏移量。
必须是= VLOOKUP(B2; Sheet2!B:C; 2; FALSE)...您想要返回第二列;如果要将公式转换为值,请将它们全部复制(ctrl-C),然后粘贴特殊/粘贴值以去除可能令人不安的外部文件的链接,特别是如果您要转发此文件给其他用户 – MikeD 2009-11-09 14:01:58
当然是哎呀。 :)谢谢,纠正。 – Tomalak 2009-11-09 14:22:35
我几乎总是检查以确保VLOOKUP找到一个值,否则会返回一个错误。 = IF(ISERROR(VLOOKUP(B2,Sheet2!B:C,2,False)),“NOT FOUND”,VLOOKUP(B2,Sheet2!B:C,2,False)) 此外,如果您只想要完全匹配,请确保在每个表中映射到唯一值,并始终使用False作为VLOOKUP的最后一个参数。如果你不使用False,它会寻找最接近的匹配。 – 2009-11-10 06:17:56