循环创建对象excel vba

循环创建对象excel vba,excel,vba,Excel,Vba,我试图获得“RD”范围内每列的唯一值,并在单个列中显示它们。我需要创建一个对象(“scripting.Dictionary”),其中的列数与范围“RD”中的列数相同。我尝试了这段代码,但结果是“运行时错误13” 我在下面添加了一些代码来帮助循环浏览列表,查找唯一的值,并将它们添加到一个新列中。在我的示例中,为了提高效率,我将整个功能封装到一个循环中。我还将唯一值添加到Sheet2中的一个新列中,从单元格A1开始 如果你需要任何额外的帮助,请告诉我 基于误解编辑的代码: Private Sub C

我试图获得“RD”范围内每列的唯一值,并在单个列中显示它们。我需要创建一个对象(“scripting.Dictionary”),其中的列数与范围“RD”中的列数相同。我尝试了这段代码,但结果是“运行时错误13”


我在下面添加了一些代码来帮助循环浏览列表,查找唯一的值,并将它们添加到一个新列中。在我的示例中,为了提高效率,我将整个功能封装到一个
循环中。我还将唯一值添加到
Sheet2
中的一个新列中,从单元格
A1
开始

如果你需要任何额外的帮助,请告诉我

基于误解编辑的代码:

Private Sub CommandButton1_Click()
    Dim oDict As Object
    Dim rngToScrub As Range
    Dim rngNewColumnToStoreUnique As Range
    Dim oCol As Range
    Dim cel As Range

    Set rngToScrub = Range(Me.RefEdit1.Value)
    Set rngNewColumnToStoreUnique = Sheet2.Range("A1")

    For Each oCol In rngToScrub.Columns
        Set oDict = CreateObject("Scripting.Dictionary")

        For Each cel In oCol.Cells
            If oDict.exists(cel.Value) Then
                'Do Nothing for Now
            Else
                oDict.Add cel.Value, 0
                rngNewColumnToStoreUnique.Value = cel.Value
                Set rngNewColumnToStoreUnique = rngNewColumnToStoreUnique.Offset(1)
            End If
        Next cel

        Set oDict = Nothing
    Next oCol
End Sub

旧代码:被误解的需求

Private Sub CommandButton1_Click()
    Dim oDict As Object
    Dim rngToScrub As Range
    Dim rngNewColumnToStoreUnique As Range
    Dim cel As Range

    Set oDict = CreateObject("Scripting.Dictionary")
    Set rngToScrub = Range(Me.RefEdit1.Value)
    Set rngNewColumnToStoreUnique = Sheet2.Range("A1")

    For Each cel In rngToScrub
        If oDict.exists(cel.Value) Then
            'Do Nothing for Now
        Else
            oDict.Add cel.Value, 0
            rngNewColumnToStoreUnique.Value = cel.Value
            Set rngNewColumnToStoreUnique = rngNewColumnToStoreUnique.Offset(1)
        End If
    Next cel
End Sub

它在哪里导致错误?您是否逐行运行代码来查找?JK=Range(“RD”)。Columns.Count会导致错误本身“RD”不是有效的范围。范围(“D:R”)将是D-R列的有效范围。除非您有一个名为RD@99moorem看起来他在代码的第一行中设置了一个命名范围
RD
。@user3561813是的,忽略我的注释lol,我只在dims后进行里德。编码实践使每件事都变得复杂first@99moorem我理解。在代码中创建命名范围只是为了用它代替变量,这也有点不标准。我给出了一个使用变量的替代解决方案。希望能更紧密地满足海报的需要。Perb,您的代码工作得很好,但它只创建了一个“Scripting.Dictionary”,所以它会生成整列的唯一值,而不是每列的唯一值。@agengsaputro抱歉!我误解了你的帖子,认为你需要在所有栏目中都有独特的条目。请参阅经修订的守则。它从每个列中获取唯一的值,并将它们全部放入一个新列中。如果这更像你需要的,请告诉我。@user3561813太好了,这就是我要找的。。非常感谢
Private Sub CommandButton1_Click()
    Dim oDict As Object
    Dim rngToScrub As Range
    Dim rngNewColumnToStoreUnique As Range
    Dim cel As Range

    Set oDict = CreateObject("Scripting.Dictionary")
    Set rngToScrub = Range(Me.RefEdit1.Value)
    Set rngNewColumnToStoreUnique = Sheet2.Range("A1")

    For Each cel In rngToScrub
        If oDict.exists(cel.Value) Then
            'Do Nothing for Now
        Else
            oDict.Add cel.Value, 0
            rngNewColumnToStoreUnique.Value = cel.Value
            Set rngNewColumnToStoreUnique = rngNewColumnToStoreUnique.Offset(1)
        End If
    Next cel
End Sub