2016-02-29 32 views
0

我试图根据另一个文档上的映射表更新列表中的单元格。每个月,我都会得到一份我需要这样做的清单。映射表将是恒定的,但源数据会发生变化,所以我有这样的事情基于映射表的VBA宏更新单元格

Column A Column B 
Name  Description 
Test1  Test for SO 
Test2  Test2 for SO 
... 
Test100 Test100 for SO 

我将有一个相应的映射表,我想宏A列中每个单元格评估针对下面的映射表并更新到映射表第二列中的值(位于不同的工作表上),有没有办法做到这一点?

Column A Column B 
Name  Real Name 
Test1  Fund1 
Test2  Fund2 
... 
Test100  Fund100 

基本上,用于数据片(第一片材)的最终输出将是:预先

Column A Column B 
Name  Description 
Fund1  Test for SO 
Fund2  Test2 for SO 
... 
Fund100  Test100 for SO 

感谢。我已经列出了两列中列A的范围,但我不知道哪些函数可以执行此操作?我开始为每个陈述做一些事情,但被困住了。

+0

是一个单独的表映射表?你不能只使用一个vlookup或匹配+索引? –

+0

我需要它在一个宏中没有创建一个vlookup的新列 – fordo19

回答

2

你可以试试这个:

Option Explicit 

Sub map() 

Dim SourceData As Worksheet: Set SourceData = ThisWorkbook.Sheets("Sheet1") 'Change the name of the sheet 
Dim Mapping As Worksheet: Set Mapping = ThisWorkbook.Sheets("Sheet2") 'Change the name of the sheet 

Dim SourceDataLstr As Long, MappingLstr As Long 
Dim i As Long, j As Long 
Dim RawDataKey As String, MappingKey As String 

SourceDataLstr = SourceData.Range("A" & Rows.Count).End(xlUp).Row 'Find the lastrow in the Source Data Sheet 
MappingLstr = Mapping.Range("A" & Rows.Count).End(xlUp).Row 'Find the lastrow in the Mapping Sheet 

With SourceData 

For i = 2 To SourceDataLstr 

RawDataKey = .Cells(i, "A").Value 

     For j = 2 To MappingLstr 

       MappingKey = Mapping.Cells(j, "A").Value 

       If MappingKey = RawDataKey Then 
        .Cells(i, "A").Value = Mapping.Cells(j, "B").Value 
        Exit For 
       End If 

     Next j 

Next i 

End With 

End Sub 
+0

嗨,感谢您的帮助,我想我可能已经解释了这一点很糟糕,我想要做的更新是SourceData表 - 不是第三张表表Sheet 3)。我可以更新这个以使Sheet1在IF块中更新吗?或者有没有第三张纸的理由? – fordo19

+0

我只是假设你想保留原始数据,看我的编辑 – manu

+0

哇,这太棒了。非常感谢。 – fordo19

相关问题