[英]Count unique values in column based on another column (Microsoft Excel 2013)
對於一個項目,我正在創建一個 Excel 宏來計算基於另一個列值的唯一列值。 這是我要創建的宏的基本示例:
col_1 | 列_2 |
---|---|
一種 | X |
一種 | 是 |
b | z |
b | z |
Sub Main()
Dim Param As String
Param = "a"
MsgBox UniqueValues(Param)
End Sub
Function UniqueValues(Param As String) As String
Dim EvaluateString As String
EvaluateString = "=SUM(--(LEN(UNIQUE(FILTER(B:B,A:A=" & """" & Param & """" & ","""")))>0))"
UniqueValues = Evaluate(EvaluateString)
End Function
預期是對於Param = "a"
function 返回2
而對於Param = "b"
它返回1
。
盡管 function 在適用於 Microsoft 365 企業應用的 Excel 中完美運行,但該項目要求我使用適用於 Microsoft Office Standard 2013 的 Excel。此版本不支持使用EvaluateString
中使用的UNIQUE
和FILTER
函數。
我想了解是否有一種簡單的方法可以根據 Microsoft Office Standard 2013 中 Excel 中另一列中的值來計算列中的唯一值。非常感謝您的幫助。
您可以使用數組公式
=SUM(IF($A$1:$A$5="a",1/COUNTIFS($A$1:$A$5,"a",$B$1:$B$5,$B$1:$B$5)),0)
輸入公式后,而不是Enter ,你需要按Ctl + Shift + Enter
在VBA中,可以使用上面的公式如下圖
Option Explicit
Sub Main()
Dim Param As String
Param = "b"
MsgBox "The count for " & Param & " is " & UniqueValues(Param)
End Sub
Function UniqueValues(Param As String) As String
Dim EvaluateString As String
Dim ws As Worksheet
'~~> Change this to the relevant worksheet
Set ws = Sheet1
'SUM(IF(Sheet1!A1:A5="a",1/COUNTIFS(Sheet1!A1:A5,"a",Sheet1!B1:B5,Sheet1!B1:B5)),0)
EvaluateString = "SUM(IF($A$1:$A$5=" & _
Chr(34) & Param & Chr(34) & _
",1/COUNTIFS($A$1:$A$5," & _
Chr(34) & Param & Chr(34) & _
",$B$1:$B$5," & _
"$B$1:$B$5)),0)"
UniqueValues = ws.Evaluate(EvaluateString)
End Function
在行動
當您的數據在“Sheet1”中,A 和 B 列,從第 1 行開始時,您可以使用此宏(結果在 D 和 E 列中):
Sub macro1()
Dim a As Integer, p As Integer, x As Integer, y As Integer
a = 0: p = 0: x = 1: y = 1
With Sheets("Sheet1")
.Columns("d:e").ClearContents
Do Until x > .Cells(.Rows.Count, 1).End(xlUp).Row
a = 1
Do While .Cells(x, 1) = .Cells(y, 1)
If .Cells(x, 2) <> .Cells(y, 2) Then a = a + 1
x = x + 1
Loop
p = p + 1
.Cells(p, 4) = .Cells(y, 1)
.Cells(p, 5) = a
y = x
Loop
End With
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.