簡體   English   中英

根據另一列計算列中的唯一值(Microsoft Excel 2013)

[英]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中使用的UNIQUEFILTER函數。

我想了解是否有一種簡單的方法可以根據 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM