我需要以非常具体的方式整理来自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
答案 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