我希望根据名称值返回部门值。名称列表是从第三方供应商处导入的,第三方供应商会每次随机化订单,因此我无法将部门值设置为指定的单元格。我有一系列的数据(dim rng),其中有一个名称和A列,在B列中有一个部门。我希望与名称相关联的部门在新工作表上返回相同的名称。我已经附加了代码,但是出现应用程序定义或对象定义的错误,我不确定为什么。
Sub find()
Dim namerng As Range
Dim rng As Range
Dim depti As Integer
Dim dept As String
Set namerng = Range("A1:A250") 'range of names
Set rng = Sheet1.Range("A1:B250") 'range of names in col A and dept in col B
For depti = 3 To 250
dept = "=IfError(Vlookup(namerng,rng,2,FALSE), "")"
Range("B" & depti) = dept
Next
End Sub
答案 0 :(得分:0)
您似乎缺少一些代码来尝试实现所需的功能,因此以下内容是一个假设。
Sub find()
Dim namerng As Range 'List of Randomly Organized Names Only
Dim Lookuprng As Range 'List of Names and Departments
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ThisWorkbook.Worksheets(1) 'List of Randomly Organized Names Only
Set sh2 = ThisWorkbook.Worksheets(2) 'List of Names and Departments
'List of Names and Departments
sh1.Activate
Set Lookuprng = sh1.Range(Cells(1, 1), (Cells(Rows.Count, 2).End(xlUp)))
'List of Randomly Organized Names Only ******NEED TO SPECIFY WHERE THESE NAMES ARE COMING FROM, I used Sheet1
sh2.Activate
Set namerng = sh2.Range(Cells(1, 1), (Cells(Rows.Count, 1).End(xlUp)))
'Put correct department with name
namerng.Offset(0, 1) = Application.VLookup(namerng, Lookuprng, 2, False)
End Sub
答案 1 :(得分:0)
根据您对问题的描述和要解决的问题,我认为以下代码应根据需要工作。
Sub find()
Dim rng As Range
Dim depti As Integer
Dim dept As String
Set rng = Sheet1.Range("A1:B250") 'range of names in col A and dept in col B
For depti = 3 To 250
dept = "=IfError(Vlookup(A" & depti & ",'" & Sheet1.Name & "'!" & rng.Address & ",2,FALSE), """")"
Range("B" & depti) = dept
Next
End Sub
注释
我消除了namerng
变量,因为更新的方程式不需要它。由于VLookup仅将单个值用作第一个参数,因此该值应取决于循环变量的值,与目标范围相同。
我还对引号进行了转义,以便该函数有效,并将其添加到sheet1.name中,以便范围地址将指向正确的工作表(使用单引号,以防工作表名称包含里面有空格)。
警告:该代码的编码方式是,在运行代码时,公式将插入到处于活动状态的工作表上。这意味着如果Sheet1
处于活动状态,部门将被循环公式覆盖。