【问题标题】:Identifying duplicate values and copying to other cells using For Loops in VBA Excel在 VBA Excel 中使用 For 循环识别重复值并复制到其他单元格
【发布时间】:2017-07-07 04:41:52
【问题描述】:

我有一个有 3 张工作表的工作簿。表 1 和表 2 有 2 列信息。 A 列是唯一标识符,B 列是可能重复出现的货币值。

工作表 1 中的所有信息将在工作表 2 中重复,但工作表 2 将包含其他信息。

我需要遍历工作表 2 中的唯一标识符(A 列),将其与工作表 1 中的信息进行比较,然后将工作表 2 中的唯一信息复制到工作表 3 中的某个范围。

我目前只学习 VBA 的基础知识,所以可能有更好的方法来做到这一点,但我希望能够将代码扩展到其他工作簿。

感谢您的帮助。

        Sub Split_818s()
        Dim Ref As Long
        Dim Ref1 As Long
        Dim Amount As Long

        For Ref = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
            For Ref1 = Range("B6") To Range("B100")   
        If (Worksheets("Sheet2").Range(Ref).Value <> Worksheets("Sheet1").Range(Ref).Value) Then
            Worksheets(“Sheet3”).Range(Ref1).Value = Worksheets("Sheet2).Range(Ref).Value
          End If   
            Next Ref1
        Next Ref

        End Sub

【问题讨论】:

  • Sheet2 上的数据与 Sheet1 有何不同,您是否在比较 A 列中的 ID。您的代码似乎将 Sheet1 上 B 列中的值与 Sheet1 上 A 列中的值进行比较。
  • @Gordon 工作表 1 和 2 的 A 列中的信息是唯一的用户 ID。这是一份每天提取两次的报告。第二份报告包含与第一份相同的所有信息,但全天获得的附加信息。我希望将详细信息从 Sheet 2 Column A 复制到 Sheet 3 Column B

标签: vba excel


【解决方案1】:

我在其中放置了不同的语法来展示不同的方法:

Sub Split_818s()
Dim wS1 As Worksheet
Dim wS2 As Worksheet
Dim wS3 As Worksheet
Dim Ref As Long
Dim Ref1 As Long
Dim Amount As Long

Set wS1 = ThisWorkbook.Sheets("Sheet1")
Set wS2 = ThisWorkbook.Sheets("Sheet2")
Set wS3 = ThisWorkbook.Sheets("Sheet3")

wS3.Cells.Clear

For Ref = wS2.Range("A" & wS2.Rows.Count).End(xlUp).Row To 2 Step -1
    For Ref1 = wS1.Range("B6").Row To wS1.Range("B100").Row
        If wS2.Range("A" & Ref).Value <> wS1.Cells(Ref1, 1).Value Then
            With wS3
                .Cells(.Range("A" & .Rows.Count).End(xlUp).Row + 1, "A").Value = _
                        wS2.Range("A" & Ref).Value
            End With 'wS3
        End If
    Next Ref1
Next Ref

End Sub

【讨论】:

    【解决方案2】:

    哇哦数组!!!!这是一段非常简单的代码。一旦你开始分解代码,这将教会你很多。

    Private Sub this()
        Dim bringOver As Variant
        Dim bringOver2 As Variant
        Dim j As Long
        Dim i As Long
        i = 0
        j = 0
        bringOver = ThisWorkbook.Sheets("Sheet1").UsedRange
        bringOver2 = ThisWorkbook.Sheets("Sheet2").UsedRange
        For i = LBound(bringOver2, 1) To UBound(bringOver2, 1)
            If bringOver2(i, 1) = bringOver(i, 1) Then
                Debug.Print ; bringOver2(i, 1)
                ThisWorkbook.Sheets("Sheet3").Cells(Sheet3.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = bringOver2(i, 3)
            End If
        Next i
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多