Filtrar por fechas y subtotales por vendedor en Excel

Por

Les comparto un código en un UserForm para filtrar por un rango de fechas y obtener subtotales por vendedor.

Tenemos el registro diario del importe de cada venta de cada vendedor en una hoja de Excel, por ejemplo:

filtrar-ventas-excel-1

Y ahora queremos conocer el total de ventas de cada vendedor, pero en un rango de fechas, puede ser una semana o 3 días o un mes.

Para lograr lo anterior es necesario realizar los siguientes pasos:

  1. Crear un UserForm
  2. Poner los siguientes controles dentro del userform: dos textbox uno para cada fecha, un listbox para presentar el resultado y un botón de comando para ejecutar la macro
  3. Poner la macro CommandButton1_Click dentro del userform
  4. Crear una hoja y ponerle por nombre “temp”
  5. Crear un módulo en VBA y pegar la macro
  6. Crear un botón en la hoja para ejecutar el UserForm

Paso 1. Crear un UserForm

  1. Abre tu hoja de Excel
  2. Para abrir Vba-macros y poder crear el UserForm, Presiona Alt + F11
  3. En el menú de VBA elige Insertar / UserForm

Paso 2. Poner controles en un UserForm

Para crear un control en el userform, estando en VBA, selecciona con el mouse del Cuadro de herramientas, el control que deseas y arrástralo al panel del userform.

filtrar-ventas-excel-2

Repite este paso para 2 TextBox, un ListBox, un CommandButton, 2 Label.

Para poner un texto dentro de los Label y dentro del CommandButton, presion un clic, ahora presiona otro clic para editar el texto y  poner por ejemplo dentro del label1 el texto: “Fecha Inicio”.

Paso 3. Poner la macro CommandButton1_Click

Una vez creado el botón CommanButton1 en el UserForm, presiona doble clic sobre el botón. Esto te abrirá un panel en blanco, copia la siguiente macro y pégala dentro del panel.

Private Sub CommandButton1_Click()
'Por.Dante Amor
'filtra por fechas y subtotales por vendedor
'
Set h1 = Sheets("Hoja1") 'cambiar por el nombre de tu hoja
Set h2 = Sheets("temp") 'hoja temporal
h2.Cells.ClearContents
If h1.AutoFilterMode Then h1.AutoFilterMode = False
ListBox1.RowSource = ""
If TextBox1.Value = "" Then
MsgBox "Captura una Fecha 'Inicio'"
Exit Sub
End If
fec1 = CDate(TextBox1.Value)
If TextBox2 = "" Then
fec2 = fec1
Else
fec2 = CDate(TextBox2.Value)
End If
'
h1.Rows(1).Copy h2.Rows(1)
u = h1.Range("C" & Rows.Count).End(xlUp).Row
j = 2
For i = 2 To u
If h1.Cells(i, "C").Value >= fec1 And h1.Cells(i, "C") <= fec2 Then
Set b = h2.Columns("A").Find(h1.Cells(i, "A"), lookat:=xlWhole)
If Not b Is Nothing Then
h2.Cells(b.Row, "B") = h2.Cells(b.Row, "B") + h1.Cells(i, "B")
Else
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
h2.Cells(u2, "A") = h1.Cells(i, "A")
h2.Cells(u2, "B") = h1.Cells(i, "B")
End If
End If
Next
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
ListBox1.RowSource = h2.Name & "!" & h2.Range("A2:B" & u2).Address
End Sub

Paso 4. Crear una hoja nueva y le pones por nombre “temp”

Paso 5. Crear un módulo en VBA y pegar la macro

  1. Abre tu libro 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 siguiente macro:
Sub Abrir_form()
UserForm1.Show
End Sub

Paso 6. Crear un botón en la hoja para ejecutar el UserForm

  1. Inserta una imagen en tu hoja, elige del menú Insertar / Imagen / Autoformas.
  2. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  3. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”.
  4. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Abrir_Form
  5. Presiona Aceptar.
  6. Para ejecutarla el UserForm dale clic a la imagen.

Captura una fecha inicial y una fecha final, ahora presiona el botón del Form para filtrar y desplegar en el listbox los resultados:

filtrar-ventas-excel-3

En el listbox se desplegarán las ventas acumuladas por vendedor en el rango de fechas que capturaste.

Descargar archivo.

Contenido relacionado:
Gerencie.com en su correo.

Suscríbase y nosotros colocaremos en su bandeja de entrada la mejor información que generamos diariamente.


Déjenos su opinión

En Gerencie.com está permitido opinar, criticar, discutir, controvertir, disentir, etc., pero debe hacerlo con respeto, sin insultar y sin ofender a otros.

Información legal aplicable para Colombia.