MACRO VBA no copia y pega cuando el valor que hay en la celda es generado por una fórmula.

Tengo una macro la cual utilizo para copiar y pegar unos datos de una tabla, y los pegue en otra quitando los espacios en blanco y solo pegando consecutivamente los datos que tienen valor.

La macro me funcionaba bien pero cuando la voy a utilizar y los números de la tabla que va a copiar son números generados por una fórmula de condición como por EJEMPLO:

=SI"Xcelda cumple con determinada funcion";generar numero aleatorio";"")

Entonces cuando la EJECUTO, la macro no copia nada. Osea copia todo en blanco en la otra tabla, no se si es porque los valores son generados por esta fórmula o que pasara, el formato de la celda es "GENERAL" así lo he usado siempre, a continuación subo la macro y también un pantallazo de la hoja excel. "la hoja es un ejemplo"

La macro es:

Sub Tabla_Unica()
'Por Dante Amor
    Application.ScreenUpdating = False
    On Error Resume Next
    u = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    cols = s
    For i = 3 To u
       Range("G1").copy
       Range("H" & i & ":M" & i).SpecialCells(xlCellTypeConstants, 23).Copy
        Range("O" & i).PasteSpecial Paste:=xlPasteValues
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

la hoja es la siguiente, alli en la parte de arriba de cada cuadro coloco la formula que tiene para que ustedes la creen en una hoja y hagan la prueba mas facil.

1 Respuesta

Respuesta
1

Hay un problema con lo que pides tienes campos formulados que van a cambiar de valores en cuanto se peguen los resultados, esto se soluciona copiando los la hoja y pegando la informacion como valores, luego corres la macro que anexo, el resultado sera como lo ves en la imagen

y esta es la macro

Sub tunica()
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
With Range("a2").CurrentRegion
    f = .Rows.Count
    c = .Columns.Count
End With
Set numeros = Range("h2").Resize(f - 1, c)
Set resultado = Range("o2").Resize(f - 1, c)
matriz = resultado
For i = 1 To f - 1
x = 1
    For j = 1 To c
        numero = numeros.Cells(i, j)
        If IsNumeric(numero) Then
            matriz(i, x) = numero
            x = x + 1
    End If
    Next j
Next i
Range(resultado.Address) = matriz
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub

¡Gracias! 007

Le diste donde era,,, si me surge otra duda respecto a esta macro te estoy molestando de nuevo,, pues con el pasar de mi tabla empiezo a ver algunas otras cositas para mejorarle

Pero quedo fantástica

Bendiciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas