仅使用公式在Excel中获取唯一值
您知道Excel中通过公式“计算”唯一值列表的方法吗 例如:垂直范围包含值仅使用公式在Excel中获取唯一值,excel,excel-formula,Excel,Excel Formula,您知道Excel中通过公式“计算”唯一值列表的方法吗 例如:垂直范围包含值“红色”,“蓝色”,“红色”,“绿色”,“蓝色”,“黑色” 因此,我希望有红色、蓝色、绿色、黑色以及另外两个空白单元格 我已经找到了一种使用小或大与索引相结合的方式来获得计算排序列表的方法,但我也希望使用这种计算排序,而不使用VBA。您可以使用COUNTIF来获得该范围内值的出现次数。因此,如果该值在A3中,则范围为A1:A6,然后在下一列中使用if(精确(COUNTIF(A3:$a6,A3),1),A3,“”。对于A4,
“红色”
,“蓝色”
,“红色”
,“绿色”
,“蓝色”
,“黑色”
因此,我希望有红色、蓝色、绿色、黑色以及另外两个空白单元格
我已经找到了一种使用小或大与索引相结合的方式来获得计算排序列表的方法,但我也希望使用这种计算排序,而不使用VBA。您可以使用COUNTIF来获得该范围内值的出现次数。因此,如果该值在A3中,则范围为A1:A6,然后在下一列中使用if(精确(COUNTIF(A3:$a6,A3),1),A3,“”。对于A4,它将是IF(精确的(COUNTIF(A4:$a6,A3),1),A4,“”)
这将为您提供一个列,其中所有唯一值都没有任何重复值。好的,我有两个想法给您。希望其中一个可以帮助您找到需要的地方。请注意,第一个忽略了作为公式执行此操作的请求,因为该解决方案并不漂亮。我想我确定简单的方法确实不适合您;^) 使用高级过滤器命令
我建议在列表中间的某个地方写这个公式,例如,在我的例子中的Cys< Cult> C6中,然后复制它并在它的上下粘贴,公式应该自动调整,而不需要重新键入它。 唯一具有唯一不同公式的单元格位于第一行
使用您的列表(“红色”、“蓝色”、“红色”、“绿色”、“蓝色”、“黑色”);以下是结果: (我没有足够高的级别来发布图像,所以希望这个txt版本有意义)- [A栏:原始清单]
- [列B:唯一列表结果]
- [C列:唯一列表公式]
- 红色,红色,
=A3
- 蓝色,蓝色,
=IF(iError(匹配(A4,A$3:A3,0)),A4,“”
- 红色,,
=IF(iError(匹配(A5,A$3:A4,0)),A5,“”
- 绿色,绿色,
=IF(iError(匹配(A6,A$3:A5,0)),A6,“”
- 蓝色,
=IF(iError(匹配(A7,A$3:A6,0)),A7,“”
- 黑色,黑色,
=IF(iError(匹配(A8,A$3:A7,0)),A8,“”
假设列A包含您要查找的单个唯一实例的值,并且有一个标题行,我使用以下公式。如果您希望它以不可预测的行数进行缩放,您可以将A772(我的数据结束处)替换为=地址(COUNTA(A:A),1) =如果(计数如果(A5:$772澳元,A5)=1,A5,”) 这将在列中每个值的最后一个实例中显示唯一值,并且不进行任何排序
Function listUnique(rng As Range) As Variant
Dim row As Range
Dim elements() As String
Dim elementSize As Integer
Dim newElement As Boolean
Dim i As Integer
Dim distance As Integer
Dim result As String
elementSize = 0
newElement = True
For Each row In rng.Rows
If row.Value <> "" Then
newElement = True
For i = 1 To elementSize Step 1
If elements(i - 1) = row.Value Then
newElement = False
End If
Next i
If newElement Then
elementSize = elementSize + 1
ReDim Preserve elements(elementSize - 1)
elements(elementSize - 1) = row.Value
End If
End If
Next
distance = Range(Application.Caller.Address).row - rng.row
If distance < elementSize Then
result = elements(distance)
listUnique = result
Else
listUnique = ""
End If
End Function
=IF(ISBLANK(A11);1;IF(COUNTIF($A$11:A11;A11)=1;0;COUNTIF($A11:A$1100;A11)))
=MATCH(0;B11:B1100;0)
=C11+MATCH(0;OFFSET($B$11:$B$1100;C11;0);0)
=IFERROR(INDEX($A$11:$A$1100; C11); "")
=INDEX(L$11:L$300,MATCH(0,COUNTIF(V$10:V10,L$11:L$300),0))
=INDEX(L$11:L$300,MATCH(,COUNTIF(V$10:V10,L$11:L$300),))
nList = the list of original values
nRow = ROW(nList)-ROW(OFFSET(nList,0,0,1,1))+1
nUnique = IF(COUNTIF(OFFSET(nList,nRow,0),nList)=0,COUNTIF(nList, "<"&nList),"")
IFERROR(INDEX(nList,MATCH(SMALL(nUnique,ROW()-?),nUnique,0)),"")
IFERROR(INDEX(nList,MATCH(SMALL(nUnique,ROW()-4),nUnique,0)),"")
=OFFSET($A$2,0,0,COUNTA($A:$A),1)
=IFERROR(INDEX(Colors,MATCH(SUM(COUNTIF(C$1:C1,Colors)),COUNTIF(Colors,"<"&Colors),0)),"")
=SUM(IF(FREQUENCY(COUNTIF(Colors,"<"&Colors),COUNTIF(Colors,"<"&Colors)),1))
=INDEX($A$2:$A$18,MATCH(SUM(COUNTIF($A$2:$A$18,C$1:C1)),COUNTIF($A$2:$A$18,"<" &$A$2:$A$18),0))
=INDEX(tbl_text, MIN(IF(COUNTIF($B$12:B12, tbl_text)=0, ROW(tbl_text)-MIN(ROW(tbl_text))+1)), MATCH(0, COUNTIF($B$12:B12, INDEX(tbl_text, MIN(IF(COUNTIF($B$12:B12, tbl_text)=0, ROW(tbl_text)-MIN(ROW(tbl_text))+1)), , 1)), 0), 1)
Function listUnique(rng As Range) As Variant
Dim val As String
Dim elements() As String
Dim elementSize As Integer
Dim newElement As Boolean
Dim i As Integer
Dim distance As Integer
Dim allocationChunk As Integer
Dim uniqueSize As Integer
Dim r As Long
Dim lLastRow As Long
lLastRow = rng.End(xlDown).row
elementSize = 1
unqueSize = 0
distance = Range(Application.Caller.Address).row - rng.row
If distance <> 0 Then
If Cells(Range(Application.Caller.Address).row - 1, Range(Application.Caller.Address).Column).Value = "" Then
listUnique = ""
Exit Function
End If
End If
For r = 1 To lLastRow
val = rng.Cells(r)
If val <> "" Then
newElement = True
For i = 1 To elementSize - 1 Step 1
If elements(i - 1) = val Then
newElement = False
Exit For
End If
Next i
If newElement Then
uniqueSize = uniqueSize + 1
If uniqueSize >= elementSize Then
elementSize = elementSize * 2
ReDim Preserve elements(elementSize - 1)
End If
elements(uniqueSize - 1) = val
End If
End If
Next
If distance < uniqueSize Then
listUnique = elements(distance)
Else
listUnique = ""
End If
End Function
=IFERROR(INDEX($A$2:$A$7,MATCH(0,COUNTIF(B$1:$B1,$A$2:$A$7),0),1),"")
=UNIQUE(A1:A6)
=C1#
=UNIQUE(A1:A6;;TRUE)