Excel에서 고유 값 계산
엑셀에서 고유값 범위(C2:C2080)를 계산해야 합니다.구글 공식:
=SUM(IF(FREQUENCY(MATCH(C2:C2080;C2:C2080;0);MATCH(C2:C280;C2:C2080;0))>0;1))
잘못된 값을 반환합니다
업데이트: 레임 솔루션:
Sub CountUnique()
Dim i, count, j As Integer
count = 1
For i = 1 To 470
flag = False
If count > 1 Then
For j = 1 To count
If Sheet1.Cells(i, 3).Value = Sheet1.Cells(j, 11).Value Then
flag = True
End If
Next j
Else
flag = False
End If
If flag = False Then
Sheet1.Cells(count, 11).Value = Sheet1.Cells(i, 3).Value
count = count + 1
End If
Next i
Sheet1.Cells(1, 15).Value = count
End Sub
여기 저에게 적합한 VBA 기능이 있습니다.
임의의 범위(예: "=CountUnique(N8:O9)")를 참조하여 워크시트 함수로 사용할 수 있습니다.
텍스트 및 숫자 값을 처리하고 빈 셀을 하나의 값으로 취급합니다.
배열 함수를 다룰 필요가 없습니다.
사전 개체에 대해 Microsoft Scripting Library를 참조해야 합니다.
Public Function CountUnique(rng As Range) As Integer
Dim dict As Dictionary
Dim cell As Range
Set dict = New Dictionary
For Each cell In rng.Cells
If Not dict.Exists(cell.Value) Then
dict.Add cell.Value, 0
End If
Next
CountUnique = dict.Count
End Function
=SUM(IF(FREQUENCY(IF(LEN(A2:A10)>0,MATCH(A2:A10,A2:A10,0),""), IF(LEN(A2:A10)>0,MATCH(A2:A10,A2:A10,0),""))>0,1))
http://office.microsoft.com/en-us/excel/HP030561181033.aspx
또한 VBA 매크로를 작성할 수도 있습니다(그것이 당신이 원하는 것인지는 확실하지 않습니다).
(A1-A11이 채워지고 B1-B11이 비어있는 스프레드시트가 주어짐)의 효과:
Sub CountUnique()
Dim count As Integer
Dim i, c, j As Integer
c = 0
count = 0
For i = 1 To 11
Sheet1.Cells(i, 2).Value = Sheet1.Cells(i, 1).Value
c = c + 1
For j = 1 To c
If CDbl(Sheet1.Cells(i, 1).Value) = CDbl(Sheet1.Cells(j, 2).Value) Then
c = c - 1
Exit For
End If
Next j
Next i
' c now equals the unique item count put in the 12'th row
Sheet1.Cells(12, 1).Value = c
End Sub
시도:
=SUM(IF(FREQUENCY(C2:C2080,C2:C2080)>0,1))
편집: 위에서 열의 빈 항목을 처리합니다.
Justin G의 기능은 Excel의 어떤 종류의 제한으로 인해 고유 아이템 수가 32,767개를 넘을 때까지 매우 잘(그리고 빠르게) 작동합니다.
네가 그의 코드를 수정하면 내가 찾은거야
Public Function CountUnique(rng As Range) As Integer
그리고 그것을 ...로 만듭니다.
Public Function CountUnique(rng As Range) As Long
그러면 더 독특한 아이템들을 다룰 것입니다.
@JustinG의 사전 방법을 아직도 사용하려는 사람은 최신 버전의 VBA를 사용하는 경우 코드를 약간 변경해야 합니다.
Scripting Runtime하고 'Microsoft Scripting Runtime'을 에 붙여야 .Dictionary
건과의 Scripting
다음과 , 과
Public Function CountUnique(rng As Range) As Long
Dim dict As Scripting.Dictionary
Dim cell As Range
Set dict = New Scripting.Dictionary
For Each cell In rng.Cells
If Not dict.Exists(cell.Value) Then
dict.Add cell.Value, 0
End If
Next
CountUnique = dict.Count
End Function
이 글을 읽고 더 자세히 조사한 결과, 여기서 보는 것보다 저에게 더 효과적인 것이 하나 있습니다.
배열 입력:
괄호 안 함 (Ctrl+Shift+Enter,,)
{=SUM(IFERROR(1/COUNTIF(C2:C2080,C2:C2080),0))}
또는 VBA에서:
MyResult = MyWorksheetObj.Evaluate("=SUM(IFERROR(1/COUNTIF(C2:C2080,C2:C2080),0))")
숫자와 텍스트 모두에 대해 작동하며 빈 셀을 처리하고 참조된 셀에서 오류를 처리하며 VBA에서 작동합니다.제가 본 솔루션 중 가장 콤팩트한 솔루션 중 하나이기도 합니다.VBA에서 사용하면 배열 공식이 되어야 하는 필요성을 자동으로 처리할 수 있습니다.
오류를 처리하는 방법은 단순히 고유 개수에 포함시키는 것입니다.예를 들어 2개의 셀이 #DIV/0!을 반환하고 3개의 셀이 #VALUE!를 반환하는 경우 이 5개의 셀은 2를 고유 값의 최종 카운트에 추가합니다.오류를 완전히 배제하고 싶다면 이를 위해 수정해야 합니다.
내 테스트에서 위의 제이콥의 이 테스트는 텍스트가 아닌 숫자에 대해서만 작동하며 참조된 셀에서 오류를 처리하지 않습니다(참조된 셀 중 하나라도 오류를 반환하면 오류를 반환함).
=SUM(IF(FREQUENCY(G4:G29,G4:G29)>0,1))
https://excelchamps.com/blog/count-unique-values-excel/ 을 보세요.대답은 여기 있습니다.
입력해야 하는 수식은 다음과 같습니다.
=SUMPRODUCT(1/COUNTIF(C2:C2080,C2:C2080))
이 수식을 배열로 입력하면 다음과 같이 나타납니다.
{=SUMPRODUCT(1/COUNTIF(C2:C2080,C2:C2080))}
그 공식은 저에게 적합합니다.이것이 작동하지 않을 수 있는 몇 가지가 있습니다.첫째, 모든 표적 세포는 그 안에 값이 있어야 합니다.이것이 작동하지 않을 수 있는 또 다른 예는 값이 31인 셀이 하나 있고 텍스트 값이 "31"인 셀이 다른 경우입니다.이것들은 서로 다른 값으로 인식될 것입니다.
이것을 시도해 볼 수 있습니다.
=SUM(IF(FREQUENCY(IF(LEN(B2:B11)>0,MATCH(B2:B11,B2:B11,0),""), IF(LEN(B2:B11)>0,MATCH(B2:B11,B2:B11,0),""))>0,1))
이것은 배열 공식입니다.를 눌러 확인하는 대신 ctrl+shift+enter를 눌러야 합니다.
출처:
http://www.cpearson.com/excel/Duplicates.aspx
이것이 많은 행을 처리하는 더 효율적인 방법일 수 있습니다.한 번에 각 셀을 순환하는 대신 내장된 AdvancedFilter 명령을 사용합니다.
Public Function UniqueValues(oRange As Range) As Variant
' Uses the built-in AdvancedFilter Excel command to return the unique values onto the Worksheet
' and then populate and retuns an array of unique values
' Note: The index:0 element in the returned array will be the header row.
' You can ignore this element unless the first row in your oRange is a unique value
' in which case the header will be that value.
Dim oTarget As Range
Dim r As Long, numrows As Long
Dim vs1, vs2 As Variant
' Get the first unused cell on the first row where the unique vaues will be temporarily populated
Set oTarget = oRange.SpecialCells(xlLastCell) ' the last cell on the worksheet
Set oTarget = oTarget.Parent.Cells(1, oTarget.Column + 1) ' the first unused cell on the first row
' Copy the unique values from your oRange to the first unused cell on row 1
oRange.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=oTarget, Unique:=True
' Get the number of rows including the first row which is the header
numrows = WorksheetFunction.CountA(oTarget.EntireColumn)
' create an 2-dim array of the rows
vs1 = oTarget.Resize(numrows)
' Prepare a second 1-dim array for the result
ReDim vs2(numrows)
' Transfer the 2-dim array into the 1-dim array
For r = 1 To UBound(vs1, 1)
vs2(r - 1) = vs1(r, 1)
Next
' Return the 1-dim array as the function result
UniqueValues = vs2
' Clean up the extra column on the worksheet
oTarget.EntireColumn.Delete
End Function
이를 위한 또 다른 방법은 다음과 같습니다.
Sub CountUnique()
Dim Count, x, a, lastRow, Values(), StringValues
a = ActiveCell.Column
a = GetLetterFromNumber(a)
lastRow = Range(a & Rows.Count).End(xlUp).row
Count = 0
For Each c In Range(Range(a & "1"), Range(a & Rows.Count).End(xlUp))
If c.row = 1 Then
ReDim Values(lastRow)
Values(Count) = c.Value
Count = Count + 1
End If
StringValues = Join(Values, "#")
StringValues = "#" + StringValues
If InStr(1, StringValues, c.Value) = 0 Then
Values(Count) = c.Value
Count = Count + 1
End If
Next c
MsgBox "There are " & Count & " unique values in column " & a
End Sub
활성 셀이 계산 중인 열의 1행에 있어야 합니다.
2018년 가을 이후로 이 문제는 새로운 동적 배열 기능을 사용하여 훨씬 쉽게 해결할 수 있습니다(현재 Office 365 클라이언트만 사용 가능 - 이 솔루션은 Excel 2016/2019에서는 작동하지 않습니다).
=COUNTA(UNIQUE(C2:C2080))
그UNIQUE
함수를 사용하면 범위에 고유한 값이 배열됩니다. 이 값은 다음을 사용하여 셀 수 있습니다.COUNTA
.
범위 내에 빈칸이 있을 경우 다음을 사용하여 걸러낼 수 있습니다.FILTER
함수:
=COUNTA(UNIQUE(FILTER(C2:C2080,C2:C2080<>"")))
언급URL : https://stackoverflow.com/questions/1676068/count-unique-values-in-excel
'programing' 카테고리의 다른 글
관련 개체가 있는지 확인하는 장고 오류: RelatedObjectDesNotExist (0) | 2023.09.07 |
---|---|
동일한 시스템 내의 여러 프로젝트에 대해 여러 사용자 이름을 가져옵니다. (0) | 2023.09.07 |
AbstractAnnotationConfigDispatcherServlet을 사용하는 경우이니셜라이저 및 웹어플리케이션이니셜라이저? (0) | 2023.09.07 |
요청을 사용하여 Node.js의 이진 컨텐츠 가져오기 (0) | 2023.09.07 |
ASP를 사용하여 여러 응용프로그램에 걸쳐 세션을 공유합니다.NET Session State Service (0) | 2023.09.07 |