Encontrar numero y remplazarlo

Hola a todos, me preguntaba si es posible crear una macro donde:
Tengo esta formula en la celda activa ='\\Ing3\[Ing3 julio 2011.xlsm]Nuevos productos'!$O$15 
La cuestión es si es posible identificar el número del final (15) y lo reemplace por el nº+1 (16)
Gracias

1 respuesta

Respuesta
1
La siguiente expresión VBA hace lo que necesitas, creo:
Left(ActiveCell.Formula, InStrRev(ActiveCell.Formula, "$")) & CStr(CInt(Mid(ActiveCell.Formula, InStrRev(ActiveCell.Formula, "$") + 1)) + 1)
Por ejemplo, si la celda activa tiene:
='\\Ing3\[Ing3 julio 2011.xlsm]Nuevos productos'!$O$15
La expresión devolverá:
='\\Ing3\[Ing3 julio 2011.xlsm]Nuevos productos'!$O$16
La teoria es esa, lo que me da error. Me dice que se esperaba un = en lugar de &. Lo cambio por = y me da error "se requiere objeto".
Lo que he puesto es la expresión necesiaria para aumentar en 1 el número situado a la derecha. No se trata de una sentencia completa, no tengo forma de saber qué es lo que pretendes hacer con la nueva cadena así que no puedo escribir la sentencia. Pero puedes ver que funciona si pones, por ejemplo:
Sub prueba()
    MsgBox Left(ActiveCell.Formula, InStrRev(ActiveCell.Formula, "$")) & CStr(CInt(Mid(ActiveCell.Formula, InStrRev(ActiveCell.Formula, "$") + 1)) + 1)
End Sub
Si si, eso lo se. Lo había probado así y me daba esos errores. Lo que pretendo es reemplazar los números (en este caso el 15 por el 16). La celda es una celda copiada, de ahí el reemplazo.
Perdona con el message box sale perfecto. Pero cm te digo arriba, es reemplazar los números.
La verdad es que no termino de comprender qué es lo que necesitas, pero si se trata de aumentar el número de fila de la fórmula de la celda activa prueba con algo parecido a:
Sub prueba()
    ActiveCell.Formula = Left(ActiveCell.Formula, InStrRev(ActiveCell.Formula, "$")) & CStr(CInt(Mid(ActiveCell.Formula, InStrRev(ActiveCell.Formula, "$") + 1)) + 1)
End Sub
Funciona perfecto en una celda induvidual, solo un apunte más que si resulta muy complicado no pasa nada. Es si se puede hacer en el rango de celdas seleccionado, por ejemplo, si tengo seleccionadas -> Range("B4:D6").select, lo haga en todas esas celdas.
Sub prueba()
    Dim rngC As Range
    Range("B4:D6").Select
    For Each rngC In Selection.Cells
        rngC.Formula = Left(rngC.Formula, InStrRev(rngC.Formula, "$")) & CStr(CInt(Mid(rngC.Formula, InStrRev(rngC.Formula, "$") + 1)) + 1)
    Next rngC
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas