Excel 使用VBA将值与单元格进行比较
我将数据(数字)2单元格(Excel)作为一个单元格 我想比较每个数字的数据1和数据2。如果找到差异数据,则移动到差异列(新单元格),如果找到相同数据,则移动到相同列(新单元格)。最后,将数据差和相同移动到差+相同列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
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
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修复了答案。