0

我需要以一种非常具体的方式从 3 个 Excel 电子表格中整理数据,但是我在找到我需要使用的功能或命令方面绝对没有运气,而且由于某种原因,即使谷歌今天也没有帮助我。

对于 Sheet1 的每一行,我想“在 Sheet2 上查找所有行,其中 Sheet1 ColumnA 类似于 Sheet 2 ColumnA 并且 Sheet1 ColumnB 类似于 Sheet2 ColumnB”。我想我可能可以使用 EQUALS 而不是 LIKE 和通配符。

然后,对于第一个查询找到的每个结果,我想在 Sheet1 的当前行下方插入一个新行,并将 Sheet2 ColumnC 中的数据复制到新插入的行 ColumnC 中。我想我还需要计算第一个查询返回的行数,以便我可以告诉它在重复循环之前跳过那么多行,尽管即使它对那些新行执行循环它也应该无论如何都找不到任何结果。

显然有人想为我编写代码,那我会大喜过望!:) 但是,即使有人能够让我知道我需要的每一位使用的最佳功能,我仍然会非常感激,只是研究它们并自己组装一些东西。

提前致谢,

编辑

在下面添加了示例,首先是工作表 1,然后是工作表 2,然后是运行宏后工作表 1 的所需结果。同样在上面我说过我将搜索“LIKE”匹配项,但是说我想搜索 CELL CONTAINS 的位置会更准确

宏之前的表 1

表 2 包含信息

宏之后的第 1 页

4

1 回答 1

1

好吧,以下是我的解决方案。顺便说一句,如果您可以保证单元格已经排序,则可以优化代码以减少比较时间。

//Code is not tested
Sub Collate()

    Dim row1 As Long
    Dim row2 As Long
    Dim match As Boolean

    Dim lastRow1 As Long
    Dim lastRow2 As Long

    Dim valA1 As String
    Dim valB1 As String
    Dim valA2 As String
    Dim valB2 As String
    Dim valC2 As String

    lastRow1 = Sheet1.Cells.SpecialCells(xlCellTypeLastCell).Row
    lastRow2 = Sheet2.Cells.SpecialCells(xlCellTypeLastCell).Row

    row1 = 2
    While row1 <= lastRow1
        valA1 = "*" & Sheet1.Cells.Range("A" & row1).Value & "*"
        valB1 = "*" & Sheet1.Cells.Range("B" & row1).Value & "*"
        For row2 = 2 To lastRow2
            valA2 = Sheet2.Cells.Range("A" & row2).Value
            valB2 = Sheet2.Cells.Range("B" & row2).Value
            valC2 = Sheet2.Cells.Range("C" & row2).Value
            If valA2 Like valA1 And valB2 Like valB1 Then
                match = True
                row1 = row1 + 1
                lastRow1 = lastRow1 + 1
                Sheet1.Cells.Range("A" & row1).EntireRow.Insert
                Sheet1.Cells.Range("C" & row1).Value = valC2
            End If
        Next row2

        row1 = row1 + 1
    Wend

End Sub
于 2012-11-24T02:48:58.753 回答