查找两列之间包含相同值的行

时间:2016-01-06 13:51:36

标签: vb.net excel

我的工作簿中的每一行都是一个建筑物ID。我的工作簿中的每一列都是一个项目ID。

每个项目与每个建筑物交叉处的单元格包含一个数字。此数字表示该建筑物中该项目的数量。如果建筑物没有该项目,则在交叉单元​​格中放置零。

我需要知道哪些建筑物的库存相同,即哪些建筑物具有相同的物品和相同数量的物品。

为此,我编写了一个脚本,将每个建筑物的整个交叉点范围复制到剪贴板,然后将其粘贴到我称为DNA细胞的细胞中。这个DNA细胞只是所有交叉数的长串联串。

在这个过程结束时,我会检查哪些DNA具有重复的DNA字符串并从那里开始。

我得到了它的工作,但它非常慢,即使屏幕更新关闭。当然,我正在做一个包含214列和150行的工作表,但我仍然认为它应该更快。

有没有更好的方法来实现我想要的?基本上我需要为每一行找出D和该行中最后一列之间的所有单元格中的值是否与任何其他行相同。

因此,如果第75行和第96行在D和最后一列之间的每一列中都具有相同的值,则它们将被视为"类似于"我会标记它们。

我的代码如下:

        ' start excel application 
    oXL = New Excel.Application
    oXL.Visible = True
    ' Get a new workbook.

    oXL.Application.ScreenUpdating = False
    oWB = oXL.Workbooks.Add


    oSheet = oWB.ActiveSheet

    oWB.Worksheets(1).range("a1").select()
    oWB.Worksheets(1).Paste()

    oSheet.UsedRange.Copy()
    oWB.Worksheets.Add()
    Dim transposeSheet As Worksheet

    oWB.Worksheets("Sheet2").range("a1").select()
    oWB.Worksheets("Sheet2").range("a1").PasteSpecial(Transpose:=True)

    transposeSheet = oWB.ActiveSheet

    With transposeSheet




        .Columns("c:c").Insert(Microsoft.Office.Interop.Excel.Constants.xlRight)
    End With

    Dim lastRow As Long
    Dim lastCol As String
    Dim xlCells As Excel.Range = transposeSheet.Cells
    Dim xlTempRange As Excel.Range = xlCells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell)
    lastRow = xlTempRange.Row
    lastCol = xlTempRange.Column
    Dim columnLetter As String = ColumnIndexToColumnLetter(lastCol)
    lastCol = columnLetter

    Dim DNAholder As String
    Dim c As Range

    For Each c In transposeSheet.Range("c6:c" & lastRow)

        isLooping = True

        If stopPlz = True Then

            stopPlz = False
            isLooping = False
            oXL.Application.ScreenUpdating = True
            Exit For
        End If

        transposeSheet.Range("d" & c.Row & ":" & lastCol & c.Row).Copy()
        DNAholder = Clipboard.GetText
        c.Value = DNAholder

    Next c

    isLooping = False
    oXL.Application.ScreenUpdating = True
End Sub

0 个答案:

没有答案