循环遍历列中的每个单元格,将每个单元格与列表进行比较,并在相邻单元格中输入关联的描述

时间:2016-09-29 16:59:53

标签: excel vba loops

目标:遍历一列Numbers / Codes并将这些代码与其描述匹配(在列表中),并使用相关描述填充下一列中的单元格。例如:A2 = 123456,A3 = 885467,A4 = 954789等等...读入第一个单元格A2(123456)。在列表中找到123456(123456 =财务),地点"财务"在B2。阅读885467(A3)。在列表中找到(885467 =营销),地点"营销"在B3 ......等等。我最接近解决这个问题的是:

Sub JobCodeDescription()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        'There are 3 worksheets in this Workbook.
            'Job Code
            'Location Code
            'Entity Code
        'Dim x As Number
        Dim f As Range
        For Each f In ActiveSheet.UsedRange.Columns("F").Cells
            If f = "00053" Then ActiveCell.Offset(0, 1).Value = "Finance"
            ElseIf f = "00056" Then ActiveCell.Offset(0, 1).Value = "Marketing"
            ElseIf f = "00082" Then ActiveCell.Offset(0, 1).Value = "Technology"
            ' continues on...
        Next f
        ' This works but the Active Cell DOES NOT move with "f". So the same cell continues to be populated and overwritten.
    Next ws
End Sub

这些代码永远不会以任何特定顺序出现在我身上,并且会有重复,所以我尝试按升序排序。这似乎有所帮助,但我无法弄清楚通过作业代码的循环,并循环遍历列表以找到匹配的代码描述。我可能会把这一切都搞错了。我想将A列中的代码与平面文件进行比较,但我不知道该怎么做。 " Flat-File"只是一个.txt文件,它是工作代码及其描述的列表。示例:123456 =财务。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

根据您的描述,如果我理解正确,我认为您最好使用Vlookup(),因为它是内置函数,不需要宏。

如果您的数据表位于J1:K4,并且您的帐户列表位于A1:A4,则可以在B1中使用以下公式,然后向下复制:

=VLOOKUP(A1,$J$1:$K$4,2,FALSE)

这会在范围J1:J4中搜索A1中的值,然后在K列中返回匹配值:

enter image description here

但是,如果你想使用你的宏,@ TomasInzina是正确的,你需要使用f.Offset(...)而不是ActiveCell.Offset(...)