【问题标题】:Get unique values out of a range获取范围外的唯一值
【发布时间】:2014-06-08 23:05:25
【问题描述】:

所以我正在尝试创建一个函数,该函数将获取一个范围内的所有唯一值,我是新的 vba,所以我进行了尝试,但它不起作用(#VALUE)。我最终希望数组中的每个值都输出到它下面的一个单元格。

这是我写的代码

Option Explicit

Function getUnique(dataSet As Range, Column As String)

Dim data() As String
Dim dataSize As Integer
Dim dictionary As Object
Dim i As Long

dataSize = dataSet.Rows.Count
Set dictionary = CreateObject("Scripting.Dictionary")


ReDim data(dataSize)
For i = 1 To UBound(data)
data(i) = dataSet(Column & i).Value
dictionary(data(i)) = 1
Next i

Dim v As Variant
For Each v In dictionary.Keys()

Debug.Print dictionary.Keys

Next v

【问题讨论】:

    标签: vba excel unique


    【解决方案1】:

    您的代码可以进行一些更改,如下所示:

    Function getUnique(dataSet As Range) '<<< remove Column
    
        Dim data() As String
        Dim dataSize As Integer
        Dim dictionary As Object
        Dim i As Long
    
        dataSize = dataSet.Rows.Count
        Set dictionary = CreateObject("Scripting.Dictionary")
    
    
        ReDim data(dataSize)
        For i = 1 To UBound(data)
            data(i) = dataSet.Cells(i, 1).Value    '<<< using Cells
            dictionary(data(i)) = 1
        Next i
    
        Dim v As Variant
        For Each v In dictionary.Keys()
            Debug.Print v    '<<< 
        Next v
    End Function
    

    但是,如果您尝试在工作表单元格中使用此函数,那么如果您尝试将值放入其他单元格中,它将不起作用。用户定义的函数不能这样工作,您必须将其设为 Sub 并在单击按钮或其他事件时运行它。

    【讨论】:

    • 我只放入一系列单元格,例如 (M1:M14, "A") 为什么该列是整数?天哪,它可以工作,但即使我在列部分放 95 或 30 它也不会改变任何东西?
    • 哦,对了,我想知道你在做什么。我将其切换为整数。如果您愿意,可以将其切换回来。但是,正如我所说,使用 Column 似乎是多余的:dataSet 已经包含该列。我不确定您为什么要提供“A”列。
    • 那么我该如何摆脱它,它在你写的第 10 行有什么作用?
    • 您可以摆脱它并在我的代码中使用Cells(i, 1) 来循环提供范围的(唯一)列。
    • 您介意编辑您的答案以使其也没有吗?我得到了它的工作,但我不希望未来的观众被它弄糊涂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多