VBA 中的 VLookup 函数 - Return 基于名称值的部门值
VLookup function in VBA - Return a department value based on name value
我正在寻找 return 基于名称值的部门值。名单是从第三方供应商导入的,每次都会随机排序,所以我无法将部门值设置到指定的单元格。我有一系列数据 (dim rng),其中有一个名称和 A 列以及 B 列中的一个部门。我希望与该名称关联的部门在新的 [=16] 上使用相同的 returned =].我已附上我的代码,但出现应用程序定义或对象定义的错误,我不确定为什么。
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
您似乎缺少一些代码来尝试实现您想要的内容,因此以下部分内容是假设。
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
根据您对问题的描述和您要解决的问题,我相信以下代码应该可以正常工作。
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里加了,这样范围地址就会指向正确的sheet(带单引号,以防 sheet 名称中包含 space。
注意事项:按照这种编码方式,方程式将插入代码 运行 时处于活动状态的 sheet 中的任何一个。这意味着如果 Sheet1
处于活动状态,部门将被循环公式覆盖。
我正在寻找 return 基于名称值的部门值。名单是从第三方供应商导入的,每次都会随机排序,所以我无法将部门值设置到指定的单元格。我有一系列数据 (dim rng),其中有一个名称和 A 列以及 B 列中的一个部门。我希望与该名称关联的部门在新的 [=16] 上使用相同的 returned =].我已附上我的代码,但出现应用程序定义或对象定义的错误,我不确定为什么。
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
您似乎缺少一些代码来尝试实现您想要的内容,因此以下部分内容是假设。
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
根据您对问题的描述和您要解决的问题,我相信以下代码应该可以正常工作。
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里加了,这样范围地址就会指向正确的sheet(带单引号,以防 sheet 名称中包含 space。
注意事项:按照这种编码方式,方程式将插入代码 运行 时处于活动状态的 sheet 中的任何一个。这意味着如果 Sheet1
处于活动状态,部门将被循环公式覆盖。