Application.ConvertFormula en una parte de la fórmula

¿Alguna manera de convertir la fórmula en celdas relativas a absolutas? Pero por partes, ejemplo:

=BUSCARV($B$12;'[Lista 01.xlsx]Hoja1'!A5:B7;2;FALSO)

$B$12 = esta primer parte quede en B12 pero la segunda parte 

A5:B7 = pase a A$5:$B$7

Con la siguiente macro puedo cambiar todas a celdas con referencias absolutas o relativas :

Sub test()
Dim xRg As Range
Dim xTxt As String
Dim xCell As Range
On Error Resume Next
If ActiveWindow.RangeSelection.Count > 1 Then
xTxt = ActiveWindow.RangeSelection.AddressLocal
Else
xTxt = ActiveSheet.UsedRange.AddressLocal
End If
Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
For Each xCell In xRg
xCell.Formula = Application.ConvertFormula(xCell.Formula, xlA1, , xlAbsolute)
Next
End Sub

pero quisiera que se lo haga por parte, como describí arriba por favor, o en todo caso alguna manera que mediante el inputbox que utilizo pueda tomar el dato sin hacer la referencia absoluta "$B$12$

y en el otro inputbox que lo haga con referencia relativa A5:B7

los inputbox los tengo de la siguiente manera:

Set reff = Application.InputBox("Que quieres buscar", _
"Select Range", Type:=8)
Set rngSelection = Application.InputBox("en donde lo buscaremos", _
"Select Range", strRng, Type:=8)

la idea de todo esto es que me quede una formula, que me permita copiarla hasta lo ultimo de la hoja, buscando los valores segun la lista.

=BUSCARV(B12;'[Lista 01.xlsx]Hoja1'!$A$5:$B$7;2;FALSO)

1 respuesta

Respuesta
1

Prueba lo siguiente. Agregué otro input box para que selecciones las celdas donde quieres poner la fórmula.

Sub CrearFormula()
  Dim reff As Range, rngSelection As Range, rngFormula As Range
  '
  With Application
    On Error Resume Next
    Set reff = .InputBox("Que quieres buscar", "RANGO", Type:=8)
    Set rngSelection = .InputBox("en donde lo buscaremos", "RANGO", Type:=8)
    Set rngFormula = .InputBox("en donde quieres la fórmula", "RANGO", Type:=8)
    On Error GoTo 0
  End With
  '
  If reff Is Nothing Or rngSelection Is Nothing Or rngFormula Is Nothing Then Exit Sub
  rngFormula.Formula = "=VLOOKUP(" & reff.Address(0, 0) & "," & rngSelection.Address(External:=True) & ",2,0)"
End Sub

Funciona muy bien, el problema estaba en :

reff.Address(0, 0)

al parecer ahí estaba el error, ¿cómo haría para que la fórmula se copie 45 veces desde la fórmula activa y omitiendo errores en caso el rango en el que buscarv este vacío?, por favor.

La macro te crea la fórmula, no es necesario una "fórmula activa".

La macro crea la fórmula y te la repite el número de celdas que seleccionas en el tercer input.

Sub CrearFormula()
  Dim reff As Range, rngSelection As Range, rngFormula As Range
  '
  With Application
    On Error Resume Next
    Set reff = .InputBox("Que quieres buscar", "RANGO", Type:=8)
    Set rngSelection = .InputBox("en donde lo buscaremos", "RANGO", Type:=8)
    Set rngFormula = .InputBox("en donde quieres la fórmula", "RANGO", Type:=8)
    On Error GoTo 0
  End With
  '
  If reff Is Nothing Or rngSelection Is Nothing Or rngFormula Is Nothing Then Exit Sub
  rngFormula.Formula = "=IFERROR(VLOOKUP(" & reff.Address(0, 0) & "," & rngSelection.Address(External:=True) & ",2,0),"""")"
End Sub

Así es como lo tienes diseñado.

Tal vez no necesites ningún input.

Tal vez necesitas solamente una macro que ponga la fórmula en todas las celdas desde J12 y hasta la última fila con datos de la columna B.

Y lo anterior es más simple:

Sub CrearFormula2()
  With Range("J12:J" & Range("B" & Rows.Count).End(3).Row)
    .Formula = "=IFERROR(VLOOKUP(B12,'[Lista 01.xlsx]Hoja1'!$A$5:$B$7,2,0),"""")"
  End With
End Sub

Y si quieres cambiar las fórmulas por valores:

Sub CrearFormula2()
  With Range("J12:J" & Range("B" & Rows.Count).End(3).Row)
    .Formula = "=IFERROR(VLOOKUP(B12,'[Lista 01.xlsx]Hoja1'!$A$5:$B$7,2,0),"""")"
    .Value = .Value
  End With
End Sub

[Sal u dos. No olvides la valoración.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas