2012-11-05 136 views
2

我不知道这是可能的,但我已被告知,张贴在这里和一个答案最有可能的地方。重命名细胞在Excel

我有四列在Excel如下

A: all product id's 
B: reference No. 
C: selected product id's 
D: product codes. 

我想的Excel做的是搜索栏出用于ID的列C,如果有匹配,它重命名为相应的行在列D中搜索的列D中。由于列A中的产品ID可能重复多达8次,因此我无法轻松使用vlookup。

我希望是有道理的,我会尽量回答所有的问题,我可以。我对excel一无所知,除了基础知识之外,如果任何人都能对此有所了解,我将不胜感激。

+0

是宏观的允许? – CustomX

回答

1

试试这个:

A之前插入一个新列。所以,现在所有的列都转移了一个,即你的A现在B

现在小区A1(新插入的A1,不是你原来的A1现在是B1

=VLOOKUP(B1, $D$1:$E$1000, 2, 0) 

其中1000无论你最后一排是什么。然后拖下公式。

您还没有指定如果一个ID在山坳A,但不是在山坳C会发生什么。如果你想让它仅仅停留什么是胶原A然后用这个公式来代替:

=IF(ISNA(VLOOKUP(B1, $D$1:$E$1000, 2, 0)), B1, VLOOKUP(B1, $D$1:$E$1000, 2, 0)) 
+0

谢谢丹,它适用于第一列,但其他人只是拿出#N/A在其中。有任何想法吗。 – Graeme

+0

我已经找出了为什么,但不知道如何解决它。当我将其复制下来时,它将D1:E1000更改为D2:E1001,并在查看其上方的单元格时错过了。我需要D1:E1000保持原样,不会在复制数据时改变数字。 – Graeme

+0

标记应保持不变的范围,如下所示:'$ D $ 1:$ E $ 1000'。现在在别处复制时不会改变。 –

0

这应该做的伎俩:

Sub test() 

LastRowA = Cells(Rows.Count, "A").End(xlUp).Row 
LastRowC = Cells(Rows.Count, "C").End(xlUp).Row 

For i = 1 To LastRowA 
    For j = 1 To LastRowC 
     If Range("A" & i).Value = Range("C" & j).Value Then 
      Range("D" & i).Value = Range("C" & j).Address(False, False) 
     End If 
    Next j 
Next i 

End Sub 
+0

这个宏是非常不必要的。如果这确实给出了正确的答案(与我对问题的解释完全不同),那么你可以把这个公式放在Col D:= MATCH(A1,$ C $ 1:$ C $ 1000,0)或=“C”&MATCH (A2,$ C $ 1:$ C $ 8,0),如果你想要字母“C”。 – Dan

+0

@丹,你有没有测试过?它将检查A1中的值,将其与C中的值相匹配,并且在D1中您将得到C中值的位置。 – CustomX

+0

我测试过了,是的。两人都给了我相同的结果。你有不同的结果吗?我的公式确实如你所描述的那样,匹配返回数组中第一行开始的位置与行号相同。但是我发现我在第二个公式中使用了A2而不是A1,尽管如此,我的不好。 – Dan

0

所以你的数据是这样的?我不明白你的预期结果是什么?

A B C D expected result 
1 101 1 201 ? 
1 102 4 204 
2 103 
3 104 
3 105 
4 106 
+0

您还可以在E列中看到数字。然后,如果B与D中的一个数字相匹配,那么A列将显示E列中与D列匹配相同的行中的数字。 – Graeme