Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Excel 使用VBA将值与单元格进行比较_Excel_Vba - Fatal编程技术网

Excel 使用VBA将值与单元格进行比较

Excel 使用VBA将值与单元格进行比较,excel,vba,Excel,Vba,我将数据(数字)2单元格(Excel)作为一个单元格 我想比较每个数字的数据1和数据2。如果找到差异数据,则移动到差异列(新单元格),如果找到相同数据,则移动到相同列(新单元格)。最后,将数据差和相同移动到差+相同列 Data1 = ,4016,4053,6008,6009,6010,6011,24016,24022,24029,24035,24041,24045,24053,24059,24071,24077,24214,24240,24258,24262,24268,26000,26001

我将数据(数字)2单元格(Excel)作为一个单元格

我想比较每个数字的数据1和数据2。如果找到差异数据,则移动到差异列(新单元格),如果找到相同数据,则移动到相同列(新单元格)。最后,将数据差和相同移动到差+相同列

Data1 = ,4016,4053,6008,6009,6010,6011,24016,24022,24029,24035,24041,24045,24053,24059,24071,24077,24214,24240,24258,24262,24268,26000,26001,26002,26003,26004,26005,26006,26007


Data2 = ,4001,6008,6009,6010,6011,24001,24030,24036,24042,24046,24049,24054,24060,24072,24078,24215,24241,24259,24263,24269,26000,26001,26002,26003,26004,26005,26006,26007
  • 将数字拆分为数组(以便我们可以处理每个数字)
  • 将所有数字添加到字典
    AllButUniqueItems
    一次,使其包含每个数据集的每个数字一次。此词典中已存在的所有数字都输入到
    DuplicateItems
    词典中
  • 唯一项是
    AllButUniqueItems
    中的所有项,但不是
    DuplicateItems
  • 使用(3)的逻辑将数字连接到字符串并将其写入单元格
  • 所以你最终会得到这样的结果

    Option Explicit
    
    Public Sub DifferentOrSame()
        'read and split data sets into array
        Dim DataSet1 As Variant
        DataSet1 = Split(ThisWorkbook.Worksheets("data").Range("A2").Value, ",")
    
        Dim DataSet2 As Variant
        DataSet2 = Split(ThisWorkbook.Worksheets("data").Range("B2").Value, ",")
    
        Dim AllButUniqueItems As Object
        Set AllButUniqueItems = CreateObject("Scripting.Dictionary")
    
        Dim DuplicateItems As Object
        Set DuplicateItems = CreateObject("Scripting.Dictionary")
    
        Dim itm As Variant
        'process data set 1
        For Each itm In DataSet1
            If AllButUniqueItems.Exists(itm) Then
                If Not DuplicateItems.Exists(itm) Then
                    DuplicateItems.Add itm, 1
                End If
            Else
                AllButUniqueItems.Add itm, 1
            End If
        Next itm
    
        'process data set 2
        For Each itm In DataSet2
            If AllButUniqueItems.Exists(itm) Then
                If Not DuplicateItems.Exists(itm) Then
                    DuplicateItems.Add itm, 1
                End If
            Else
                 AllButUniqueItems.Add itm, 1
            End If
        Next itm
    
        'concatenate strings
        Dim StrDuplicates As String, StrUniques As String, StrAllButUnique As String
        For Each itm In AllButUniqueItems 
            StrAllButUnique = StrAllButUnique & IIf(StrAllButUnique <> vbNullString, ",", "") & itm
    
            If Not DuplicateItems.Exists(itm) Then
                StrUniques = StrUniques & IIf(StrUniques <> vbNullString, ",", "") & itm
            Else
                StrDuplicates = StrDuplicates & IIf(StrDuplicates <> vbNullString, ",", "") & itm
            End If
        Next itm
    
        'write to cells
        ThisWorkbook.Worksheets("data").Range("C2").Value = "'" & StrDuplicates
        ThisWorkbook.Worksheets("data").Range("D2").Value = "'" & StrUniques
        ThisWorkbook.Worksheets("data").Range("E2").Value = "'" & StrAllButUnique
    End Sub
    
    选项显式
    公共子差异相同()
    '读取数据集并将其拆分为数组
    Dim数据集1作为变量
    DataSet1=Split(ThisWorkbook.Worksheets(“数据”).Range(“A2”).Value“,”)
    Dim数据集2作为变量
    DataSet2=Split(ThisWorkbook.Worksheets(“数据”).Range(“B2”).Value“,”)
    将AllButUniqueItems设置为对象
    设置AllButUniqueItems=CreateObject(“Scripting.Dictionary”)
    将重复项设置为对象
    Set DuplicateItems=CreateObject(“Scripting.Dictionary”)
    Dim itm作为变体
    '过程数据集1
    对于数据集1中的每个itm
    如果AllButUniqueItems.存在(itm),则
    如果没有重复项。存在(itm),则
    重复项。添加itm,1
    如果结束
    其他的
    AllButUniqueItems。添加itm,1
    如果结束
    下一个itm
    '过程数据集2
    对于数据集中的每个itm 2
    如果AllButUniqueItems.存在(itm),则
    如果没有重复项。存在(itm),则
    重复项。添加itm,1
    如果结束
    其他的
    AllButUniqueItems。添加itm,1
    如果结束
    下一个itm
    '连接字符串
    Dim strd作为字符串复制,StrUniques作为字符串,StrAllButUnique作为字符串
    适用于AllButUniqueItems中的每个itm
    StrAllButUnique=StrAllButUnique&IIf(StrAllButUnique vbNullString,“,”)&itm
    如果没有重复项。存在(itm),则
    StrUniques=StrUniques&IIf(StrUniques-vbNullString,,,,)&itm
    其他的
    StrDuplicates=StrDuplicates&IIf(StrDuplicates vbNullString,“,”)&itm
    如果结束
    下一个itm
    '写入单元格
    ThisWorkbook.Worksheets(“数据”).Range(“C2”).Value=“””和StrDuplicates
    ThisWorkbook.Worksheets(“数据”).Range(“D2”).Value=“””和StrUniques
    ThisWorkbook.Worksheets(“数据”).Range(“E2”).Value=“””和StrAllButUnique
    端接头
    
    谢谢您的回答。我试过了,这是一个明显的错误
    对于UniqueItems中的每个itm
    UniqueItems中的值=empty UniqueItems中的值=empty我按照您的建议将数据放入A2和B3。@Mr.Chat我的错,对于AllButUniqueItems中的每个itm修复了答案。