选择所有每个位置 - Excel宏或VBA等效

时间:2012-11-23 11:12:11

标签: excel excel-vba vba

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

对于Sheet1的每一行,我想“查找Sheet2上的所有行WHERE Sheet1 ColumnA是LIKE Sheet 2 ColumnA AND Sheet1 ColumnB是LIKE Sheet2 ColumnB”。我想我可能会使用EQUALS而不是带有通配符的LIKE。

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

显然有人想为我编写代码然后我会高兴极了! :) 但是,即使有人能够让我知道我需要的最佳功能,我仍然会非常感激,只是研究它们并将自己的东西放在一起。

提前致谢,

修改

添加下面的示例,第一张纸张1,然后是纸张2,然后在宏运行后添加纸张1的所需结果。同样在上面我说我会搜索“LIKE”匹配,但是更准确的说我想搜索CELL CONTAINS

Sheet 1 Before Macro

Sheet 2 Containing Info

Sheet 1 After Macro

1 个答案:

答案 0 :(得分: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