首页 > 解决方案 > Excel VBA - 比较由两列数据组成的值,两列在不同的工作表上

问题描述

我为基于序列号的库存创建了一个 Excel 文档。该文档由四张纸组成,主要、存储、传入历史和传出历史。在主工作表上,我有五列:“日期”、“旅行证件”、“设备类型”、“序列号”和“注释”。

我创建了一个 VBA 宏,用于将数据(带有序列号的多行)从主工作表传输到“存储”和传入/传出的相应列。到目前为止,一切都很好。

当我尝试对 VBA 进行编码以从存储表中删除行时,就会出现问题。我想要做的是将主表中带有设备类型和序列号的列与存储表上的相应两列进行比较。我已经设法,在查看此论坛上的其他代码的帮助下,制作了一个比较两张纸上的序列号列的 vba,然后删除相等的行。使用此代码:

Sub Utmeld()
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim CalcMode As Long
Dim ViewMode As Long

With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

With Sheets("storage")
      .Select


    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView


    .DisplayPageBreaks = False


    Firstrow = .UsedRange.Cells(1).Row
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row


    For Lrow = Lastrow To Firstrow Step -1

         With .Cells(Lrow, "F")
         If Not IsError(Application.Match(.Value, Sheets("Main").Range("F1:F200"), 0)) Then .EntireRow.Delete
         End With

      Next Lrow

End With

ActiveWindow.View = ViewMode
With Application
    .ScreenUpdating = True
    .Calculation = CalcMode
End With

End Sub

但是,问题是,我可能会偶然发现具有相同序列号的不同设备类型,因此我需要在比较中包含 E 列。简单伪代码:如果主工作表上的 E 和 F 列 = 存储工作表上的 E 和 F 列,则删除整行。

非常感谢任何有关如何解决此问题的帮助!

标签: excelvbaduplicatescompare

解决方案


尝试这个。保留您的原始脚本,但仅更改此部分

Lrow = Lastrow To Firstrow Step -1

If Worksheets("main").Cells(Lrow, 1) = Worksheets("storage").Cells(Lrow, 1) Then

Worksheets("storage").activate
Cells(Lrow, 1).EntireRow.Delete
Worksheets("main").activate
End If

Next i

推荐阅读