基于映射表的 VBA 宏更新单元

for*_*o19 1 macros excel vba

我正在尝试根据另一个文档上的映射表更新列表中的单元格。每个月,我都会收到一份需要执行此操作的清单。映射表将是不变的,但源数据会改变,所以我会有这样的东西

Column A  Column B
Name      Description
Test1     Test for SO
Test2     Test2 for SO
...
Test100   Test100 for SO
Run Code Online (Sandbox Code Playgroud)

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

Column A    Column B 
Name        Real Name
Test1       Fund1
Test2       Fund2
...
Test100     Fund100
Run Code Online (Sandbox Code Playgroud)

基本上,数据选项卡(第一张表)的最终输出将是:

Column A    Column B
Name        Description
Fund1       Test for SO
Fund2       Test2 for SO
...
Fund100     Test100 for SO
Run Code Online (Sandbox Code Playgroud)

提前致谢。我已将两张表中 A 列的范围命名为列,但我真的不知道什么函数允许执行此操作?我开始为每个陈述做一些事情,但被难住了。

man*_*anu 5

你可以试试这个:

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
Run Code Online (Sandbox Code Playgroud)