VBA 将存储在字典中的单元格粘贴到另一个工作表中的单元格

标签 vba excel dictionary

我正在尝试从一个工作表中搜索一列单元格,找到所有唯一值,然后将这些值粘贴到另一个工作表中的一列中。到目前为止,我的代码可以创建字典、搜索所需的列并选择该列中的所有唯一值。

Function UniqueRequest() As Long

        myReqIDCol = ColSearch("id")

        'Creates a dictionary filled with each unique value in the "TaskIDList" column and counts them to determine how many unique keys are in the document
        Set dic = CreateObject("Scripting.Dictionary")
        For i = 1 To LastRow
            tmp = Cells(i, myReqIDCol).Value
            If Not dic.exists(tmp) Then
                dic.Add tmp, 1
            End If
        Next i

End Function

我还有一个函数,可以选择要粘贴单元格的工作表并对其进行设置,以便将值粘贴到所需列中的每个连续空白单元格中。

Function ReqSheet(input_column As Integer, input_value As Long) As Long

        Dim rv As Long

            rv = 1

            Sheets("Request Results").Activate
            Do While Cells(rv, input_column).Value <> ""
                rv = rv + 1
            Loop
            Cells(rv, input_column).Value = input_value

    ReqSheet = input_value

    End Function

我遇到的问题是我不完全确定如何将这两者联系起来。我想用字典的每个值调用 ReqSheet 函数,但我尝试的一切都失败了。抱歉,如果这是一个简单的解决方案,但我无法从互联网上找到好的解决方案,而且我对 VBA 还很陌生。

最佳答案

字典的好处之一是,您可以将它们的值和键提取到数组中,然后将其一次性全部写入某个范围,而无需循环。

Sub GetUnique()

    Dim dc As Scripting.Dictionary
    Dim rCell As Range

    Set dc = New Scripting.Dictionary

    For Each rCell In Selection.Cells
        If Not dc.Exists(rCell.Value) Then
            dc.Add rCell.Value, rCell.Value
        End If
    Next rCell

    ThisWorkbook.Worksheets("Request Results").Range("A1").Resize(UBound(dc.Keys), 1).Value = _
        Application.Transpose(dc.Keys)

End Sub

关于VBA 将存储在字典中的单元格粘贴到另一个工作表中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24941939/

相关文章:

c# - 在 C# 中循环字典

vba - MS Office SaveAs 类型 FileDialog 与 vb 中的过滤器

vba - 给定行中最后一个非空单元格(列); Excel VBA

vba - 删除重复的可见行

excel - 电子表格函数将日期转换为文本

php - 通过PHP解析字典对象并创建MySQL表

excel - VBA:将数据从一列复制并转置到新行

excel - 将第一列中的文本拆分为几列

vba - 设置一个 VBA 宏,它将为我的主工作表中的每一行信息创建一个新工作表并以某种格式布局?

python - 全局字典不需要关键字 global 来修改它们吗?