Buenas... Estimados quiero eliminar celdas en blanco y acomodar números.

Por ejemplo

En la primera fila tengo del 1 al 50 en la segunda 51 a 100, así hasta el 1000

En el medio hay celdas en blanco, se elimino el 2,, 17 y en la segunda se elimino el 58 y 44..

Quiero eliminar lo que esta en blanco y que se acomode con el que sigue, ya sea de la derecha o el de abajo... ¿y qué quede 50 números por fila y acomodados eliminando los vacíos... Se puede con alguna macro o procedimiento?

2 Respuestas

Respuesta
1

Puedes poner una imagen de cómo están tus datos.

Y otra imagen con el resultado que quieres.

Observa cómo debes poner un ejemplo:

Esto seria más o menos lo que tengo... pero es hasta el 1000... quiero que se acomode y eliminar las vacías... y que quede todo en 10 columnas como esta la imagen

Según tu imagen en la celda D2 tienes una celda en blanco.

¿Cómo se debe rellenar con el de la derecha o con el de abajo?

¿Tienes una regla para saber si toma el de la derecha o el de abajo?

Eliminar las celdas en blanco y correr el más próximo a ese lugar...

Hasta tener todo ordenado y en 10 celdas como esta la imagen.

Pensaba en alguna macro ya que las herramientas de excel no me sirvieron

Pon todo el siguiente código en un módulo y ejecuta la macro rellenar_blancos.

La macro leerá todos los números que tienes en las columnas A a la J y pondrá el resultado en las columnas de la M a la V.

Sub rellenar_blancos()
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long, lr As Long
  '
  lr = ActiveSheet.Range("A:J").Find("*", , xlValues, , xlByRows, xlPrevious).Row
  a = Range("A1:J" & lr).Value
  ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
  '
  For i = 1 To UBound(a, 1) - 1
    For j = 1 To UBound(a, 2)
      If a(i, j) = "" Then
        If j = 10 Then
          Call rellenarabajo(a, i, j, 1)
        Else
          Call rellenarderecha(a, i, j)
        End If
      End If
    Next
  Next
  Range("M1").Resize(UBound(a, 1), UBound(a, 2)).Value = a
End Sub
'
Sub rellenarderecha(a, i As Long, j As Long)
  Dim k As Long
  For k = j To UBound(a, 2)
    If a(i, k) <> "" Then
      a(i, j) = a(i, k)
      a(i, k) = ""
      Exit Sub
    End If
  Next
  If a(i, j) = "" Then
    Call rellenarabajo(a, i, j, 1)
  End If
End Sub
'
Sub rellenarabajo(a, i As Long, j As Long, n As Long)
  Dim k As Long
  If i + n > UBound(a, 1) Then Exit Sub
  For k = 1 To UBound(a, 2)
    If a(i + n, k) <> "" Then
      a(i, j) = a(i + n, k)
      a(i + n, k) = ""
      Exit Sub
    End If
  Next
  If a(i, j) = "" Then
    n = n + 1
    Call rellenarabajo(a, i, j, n)
  End If
End Sub

Sigue las Instrucciones para ejecutar la macro

  1. Abre tu archivo de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro COMPLETA
  5. Para ejecutarla, selecciona cualquier línea de la macro rellenar_blancos y presiona F5

Nota: La macro requiere de 2 procedimientos, rellenarderecha y rellenarabajo, es necesario que estén en el mismo módulo, pero debes ejecutar la macro rellenar_blancos.

[Re cuerda, valorar la respuesta.

Respuesta
1

Recibida tu consulta y tu libro. Quedo atenta a la aclaración que te solicité por correo.

Enviado libro con macro. Fijate que el rango no está acotado a la col A:J sino hasta la última ocupada, con las instrucciones:

Sub NUMEROS()
'x Elsamatilde
'se establece la cantidad de col que tiene la tabla iniciando en A1
nroCol = ActiveSheet.UsedRange.Columns.Count
nroFil = ActiveSheet.UsedRange.Rows.Count

Por eso la nueva tabla la armé en otra hoja, desconociendo hasta dónde llegaría la tabla inicial.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas