如何将找到的细胞转变为范围?

时间:2016-06-15 18:12:33

标签: vba excel-vba copy find range

如果你能提供帮助我真的很感激,因为我真的很想让它发挥作用。我这里有一些代码,用于从电子表格的一个部分提取信息,并将其粘贴到电子表格另一部分的表格中。

For i = 1 To 24
        Range("J11:J100").Select
        Set foundCell = Cells.Find(What:="PL " & i, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False)
        If Not foundCell Is Nothing Then
            foundCell.Activate
            foundCell.Copy
            Range("P" & (i + 10)).Select
            ActiveSheet.Paste
        End If
        Next

主要问题是我还希望使用foundCell作为参考来复制周围列的信息,例如。 foundCell.Offset(, -4).Copy

我添加了这个,但它不起作用(附录已标记):

    For i = 1 To 24
            Range("J11:J100").Select
            Set foundCell = Cells.Find(What:="PL " & i, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False)
            If Not foundCell Is Nothing Then
                foundCell.Activate
                foundCell.Copy
                Range("P" & (i + 10)).Select
                ActiveSheet.Paste
' BEGIN ADDITION
                foundCell.Offset(, -4).Copy
                Range("S" & (i + 10)).Select
                ActiveSheet.Paste
'END ADDITION
            End If
            Next

我测试了一下,发现现在找到的FoundCell引用了粘贴数据的范围而不是原始范围。

任何人都可以帮助我吗?我对任何事情都持开放态度。我觉得最好的解决方案是将foundCell变成一个范围,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:3)

我认为这会做你想要的。在J11:J100范围内找到所需的单元格后,它会查看F列中与找到的单元格对应的单元格,并将它们粘贴到所需的单元格中。

SELECT distinct wp_posts.post_title, IF (wp_term_taxonomy.taxonomy = 'calificaciones', wp_terms.slug, 'no') as calificacion
FROM wp_posts
JOIN wp_term_relationships ON (wp_term_relationships.object_id = wp_posts.ID)
JOIN wp_term_taxonomy ON (wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id)
JOIN wp_terms ON (wp_terms.term_id = wp_term_taxonomy.term_id)

AND wp_posts.post_type = 'ultimas-noticias'
#AND wp_term_taxonomy.taxonomy = 'calificaciones'

与其他答案一样,我避免使用select,因为它只会减慢代码速度。使用多个(命名)范围可以在不使用剪贴板的情况下复制数据。

答案 1 :(得分:2)

以下内容可以解决您的问题:

For i = 1 To 24
    Set foundCell = Cells.Find(What:="PL " & i, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
    If Not foundCell Is Nothing Then
        foundCell.Copy Destination:=foundCell.Parent.Range("P" & (i + 10))
        ' BEGIN ADDITION
        If foundCell.Column > 4 Then
            foundCell.Offset(0, -4).Copy Destination:=foundCell.Parent.Range("S" & (i + 10))
        End If
        'END ADDITION
    End If
Next i

基本上,问题是代码中的select。您可能希望阅读以下有关如何在将来避免它们的帖子: How to avoid using Select in Excel VBA macros