Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel VBA创建列表并仅添加唯一术语_Arrays_Vba_Excel - Fatal编程技术网

Arrays Excel VBA创建列表并仅添加唯一术语

Arrays Excel VBA创建列表并仅添加唯一术语,arrays,vba,excel,Arrays,Vba,Excel,我试图从A列中提取字符串,并仅当它们在B列中不存在时才将它们移动到B列。为此,我想创建一个列表并用它扫描A列的所有内容,但是,我不确定如何在VBA中执行此操作。在python中,我记得使用了类似于 [If (x) not in (List)] 但在Excel中,同样的方法不适用于我 目前,我有以下几点 Sub GatherAll() GL = List() rwcnt = WorksheetFunction.CountA(Range("A:A")) lastc = Cells(1, Colu

我试图从A列中提取字符串,并仅当它们在B列中不存在时才将它们移动到B列。为此,我想创建一个列表并用它扫描A列的所有内容,但是,我不确定如何在VBA中执行此操作。在python中,我记得使用了类似于

[If (x) not in (List)]
但在Excel中,同样的方法不适用于我

目前,我有以下几点

Sub GatherAll()

GL = List()
rwcnt = WorksheetFunction.CountA(Range("A:A"))
lastc = Cells(1, Columns.Count).End(xlToLeft).Column
Dim i As Long

For i = 2 To rwcnt
    Cells(i, 1).Value = n
我想说的是

if n not in GL, GL.append(n)
continue
End Sub


如果有人能帮助我,我将非常感激。

尝试根据您的具体需要调整以下代码,看看是否有帮助。如果你需要帮助,请告诉我们

Sub MoveUniqueEntries()
    Dim oDict As Object
    Dim rToMove As Range
    Dim rDest As Range
    Dim rLoop As Range

    Set oDict = CreateObject("Scripting.Dictionary")
    Set rToMove = Intersect(Sheet1.Range("A1").CurrentRegion, Sheet1.Columns(1))
    Set rDest = Sheet1.Range("B1")

    For Each rLoop In rToMove
        If oDict.exists(rLoop.Value) Then
            'Do nothing
        Else
            oDict.Add rLoop.Value, 0
            rDest.Value = rLoop.Value
            Set rDest = rDest.Offset(1)
        End If
    Next rLoop
End Sub

尝试根据您的具体需要调整以下代码,看看是否有帮助。如果你需要帮助,请告诉我们

Sub MoveUniqueEntries()
    Dim oDict As Object
    Dim rToMove As Range
    Dim rDest As Range
    Dim rLoop As Range

    Set oDict = CreateObject("Scripting.Dictionary")
    Set rToMove = Intersect(Sheet1.Range("A1").CurrentRegion, Sheet1.Columns(1))
    Set rDest = Sheet1.Range("B1")

    For Each rLoop In rToMove
        If oDict.exists(rLoop.Value) Then
            'Do nothing
        Else
            oDict.Add rLoop.Value, 0
            rDest.Value = rLoop.Value
            Set rDest = rDest.Offset(1)
        End If
    Next rLoop
End Sub

在VBA IDE中,必须添加引用。在“工具”下拉菜单上选择“参照”。然后选择“Microsoft ActiveX数据对象2.8库”

Dim rs作为新的ADODB.Recordset
将ws设置为Excel.Worksheet
暗淡的光线和长的一样
设置ws=Application.ActiveSheet
'将字段添加到记录集中以存储数据。你可以在这里存储总和。
用rs
.Fields.Append“行”,adInteger
.Fields.Append“Value”,adInteger
打开
以
lRow=1
'循环并记录第一列中的内容

当lRow在VBA IDE中时,必须添加引用。在“工具”下拉菜单上选择“参照”。然后选择“Microsoft ActiveX数据对象2.8库”

Dim rs作为新的ADODB.Recordset
将ws设置为Excel.Worksheet
暗淡的光线和长的一样
设置ws=Application.ActiveSheet
'将字段添加到记录集中以存储数据。你可以在这里存储总和。
用rs
.Fields.Append“行”,adInteger
.Fields.Append“Value”,adInteger
打开
以
lRow=1
'循环并记录第一列中的内容
Do While lRow跨平台版本(但对于大量值而言速度较慢):

跨平台版本(但对于大量值而言速度较慢):



列B已经有一些值了吗?复制粘贴所有列A,然后使用Excel的“删除重复项”功能也可以吗?没有,列B是空的,老实说,唯一字符串列表可以放在任何地方,我只是选择了B,因为它不是A。MatthewD的问题很重要。是否要在每次启动宏时在B列中创建新列表,或添加到现有列表中?(A中可能没有值)。每次启动宏时,我都希望列中有一个新列表B列是否已经有一些值?是否复制粘贴A列的所有内容,然后使用Excel的“删除重复项”功能也可以工作?不,B列是空的,老实说,唯一字符串的列表可以放在任何位置,我选择B是因为它不是A。马修德的问题很重要。是否要在每次启动宏时在B列中创建新列表,或添加到现有列表中?(其值可能根本不存在于中)。每次启动宏时,我都希望在列中有一个新列表。如果选择此方法,请注意,必须首先通过(在VBE中)进入“工具”>“引用”>“选中“Microsoft Sciting运行时”来启用对Microsoft Sciting运行时的引用。这使得文件可以使用词汇表(无论是在您的计算机上使用,还是在collegue的计算机上使用,都无所谓)。@DavidGM我的理解是,由于我们使用了后期绑定(
CreateObject
),所以不必引用Microsoft脚本运行时。如果我们选择使用早期绑定(
Dim-oDict作为新脚本。Dictionary
),那么我们需要创建引用。也许你是对的,我从来没有按照你的方式做过。我认为晚装订没有必要@斯考特:你非得照我写的去做吗?@DavidGM感谢你提到这件事。引用问题可能会引发一些错误,这些错误总是让人难以诊断。我检查了我的引用,没有选择脚本运行时,但我一直使用字典。我已经激活了Microsoft脚本运行时,所以我不知道是否有必要,抱歉!如果选择此方法,请注意,必须首先通过(在VBE中)进入“工具”>“引用”>“选中“Microsoft Sciting运行时”,启用对Microsoft Sciting运行时的引用。这使得文件可以使用词汇表(无论是在您的计算机上使用,还是在collegue的计算机上使用,都无所谓)。@DavidGM我的理解是,由于我们使用了后期绑定(
CreateObject
),所以不必引用Microsoft脚本运行时。如果我们选择使用早期绑定(
Dim-oDict作为新脚本。Dictionary
),那么我们需要创建引用。也许你是对的,我从来没有按照你的方式做过。我认为晚装订没有必要@斯考特:你非得照我写的去做吗?@DavidGM感谢你提到这件事。引用问题可能会引发一些错误,这些错误总是让人难以诊断。我检查了我的引用,没有选择脚本运行时,但我一直使用字典。我已经激活了Microsoft脚本运行时,所以我不知道是否有必要,抱歉!再次感谢你的帮助,我以后一定会回顾这件事:安全的事情。将数据读入记录集是一种非常灵活的方法。您可以对记录集进行筛选和排序,也可以根据需要访问它。再次感谢您的帮助,我以后一定会回顾这一点:数据安全。将数据读入记录集是一种非常灵活的方法。您可以对记录集进行筛选和排序,也可以根据需要对其进行访问。
Sub UniquesTester()

    Dim v, u(), i As Long, n As Long
    n = 0
    v = Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp)).Value
    ReDim u(1 To UBound(v, 1))
    For i = 1 To UBound(v, 1)
        If IsError(Application.Match(v(i, 1), u, 0)) Then
            n = n + 1
            u(n) = v(i, 1)
        End If
    Next i
    ReDim Preserve u(1 To n)

    Range("c1").Resize(n, 1).Value = Application.Transpose(u)

End Sub