Excel 确定值列表的上限和下限
列A包含列中唯一的相同值列表。此列表的长度未知。确定列表上限和下限的最有效方法是什么Excel 确定值列表的上限和下限,excel,vba,Excel,Vba,列A包含列中唯一的相同值列表。此列表的长度未知。确定列表上限和下限的最有效方法是什么 A | B | C | ... -------------------------- ... | AAA | AAA | AAA | AAA | AAA | AAA | ... | 当然,这可以通过从开始位置向下和向上迭代列表直到找到不同的值来解决。但对于较大的列表,我怀疑这是一个好的解决方案。在这种情况下,是否有任何内置的excel函数可供使用,从而使我获得性能优势?以下是一些您可以修改的示例代码
A | B | C | ...
--------------------------
... |
AAA |
AAA |
AAA |
AAA |
AAA |
AAA |
... |
当然,这可以通过从开始位置向下和向上迭代列表直到找到不同的值来解决。但对于较大的列表,我怀疑这是一个好的解决方案。在这种情况下,是否有任何内置的excel函数可供使用,从而使我获得性能优势?以下是一些您可以修改的示例代码:
Sub TheOuterLimits()
Dim r As Long, v As Variant
Dim a1 As String, a2 As String
Dim i As Long, c As Long
r = ActiveCell.Row
c = ActiveCell.Column
v = ActiveCell.Value
a1 = ""
a2 = ""
For i = r To 1 Step -1
If Cells(i, c).Value <> v Then
a1 = Cells(i, c).Address(0, 0)
Exit For
End If
Next i
For i = r To Rows.Count
If Cells(i, c).Value <> v Then
a2 = Cells(i, c).Address(0, 0)
Exit For
End If
Next i
MsgBox a1 & vbCrLf & a2
End Sub
Sub-TheOuterLimits()
尺寸r为长,v为变型
尺寸a1为字符串,a2为字符串
我和你一样长,c和你一样长
r=ActiveCell.Row
c=ActiveCell.Column
v=ActiveCell.Value
a1=“”
a2=“”
对于i=r至1步骤-1
如果是单元格(i,c),则为v值
a1=单元(i,c).地址(0,0)
退出
如果结束
接下来我
对于行的i=r。计数
如果是单元格(i,c),则为v值
a2=单元(i,c).地址(0,0)
退出
如果结束
接下来我
MsgBox a1、vbCrLf和a2
端接头
<>代码告诉您模式在哪里开始和在哪里结束。 < P>除了Scott Craner注释中所建的Excel函数之外,您可以考虑这个小VBA函数
Function GetArea(rng As Range) As String
With rng.EntireColumn
.AutoFilter field:=1, Criteria1:=rng.Value 'ActiveCell.Value
GetArea= .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Areas(1).address
.Parent.AutoFilterMode = False
End With
End Function
要在“主”代码中进行利用,请执行以下操作:
Sub Main()
MsgBox getarea(Range("A12")) '<--| get the bound of the list one element of which is cell A12
End Sub
Sub-Main()
MsgBox getarea(范围(“A12”))“用户单击列表会如何影响其长度?这似乎毫不相干。你能更清楚地解释问题是什么吗?没错,约翰·科尔曼,我删除了这个。这只是触发函数的事件。我能解决这个问题。这是一个性能问题,即是否可以通过内置excel函数解决。列中的每个“相同值列表”是否唯一?或者可以有两个(或更多)“AAA”列表?这是唯一的@user3598756二次搜索是一种自然的方式。