Alterar uma macro que só funciona se o intervalo começar com uma célula A1 ou T1 etc.

Alterar uma macro que só funciona se o intervalo começar com uma célula A1 ou T1 etc.

Tenho uma macro que funciona, mas gostaria de alterar o intervalo de células de

Set SearchRange = Range("E1:E12") to  
Set SearchRange = Range("A21:A32")

Fiz a alteração no código, mas não funcionará quando eu executá-lo e não tenho certeza de qual é o problema. Tenho uma explicação abaixo do código.

Sub Part()
    Dim SearchRange As Range, _
        DashPair    As Variant, _
        PairParts   As Variant, _
        SearchVal   As Variant, _
        FoundPos    As Variant, _
        NextCol     As Long

    Set SearchRange = Range("A21:A32")
    For Each DashPair In Range("B17, F17, J17")
        Err.Clear
        NextCol = 1
        If DashPair.Value <> "" Then
            PairParts = Split(DashPair, "-")
            If PairParts(1) = "15" Then
                SearchVal = DashPair.Offset(RowOffset:=1).Value

                On Error Resume Next
                 Set FoundPos = SearchRange.Find(SearchVal, LookAt:=xlWhole)
                If Not FoundPos Is Nothing Then
                    FoundPos = FoundPos.Row
                    ' find first empty column right of E
                    While SearchRange(FoundPos).Offset(ColumnOffset:=NextCol).Value <> ""
                        NextCol = NextCol + 1
                    Wend

                    PairParts(1) = PairParts(1) + 1
                    PairParts = Join(PairParts, "-")

                    With SearchRange(FoundPos).Offset(ColumnOffset:=NextCol)
                        .NumberFormat = "@"
                        .Value = "" & PairParts & ""
                    End With

                    DashPair.Resize(ColumnSize:=3).ClearContents
                End If
            End If  '15 found
        End If
    Next DashPair
End Sub

Exemplo com resultado esperado.

  • Por favor, veja meu exemplo do Excel, a macro procura 15 (como o último número 20-15 etc.) apenas nas células B17, F17 e J17 atualmente. Quando tem um resultado positivo, ele faz referência à célula abaixo dele e usa esse número para pesquisar uma correspondência nas células A21:A32 e colocar o copiar e colar na célula adjacente à direita dela.

  • Exemplo: a célula B30 tem 20-15, usando a célula abaixo, B18 tem 1. 1 é o número de pesquisa no intervalo A21:A32. Uma vez encontrado no intervalo A21:A32, coloque 20-15 na célula adjacente à direita (B21) e aumente o último número em 1 para que se torne 20-16.

  • Faz o mesmo com todas as células: B17, F17 e J17.

  • Após a gravação, exclui todo o conteúdo da célula B17/C17/D17. Existem dois exemplos em minha planilha Excel onde a mesma coisa precisa acontecer.

planilha excel

Responder1

O problema com o seu código está dentro do SearchRange(FoundPos). Isso só funciona neste aplicativo se o SearchRangeintervalo começar na linha 1.

Ao alterar o intervalo para A21:A32, sua variável FindPos será 21para o primeiro caso.
Isso resulta no SearchRange(FoundPos)retorno da 21ª linha do seu intervalo, ou seja A41, .

Existem várias maneiras de corrigir isso, mas para fazer alterações mínimas no código, você pode tentar substituir SearchRange(FoundPos)por ActiveSheet.Cells(FoundPos, SearchRange.Column).

informação relacionada