当前位置: 首页 > 知识库问答 >
问题:

如何比较两个工作簿之间唯一数据的列

长孙阳焱
2023-03-14
Sub test()

'application.screenupdating=True Dim WbA As Workbook Set WbA=thisworkbook

Dim WbB As Workbook
Set WbB = Workbooks.Open(Filename:="C:\Users\maggie\Desktop\fortest1.xlsx")

Dim SheetA As Worksheet
Dim SheetB As Worksheet
Set SheetA = WbA.Sheets("up")
Set SheetB = WbB.Sheets("up")

Dim eRowA As Integer
Dim eRowB As Integer
eRowA = SheetA.Range("F" & Rows.Count).End(xlUp).Row 'Last line with data in Workbook A (ActiveWorkbook)
eRowB = SheetB.Range("D" & Rows.Count).End(xlUp).Row  'Last line with data in Workbook B (Opened Workbook)

Dim match As Boolean
Dim erow As Long
Dim i, j As Long
Dim r1, r2 As Range
For i = 1 To eRowA
    Set r1 = SheetA.Range("F" & i)
    match = False
    For j = 1 To eRowB
        Set r2 = SheetB.Range("D" & j)
        If r1 = r2 Then
            match = True
        End If
        Next j
        If Not match Then
        erow = Range("C" & Rows.Count).End(xlUp).Row + 1
        SheetB.Range("A" & j & ":C" & j).Copy Destination:=SheetA.Range("C" & erow & ":E" & erow)
End If
Next i
WbB.Close (False)

在此输入图像描述

共有1个答案

冉子石
2023-03-14

我不太确定我是否理解您真正想要实现的目标,但是代码有几个问题。

正确的缩进是问题之一。乍一看并不明显代码是如何嵌套的。

  • 当比较不为true时,match变量不会重置为false,因此它仍然显示为true。fix:将match=False移动到j循环中,因此在j循环开始时将其设置为False
  • 设置match变量,然后在j循环中重写七次,然后对其进行计算,并对其执行某些操作。
For i = 1 To eRowA
    Set r1 = SheetA.Range("F" & i)
'    match = False ' move this into the j loop
    For j = 1 To eRowB
        match = False
        Set r2 = SheetB.Range("D" & j)
        If r1 = r2 Then
            match = True
        End If
'        Next j   ' this loops too early and overwrites the match variable
        If Not match Then
            erow = Range("C" & Rows.Count).End(xlUp).Row + 1
            SheetB.Range("A" & j & ":C" & j).Copy Destination:=SheetA.Range("C" & erow & ":E" & erow)
        End If
    Next j
Next i
 类似资料:
  • 我想比较这两个函数的值。不幸的是,我试图使,但我一直得到。 我想检查如果。这就是我上面完整的代码。

  • 我试图建立一个函数,检查一个单词或文本是否是回文。要做到这一点,它拆分文本,使每个字母都是一个新数组的元素,它去掉空白,并建立反向数组。然后检查两个数组中处于相同位置的每个元素是否相等。如果不是,则返回false,如果是,则返回true。这里的函数是: 我不知道出了什么问题,但是不管我传递给函数什么单词或文本,函数似乎都在返回一个真值。那有什么不好?

  • 问题内容: 我必须比较两个对象(不是)。比较它们的规范方法是什么? 我可以想到: 该运营商只比较基准,因此这将仅适用于较低的整数值的工作。但是也许自动装箱开始了…? 这看起来像一个昂贵的操作。是否以此方式计算出哈希码? 有点冗长… 编辑: 谢谢您的答复。尽管我现在知道该怎么办,但事实已分布在所有现有答案(甚至是已删除的答案)上,我也不知道该接受哪个答案。因此,我将接受最佳答案,即所有三种比较可能性

  • 有两个df df1 df2 预期产出: 从数据帧中获取唯一行比较,并在df1中显示唯一列 df1

  • 我有两个时间戳,一个是我创建的时间戳,另一个是我创建的时间戳(Laravel)。。。在数据库中,两者都有类型时间戳和默认值0000-00-00:00:00。。。但是 给出字符串。而是object/Carbon。这些时间戳有什么问题? 在使用格式('U')转换为整数后,我必须对两者进行比较。我只能在碳对象上调用此方法。我该怎么做?

  • 所以在COL D中,我必须只粘贴COL A和COL C相等的值,如果这些值不相等,则跳过或粘贴COL D中的任何东西 我写过类似这样的代码,但不幸的是它粘贴了一切!!