¿Como puedo mejorar el resultado de la instrucción dada en macro para copiar celda según condición?

Les comento que he tratado de mejorar esta instrucción tratando que el resultado no quede como "valor" si no como igual a la celda del valor, es decir que el resultado quede formulado como un duplicado a la celda origen, de igual forma me gustaría que la macro identifique si donde la celda resultado hay algún contenido que no lo copie y que siga con el proceso donde estén en blanco las celdas

Sub BuscaxCantidadesIMP()
Range("J6500").End(xlUp).Offset(1, 0).Value = "Ufila"
Range("J3").Select
Do While ActiveCell.Value <> "Ufila"
Valor = ActiveCell.Value
If Valor > "0" Then
ActiveCell.Offset(1, -4).Value = Valor
End If
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.ClearContents
End Sub

1 Respuesta

Respuesta
1

[Hola

Para poder entenderte mejor, sería bueno que compartas el archivo con al menos parte de los datos ya que para explicar usas definiciones que no necesariamente todos entendemos. Como el foro no permite adjuntar archivos sugiero usar algún Drive (Google Drive, OneDrive, DropBox, etc.) y compartir por aquí el enlace. De tener datos que no quieres compartir, solo bórralos y deja los suficientes para entender tu dilema (y vuelve a explicar señalando a qué llamas de cada forma).

Abraham Valencia

Hola Abraham Valencia, de antemano gracias por ocupar tu tiempo en este tema, mil gracias. te adjunto el archivo compartido desde OneDrive:

 https://1drv.ms/x/s!AhanRbYDb2o1gP8EzYQvMgi5PYiM1w?e=0kGBAn, Puse dos hojas en el archivo .xlsm, una BASEDEM_V0 es como es el caso inicial y BASEDEM_V1 es como logro que quede con la macro que al inicio te menciono, lo que quiero es que cuando se den los resultados a partir de los valores de las columnas J, K y M, N en la columna F y G respectivamente estos no se den como valor sino como una copia de la celda origen, es decir en el caso de la columna J en la celda J3 cuando pase a la columna F en la celda F4 no pase como valor si no como "=J3"  como copia de la celda original donde estaba el valor que traspaso de celda, de igual forma en el mismo caso si en F4 hubiera ya un valor pre establecido que se siga recorriendo la columna J para evaluar en que caso si se puede pasar el valor como copia a la columna F que seria donde la celda receptora este en blanco; este seria el caso que se me presenta. 

Saludos

Hola Abraham Valencia te paso este enlace en GoogleDrive por si tienes problema con descargar el que te di en el anterior comentario https://drive.google.com/file/d/12y0SV7t5W9O4N19bJqMN8DGFStnVqZVE/view?usp=sharing 

Saludos

Cuando lees tu explicación supongo que para ti se entiende, pero debes recordar que desde este lado de la pantalla no sabemos con exactitud lo que deseas y no se termina de entender la explicación. Si bien has enviado un archivo, y eso debería ayudar, no se entiende qué es lo que se hace, qué es lo que debe de pasar de una hoja a otra, más aún porque has puesto tal cantidad de datos que es complicado saber cuándo pasa de una a otra y con qué valores se complementa; lo que si quedó claro es que no quieres es copiar valores sino generar vínculos a las celdas, pero igual no sé entiende cuándo generarlos.

Sugiero, nuevamente, y basado en tu archivo, expliques al menos uno de los casos ¿qué pasó de qué hoja a cuál y por qué? Detallando celda por celda, ojo, para entenderlo.

Abraham Valencia

Hola Abraham Valencia, la hoja BASEDEM_V0 es como están los datos inicialmente aclarando que todos están formulados para el resultado que allí se encuentra y la hoja BASEDEM_V1 es como quedan después de ejecutar la macro que tengo en el libro, es decir el resultado deseado. los datos que resalto con color están relacionados entre ellos, las celdas de color en las columnas F y G originalmente estaban vacías como se muestra en BASEDEM_V0. Así mismo los valores para la columna F en las celdas que estaban vacías deben ser los de las celdas que están coloreadas en las columnas J y K respectivamente, lo mismo para las celdas coloreadas de la columna G que estaban vacías deben ser los de las celdas que están coloreadas en las columnas M y N respectivamente. Los valores que tienen el texto rojo es por que no se deben mover con la macro ya que ya están definidos por formulación en excel.

Aclaró que las hojas mencionadas (BASEDEM_V0 y BASEDEM_V1) es la misma información solo que la V0 es como se encuentran inicialmente los datos y la V1 es resultado deseado en el proceso.

Antes de este proceso tengo otra macro para insertar las filas según el número de repetidos que representó en la columna D, para así tener los espacios vacíos para introducir la información de las celdas coloreadas que se resume en que si en las columnas J y K, M y N hay valores diferentes a cero o vacío pasarlos a los espacios generados previamente en la columna F y G respectivamente.

https://drive.google.com/file/d/1hgKyfJr-6YmuVBgKGdbrc1-x1bHACH1R/view?usp=sharing 

Agradezco el tiempo que te tomas para esto. Saludos

Ajá, ahora sí que te entendí estimado. Ya tengo idea de cómo hacer, pero para ver si puede hacerse todo con una pocas líneas, o no, mi última pregunta sería: así como las filas 18 y 19 ¿varios registros pueden tener solo dos líneas y otros tres? Ah, perdón, una más ¿puede haber de forma indiferente dicha disposición? o sea 3,3,2,2,3 o 3,2,3,2,3, etc.

Abraham Valencia

Hola Abraham Valencia correcto, así como en la filas 18 y 19 pueden haber registros con 2 líneas esto en una tabla con más o menos datos siendo indiferente la lógica de este orden es decir 3,3,2,1,3,2,3,3,2,3,2 un orden cualquiera de filas con los mismos registros de la tabla, de antemano agradezco el tiempo que te tomas en el tema...

Saludos 

Listo, prueba así:

Sub InsertarDato()
Dim Celda As Range
Dim UltimaFila As Long, x As Long
Dim Valores(1 To 4) As Integer
Let UltimaFila = Cells(Rows.Count, 10).End(xlUp).Row
Valores(1) = 0: Valores(2) = 1: Valores(3) = 3: Valores(4) = 4
For Each Celda In Range("J3:J" & UltimaFila)
    For x = 1 To 4
        If Celda.Offset(0, Valores(x)) <> "" Or Celda.Offset(0, Valores(x)) <> 0 Then
            If Valores(x) = 0 Or Valores(x) = 1 Then
                Celda.Offset(Valores(x) + 1, -4).Formula = "=" & Celda.Offset(0, Valores(x)).Address(0, 0)
            Else
                Celda.Offset(Valores(x) - 2, -3).Formula = "=" & Celda.Offset(0, Valores(x)).Address(0, 0)
            End If
        End If
    Next x
Next Celda
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas