Cambiar una macro que solo funciona si el rango comienza con una celda A1 o T1, etc.

Cambiar una macro que solo funciona si el rango comienza con una celda A1 o T1, etc.

Tengo una macro que funciona pero me gustaría cambiar el rango de celdas de

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

Hice el cambio en el código pero no funcionará cuando lo ejecuto y no estoy seguro de cuál es el problema. Tengo una explicación debajo del 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

Ejemplo con resultado esperado.

  • Consulte mi ejemplo de Excel, la macro busca un 15 (como último número 20-15, etc.) actualmente solo en las celdas B17, F17 y J17. Cuando tiene un resultado positivo, hace referencia a la celda debajo y usa ese número para buscar una coincidencia en las celdas A21: A32 y coloca la copia y pega en la celda adyacente a la derecha de ella.

  • Ejemplo: la celda B30 tiene un 20-15, usando la celda a continuación, B18 tiene un 1. 1 es el número de búsqueda en el rango A21:A32. Una vez encontrado en el rango A21:A32, coloque el 20-15 en la celda adyacente a la derecha (B21) y aumente el último número en 1 para que se convierta en 20-16.

  • Hace lo mismo con todas las celdas: B17, F17 y J17.

  • Después de la escritura, se elimina todo el contenido de la celda B17/C17/D17. Hay dos ejemplos en mi hoja de Excel en los que debe suceder lo mismo.

hoja de Excel

Respuesta1

El problema con su código radica en SearchRange(FoundPos). Esto sólo funciona en esta aplicación si el SearchRangerango comienza en la fila 1.

Al cambiar el rango a A21:A32, su variable FindPos será 21para el primer caso.
Esto da como resultado que SearchRange(FoundPos)se devuelva la fila 21 de su rango, es decir A41.

Hay muchas formas de solucionar este problema, pero para realizar cambios mínimos en el código, puedes intentar reemplazarlo SearchRange(FoundPos)con ActiveSheet.Cells(FoundPos, SearchRange.Column).

información relacionada