将唯一的不同值放入数组的多个列的列表中

时间:2013-06-07 05:37:55

标签: excel excel-vba vba

我是Excel新手,到目前为止旅途一直很好,但我自己无法解决这个问题。我正在处理一个表格,如下:

enter image description here

基本上,我想在B3:E6的列中引用标签数组,并执行以下操作:

创建“唯一标记”列:删除重复项,在列H中创建唯一的“标记”列表。

创建“最大标记”列:在每行中查找数组中的每个唯一标记,并从同一行中的标记列返回标记。如果标记出现在多行中。应在I列的最大标记列中返回这些多行中相应标记的总和。例如,EAS和E5中都会出现“EASY”。因此,在“唯一标签”列表中,“EASY”应对应于Maximum Marks = 4(2 + 2)。

我可以使用SUMIF之类的公式手动执行此操作,但我正在寻找一种自动化方法,因为我可能需要对类似的数据集执行此操作以及其他行和列。我也对VBA解决方案持开放态度,但更喜欢某种公式。

我希望我已经解释得很好!感谢并期待您的投入。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是创建一个函数,该函数返回唯一单元格的数组,然后将它们全部乘以“标记”列中的匹配项。

使用此数组函数创建唯一单元格。请注意,此函数使用Dictionary对象。在VB编辑器中,转到工具>引用,并确保选中Microsoft Scripting Runtime。

Public Function UniqueValues(aRange As Range)
Dim DictValues As New Dictionary
Dim cll As Variant
Dim aryResults() As String
For Each cll In aRange
    If Not DictValues.Exists(cll.Value) Then DictValues.Add cll.Value, "":
Next

UniqueValues = DictValues.Keys
Set DictValues = Nothing
End Function

在单元格H3中输入并按CTRL SHIFT RETURN(因为它是一个数组函数)

=TRANSPOSE(uniquevalues(B3:E6))

并向下拖动到H15或更高

我们必须使用TRANSPOSE,因为数组从函数中连续出现。

接下来我们需要找到匹配的单元格并相乘。在C15中输入以下公式

=INDEX(SUM((($B$3:$E$6=H3)*1)*$F$3:$F$6),1)

将其拖至H15。