2009-11-09 55 views
1

我有两个Excel工作表。第一个有一些数据。第二个更新了数据,应该用来更改第一个表单上的特定信息。在Excel中选择特定的单元格

例如:如果我有(在第一张)雇员工资和他的编号,并在第二张也。我想编写代码在第二张表中找到雇员编号,并根据第二张表中所列的工资更改工资。

回答

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

必须是= VLOOKUP(B2; Sheet2!B:C; 2; FALSE)...您想要返回第二列;如果要将公式转换为值,请将它们全部复制(ctrl-C),然后粘贴特殊/粘贴值以去除可能令人不安的外部文件的链接,特别是如果您要转发此文件给其他用户 – MikeD 2009-11-09 14:01:58

+0

当然是哎呀。 :)谢谢,纠正。 – Tomalak 2009-11-09 14:22:35

+0

我几乎总是检查以确保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

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 

或者你可以遍历细胞(我会避免这一个,如果可能的,虽然,它可以是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 
0

如果员工数不会在第二片进行排序,也可以结合使用MATCH搭配指数:

使用托默勒格的例子,形式乌拉为[ⅩⅩⅩⅩ]将是:

= INDEX(Sheet 2中C:℃; MATCH(B2; Sheet 2中B:!B; 0)

在效果上,MATCH语句查找在列B中的行工作表2,其中有员工ID(B2)的完全匹配。 INDEX然后将这个值存入新工资存储单2的C栏的偏移量。

相关问题