Como ingresar esta fórmula mediante una macro

Les adjuntare un código en el que he estado trabajando, la idea es que se cree una nueva hoja y en ella se enumeren los números del 1 hasta el número que indique una variable. Luego de eso enfrente de cada número colocado debe ingresar esta fórmula

SI.ERROR(BUSCARV(A2;ITEMS!$B$6:$C$8885;2;0);" ")

Pero hay 2 cosas que me generan dudas:

  1. En algunos excel para ingresar las fórmulas no se usa ";" si no "," es decir, para algunos excel la fórmula estaría como la adjunte anteriormente y en otros estaría así
    SI. Error(buscarv(a2, items!$B$6:$C$8885,2,0)," ")
    Así que como podría hacer que esa formula funcione en cualquier excel?
  2. El dato que se va a buscar "A2" debe ir incrementando, es decir, en la primer celda donde se coloque (la cual sería "B2") la formula estaría bien así, pero luego cuando al coloque en la siguiente fila (Osea "B3") la formula debería quedar así
    SI.ERROR(BUSCARV(A3;ITEMS!$B$6:$C$8885;2;0);" ")
    Y así sucesivamente, entonces como puedo hacer que ese dato vaya en incremento?

Les adjunto el código que tengo y una imagen del resultado que deseo

'Declaro variables
ref = ActiveSheet.Range("B8895").Value 'Este dato se toma de otra hoja, el dato es númerico y será variable
tope = ref + 1
cont = 1
'Creo una nueva hoja y me dirijo a ella
Worksheets.Add(After:=ActiveSheet).Name = "DATOS_RESUMEN2"
Sheets("DATOS_RESUMEN2").Select
ActiveSheet.Range("A2").Select
'Empiezo a hacer una comparacion, donde digo que si la celda activa es igual a la variable tope, entonces que cuente cuantas celdas con datos hay en la columna A, si la celda y la variable son diferentes entonces deberá ir númerando en secuencia: 1, 2, 3, 4
For i = 2 To tope
    If ActiveCell = tope Then
        Range("A2").Select
        rng = WorksheetFunction.CountA(Range("A:A")) ' la idea de saber cuantos datos hay es que a la hora de ingresar la formula, se ingrese en el mismo numero de filas
    Else
        'Aca es donde empiezo a enumerar las filas
        ActiveCell.Value = cont
        cont = ActiveCell.Value + 1
        ActiveCell.Offset(1, 0).Select
    End If
Next i
'A partir de acá es donde debería pegar la macro que ingrese la formula

2 Respuestas

Respuesta
2

Este es el resultado de la macro

y esta es la macro lo de la doble fórmula con, y von ; si va a ser un problema ya que esta maquina esta diseñada para poner como primera opción ; si la PC tiene un formato diferente colocara la segunda opción, no se como funcione al revés, es decir con la, como primera opción.

Sub test2()
Worksheets.Add(After:=ActiveSheet).Name = "DATOS_RESUMEN2"
ref = 1000 'Este dato se toma de otra hoja, el dato es númerico y será variable
tope = ref + 1
cont = 1
Set datos = Range("a2").Resize(tope, 2)
With datos
    .Cells(1, 1) = 1
    .Cells(1, 1).AutoFill Destination:=Range(.Columns(1).Address), Type:=xlFillSeries
    On Error Resume Next
    .Columns(2).Formula = "=iferr(vlookup(a2;items!$b$6:$c$8885;2;0);" & """" & ")"
    If Err.Number > 0 Then
        .Columns(2).Formula = "=iferror(vlookup(a2,items!$b$6:$c$8885,2,0),"""")"
    End If
    On Error GoTo 0
End With
Set datos = Nothing
End Sub

Sorry hay un error en la macro anterior esta es la buena

Sub test()
'Declaro variables
ref = 1000 'Este dato se toma de otra hoja, el dato es númerico y será variable
tope = ref + 1
cont = 1
'Creo una nueva hoja y me dirijo a ella
Worksheets.Add(After:=ActiveSheet).Name = "DATOS_RESUMEN2"
Sheets("DATOS_RESUMEN2").Select
ActiveSheet.Range("A2").Select
'Empiezo a hacer una comparacion, donde digo que si la celda activa es igual a la variable tope, entonces que cuente cuantas celdas con datos hay en la columna A, si la celda y la variable son diferentes entonces deberá ir númerando en secuencia: 1, 2, 3, 4
For i = 2 To tope
    If ActiveCell = tope Then
        Range("A2").Select
        Rng = WorksheetFunction.CountA(Range("A:A")) ' la idea de saber cuantos datos hay es que a la hora de ingresar la formula, se ingrese en el mismo numero de filas
    Else
        'Aca es donde empiezo a enumerar las filas
        ActiveCell.Value = cont
        cont = ActiveCell.Value + 1
        ActiveCell.Offset(1, 0).Select
    End If
Next i
'A partir de acá es donde debería pegar la macro que ingrese la formula
End Sub
Sub test2()
Worksheets.Add(After:=ActiveSheet).Name = "DATOS_RESUMEN2"
ref = 1000 'Este dato se toma de otra hoja, el dato es númerico y será variable
tope = ref + 1
cont = 1
Set datos = Range("a2").Resize(tope, 2)
With datos
    .Cells(1, 1) = 1
    .Cells(1, 1).AutoFill Destination:=Range(.Columns(1).Address), Type:=xlFillSeries
    On Error Resume Next
    .Columns(2).Formula = "=iferror(vlookup(a2;items!$b$6:$c$8885;2;0);"""")"
    If Err.Number > 0 Then
    .Columns(2).Formula = "=iferror(vlookup(a2,items!$b$6:$c$8885,2,0),"""")"
    End If
    On Error GoTo 0
End With
Set datos = Nothing
End Sub

Hola gracias por responder, te cuento que probando la macro que propones me sale error en la línea

.Cells(1, 1).AutoFill Destination:=Range(.Columns(1).Address), Type:=xlFillSeries

Este es el error

En el mensaje de error esta la respuesta a tu pregunta, la macro no funciona si tienes lienas combinadas, necesitas quitarlas antes de correr la macro

Ninguna de las columnas o filas que se usan en la macro tienen celdas combinadas

De hecho en ninguna de las hojas con las que la macro trabaja tienen celdas combianadas

Pues sin ver el archivo esta difícil decir donde esta el error, mira te envío el archivo, la macro funciona https://1drv.ms/x/s!Aqt18sdMf2xXiRg0z_dwulHn-WbN lo que puede ser es que estas copiando mi codigo dentro de tu codigo, lo cual es redundante puesto que mi codigo hace todo lo que hace el tuyo, yo sugiero que uses la macro tal cual te la mande, como veras en el ejemplo que te envio

Respuesta
1

Descombina las celdas ejecuta la macro y vuelve a combinar celdas

Para combinar usa merge para descombinar unmerge

Range(A1:G1). Merge

Range(A1:G1). Unmerge

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas