似乎有一些反對意見,表明你會更好地與另一種解決方案,但這看起來像一個Scripting.Dictionary
對象的理想子,我喜歡與他們一起工作,所以在這裏你去。
Sub create_employee_named_ranges()
Dim n As Long, r As Long, vEMP As Variant
Dim dEMPs As New Scripting.Dictionary
dEMPs.CompareMode = TextCompare
With ActiveSheet
For r = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If Not dEMPs.Exists(.Cells(r, 1).Value) Then
dEMPs.Add Key:=.Cells(r, 1).Value, _
Item:=Chr(39) & .Name & Chr(39) & Chr(33) & .Cells(r, 2).Address
Else
dEMPs.Item(.Cells(r, 1).Value) = _
dEMPs.Item(.Cells(r, 1).Value) & Chr(44) & Chr(39) & .Name & Chr(39) & Chr(33) & .Cells(r, 2).Address
End If
Next r
End With
With ActiveWorkbook
For n = 1 To .Names.Count
If Left(.Names(n).Name, 4) = "enr_" Then _
.Names(n).Delete
Next n
For Each vEMP In dEMPs
.Names.Add Name:="enr_" & Replace(vEMP, Chr(45), Chr(95)), _
RefersTo:=Chr(61) & dEMPs.Item(vEMP)
Next vEMP
End With
dEMPs.RemoveAll: Set dEMPs = Nothing
End Sub
你將不得不進入VBE的工具,參考並添加Microsoft Scripting Runtime
到列表中。請注意,我無法使用實際的員工標識符,因爲破折號是命名範圍名稱中的非法字符(可能是因爲它們用於減法),所以我用下劃線替換了它們。
是員工ID排序? – 2014-10-29 12:17:10
你如何選擇你想創建名稱的「某位員工」?你將使用這些命名範圍來做什麼? 「表」真的是「表」,還是僅僅是一個2列的列表?如果它是一個表,它的名字是什麼?你到目前爲止完成這項任務的目的是什麼? – 2014-10-29 12:27:04
它實際上是一個Excel表格。這些ID沒有排序。我們可以假裝「某某emplyee」位於A1。我將使用範圍/結果列表作爲數據驗證下拉列表。 – user1283776 2014-10-29 12:33:42