0

所以我有一个包含 6 个数据列表的工作表,每个列表有 6 列数据。在六个数据集中的每一个中,我只想提取那些具有匹配集数的数据。例如,

LIST 1        LIST 2         LIST 3         LIST 4         LIST 5         LIST 6
001 ------    003 ------     002 ------     003 ------     003 ------     003 ------
002 ------    004 ------     003 ------     006 ------     004 ------     005 ------
003 ------    005 ------     006 ------     007 ------     009 ------     013 ------

这是六个数据列表。此排序宏仅对每组中的第一列(001、004 等)感兴趣。在这里,每个列表共享行“003-----”。我想编写一个宏来删除任何与其他行不匹配的行。有没有一个宏可以解决这个问题,让我只剩下 003 -----?

我一直在写一个循环宏,上面写着“如果 Rng (A1) > Rng.Offset(,6) AND Rng > Rng.Offset(,12)... 然后(删除相关行)

但是,为此,我需要涵盖所有可用的可能性。我还缺少另一种更明显的方法吗?

部分数据截图(点击图片放大)

在此处输入图像描述

我要匹配的是以“BC ...”开头的数字,同时保留每列附带的四列

4

1 回答 1

2

这是代码。抱歉 O(n^4) 复杂性,但它有效。Whatching 你的打印屏幕我看到你需要第 6 步,所以我把那个 const 来帮助你。

Const STEP_COLUMN As Integer = 6

Sub foo()
    Dim lastRow As Integer, lastColumn As Integer
    Dim rowIndex As Integer, columnIndex As Integer
    Dim ok As Boolean, value As Double

    lastRow = Range("A10000").End(xlUp).Row
    lastColumn = Range("XX1").End(xlToLeft).Column
    For columnIndex = 1 To lastColumn Step STEP_COLUMN
        For rowIndex = 1 To lastRow

        value = Cells(rowIndex, columnIndex)
        Call deleteIfNotExistInEveryColumn(value, lastRow, lastColumn)

        Next rowIndex
    Next columnIndex
End Sub

Sub deleteIfNotExistInEveryColumn(value, lastRow, lastColumn)
    Dim rowIndex As Integer, columnIndex As Integer

    For columnIndex = 1 To lastColumn Step STEP_COLUMN
        hasValue = False
        For rowIndex = 1 To lastRow
            If value = Cells(rowIndex, columnIndex) Then
                hasValue = True
            End If
        Next rowIndex

        If Not hasValue Then
            ActiveSheet.Cells.Replace What:=value, Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        End If
    Next columnIndex
End Sub

PS:我可以使用 Match 并删除不在第一列中的每个数字[因为如果值不在第一列中,那么值不在每一列中:-)],但我更喜欢构建完整的代码优化

于 2013-11-13T12:38:03.983 回答