
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.
Respuesta1
El problema con su código radica en SearchRange(FoundPos)
. Esto sólo funciona en esta aplicación si el SearchRange
rango comienza en la fila 1.
Al cambiar el rango a A21:A32
, su variable FindPos será 21
para 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)
.