我想知道如何为具有重复值的范围定义名称,并使其自动运行整个表。请参阅下表。
A B
1 CODE Display
2 100 000
3 100 000
4 100 010
5 100 020
6 100 030
7 100 100
8 110 000
9 110 010
10 110 020
11 110 030
12 110 100
13 110 101
14 110 200
15 110 204
16 110 208
17 110 209
现在,我知道我可以使用Names.Add方法来定义。但是,我的问题是能够获取 A列中重复值的名称范围,如代码段所示。
我想将范围B2:B7 的名称定义为“t_100”。我能想到的是从A2:A7,偏移1列获取地址范围,然后使用Names.Add方法引用B2:B7。由于A2:A7范围仅包含“100”,因此它引出了如何获得连续重复值范围的问题。
这是我最初的想法。
答案 0 :(得分:0)
过滤已知值然后引用.SpecialCells(xlCellTypeVisible
将是一个很好的方法,可以将具有重复列A值的单元格聚集在一起。计数以查看当您沿着列向下移动时是否有任何特定值是该值的第一次出现将确保您不会不必要地重复操作。
Sub t_000_name_table()
Dim rw As Long, val As Variant
With ActiveSheet
With .Cells(1, 1).CurrentRegion
.AutoFilter
For rw = 2 To .Rows.Count
val = .Cells(rw, 1).Value
If Not CBool(Application.CountIf(.Cells(1, 1).Resize(rw - 1, 1), val)) Then
.AutoFilter field:=1, Criteria1:=val
With .Offset(1, 1).Resize(.Rows.Count - 1, 1)
.SpecialCells(xlCellTypeVisible).Name = Format(val, "\t\_000")
End With
.AutoFilter field:=1
End If
Next rw
.AutoFilter
End With
End With
End Sub
我使用了一个简写名称声明语句,它严重依赖默认值。它应该作为工作簿范围和绝对单元格范围寻址进入引用:。如果您希望更改范围或其他属性,可以使用Name Object .Add的MSDN VBA参考。
这也适用于非连续范围。