我的工作簿中的每一行都是一个建筑物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