Custom Search

Ordenar datos insertar filas



Un amigo lector del foro me pregunta sobre como ordenar datos en Excel y realizar un Código o Macro de VBA para manipular los mismos. Para ello se requiere ordenar los datos por proveedor, una vez realizado este paso se debía insertar filas en el caso en estudio, dos filas desde el último proveedor ordenado y por cada uno de ellos, como así también agregar un total en una de las filas, en base a esa pregunta prepare este ejemplo que se adapta perfectamente a lo que necesita nuestro amigo, en ordenar datos automáticamente, ordenar datos al activar hoja y ordenar datos automáticamente en base a varios criterios; se puede observar otros ejemplos sobre como ordenar datos mediante macros de VBA.

A los fines de dar más utilidad a la macro para ordenar registros, se determina en forma variable cual es la última fila con datos, como así también cual es la última columna con datos, ya que en programación de VBA es muy común realizar bucles hasta la última fila o columna con datos, aquí se muestra como se determinan en forma variable, la ventaja radica que que no tenemos que estar agregando manualmente el número de filas o columnas a analizar, es decir puede servir para una base de datos de pocos registro como para una base de datos de 30.000 o más registros, no interesa ya que el rango a ordenar se determina mediante variables..

Esta macro se relación con otros post los cuales se sugiere ver a los fines de complementar, como ordenar datos, determinar la última fila o columna con datos, insertar filas, recorrer filas mediante un bucle, estos son algunos de los ejemplos donde se puede observar como se utilizan los códigos de VBA o macros de Excel a los fines de obtener el resultado deseado, en  la categoría Macros VBA encontrarás muchos ejemplos que puedes adaptar a tu proyecto.

En código de VBA que se presenta más abajo cuyo archivo de ejemplo puedes descargar del link del final, encontrarás primero la forma de ordenar los datos mediante VBA, es decir se tiene un listado de proveedores y otros datos , se intenta ordenar por proveedor y que debajo de cada proveedor se inserte un total dejando otra fila más en blanco.

Para proceder a ordenar se crean variables asignado la la dirección de la última fila con datos como así también la última columna con datos, una vez realizado este procedimiento, se procede a insertar dos filas debajo del último proveedor ordenado y listado, insertada las dos filas en una de ellas se agrega el total de de la suma del campo total de cada proveedor, también se agrega formato de negrita.

Si se agregan más proveedores o datos a la base de datos, no se tiene más que apretar el botón para correr la macro y automáticamente se ordena por proveedor y agrega totales a cada proveedor, apretado el botón para correr la macro, primero se quitan todos los totales y filas vacías, y luego se procede a ordenar mediante VBA e insertar tal cual se describe en párrafos anteriores, para probar su funcionamiento sólo agrega otros datos a la base y haz click en el botón, automáticamente se ordena, se insertan las filas, se agrega el total y se pone el formato negrita al total.

En el caso que no tengas conocimiento suficiente sobre el manejo de hojas  de Excel,  te  recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.



Código que se insertar en un módulo


Sub Ordena()
Application.ScreenUpdating = False
Dim uf, uff, r1, r3, r, conta, k1, co, fila, fila2, conta1 As String
Dim x As Integer
Dim sum As Currency
'determines last row with data
uf = Sheets("hoja1").Range("A" & Rows.Count).End(xlUp).Row
uc = Sheets("hoja1").Cells("1," & Columns.Count).End(xlToRight).Address(False, False)
uc = Mid(uc, 1, 1)
r = 1
conta = 0
fila = 2
fila2 = 2
sum = 0
conta1 = 0
x = 2
'Antes de ordenar, elimina filas vacias
uff = Sheets("hoja1").Range("E" & Rows.Count).End(xlUp).Row
While x <= uff
MASTERCARD PAYONEER

If Sheets("hoja1").Cells(x, 1) = Empty Then
Sheets("hoja1").Cells(x, 1).EntireRow.Delete
x = x - 1
GoTo aqui:
End If
x = x + 1
aqui:
uff = Sheets("hoja1").Range("E" & Rows.Count).End(xlUp).Row
Wend

While Sheets("hoja1").Cells(1, r) <> Empty And conta = 0
If Sheets("hoja1").Cells(1, r) = "Proveedor" Then
k = Sheets("hoja1").Cells(1, r).Address(False, False)
co = Sheets("hoja1").Cells(1, r).Column
conta = 1
End If
r = r + 1
Wend
k1 = Mid(k, 1, 1)

'will help determine ranges to sort data
r1 = k & ":" & k1 & uf
r3 = "A1:" & uc & uf
'sorts the data
 ActiveWorkbook.Worksheets("hoja1").Sort.SortFields.Clear
 ActiveWorkbook.Worksheets("hoja1").Sort.SortFields.Add Key:=Range(r1) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 With ActiveWorkbook.Worksheets("hoja1").Sort
        .SetRange Range(r3)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
 End With
Application.ScreenUpdating = False

While Sheets("hoja1").Cells(fila, co) <> Empty
 dato1 = Sheets("hoja1").Cells(fila, co)

 While Sheets("hoja1").Cells(fila, co) <> Empty And conta1 = 0
      dato2 = Sheets("hoja1").Cells(fila2, co)
      If dato1 = dato2 Then
      sum = sum + Sheets("hoja1").Cells(fila2, 5).Value
      Else
       Sheets("hoja1").Cells(fila2, co).EntireRow.Insert
       Sheets("hoja1").Cells(fila2, co).EntireRow.Insert
       Sheets("hoja1").Cells(fila2, co) = "SUMATORIA"
       Sheets("hoja1").Cells(fila2, co).Select
       Selection.Font.Bold = True
       Sheets("hoja1").Cells(fila2, 5) = sum
       Sheets("hoja1").Cells(fila2, 5).Select
       Selection.Font.Bold = True
       conta1 = 1
      End If
 fila2 = fila2 + 1
 Wend
 
fila = fila2 + 1
fila2 = fila
conta1 = 0
sum = 0
Wend
End Sub





Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends