Macro para registro según día de la semana

Quisiera hacer una macro con un registro de ventas la cual me gustaría que se copiara en distintas hoja según el día de la semana. Es decir tendría una hoja para introducir los datos y otras para cada día de semana. Tengo hecha la marco para que me copie solo en una hoja pero me gustaría hacer la diferenciación para cada día de la semana.

1 respuesta

Respuesta

Escribí la macro aquí para poder agregar lo que falta. También aclara en que celda se encuentra el día o se debe tomar el de la fecha.

No valores aun, solo envia las aclaraciones.

Hola Elsa,

Los datos los importo de la hoja registro a otra llamada datos. EN esta hoja de datos la columna A está destinada al día de la semana(lunes a domingo)

Según el contenido de esta columna quiero que se copie la fila a otra hoja que corresponde al día de la semana.

La macro es esta:

'Grabar 

Range("B11:B16").Select
Selection.Copy
Sheets("DATOS").Select
Range("A4000").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("A2:A4000").Select
Range("A4000").Activate
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("DATOS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("DATOS").Sort.SortFields.Add Key:=Range("B2:B4000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo", DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("DATOS").Sort
.SetRange Range("A1:F4000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("REGISTRO").Select
Range("B13:B16").Select
Selection.ClearContents
End Sub

Gracias por tu respuesta 

Esta macro no me sirve de mucho solo para 'descubrir' algunos detalles.

Te explico: lo que haces haciendo con las instrucciones que me envias, es copiar un rango de col B (hoja REGISTRO) y pegarlo en col A de hoja DATOS. Luego ordenás la hoja hoja DATOS por col A y ahí observo que tu tabla llega hasta la col F.

Entonces si lo que necesitas es que cada registro de hoja REGISTRO pase al día que le corresponde ya no necesitas la hoja DATOS (salvo que tenga algún sentido para tí). Y por tu ejemplo creo entender que lo harás por rango (B11:B16) y allí se encuentra el día.

Imagino una hoja similar a esto:

Entonces esta podría ser la macro que necesitas a la que deberás ajustar seguramente algunos detalles o dejarme muestra de tu hoja REGISTRO con las aclaraciones.

Sub Pase_Diario()
'x Elsamatilde
'recorre rango B11:B16, según el día será la hoja destino
[B11].Select
'al encontrar celda vacía en B finaliza el proceso
While ActiveCell <> ""
    Set hox = Sheets(Trim(ActiveCell))
    'se copia el rango B:G en hoja día, en col A, en la primer celda vacía
    Range("B" & ActiveCell.Row & ":G" & ActiveCell.Row).Copy Destination:=hox.Range("A" & hox.Range("A" & Rows.Count).End(xlUp).Row + 1)
    'pasa a fila siguiente y repite el bucle
    ActiveCell.Offset(1, 0).Select
Wend
End Sub

Lo que obtendrás serían hojas como esta:

Quedo a la espera de tus aclaraciones. Si esta respuesta ya resuelve tu consulta no olvides valorarla.

Sdos!

Hola más o menos es lo que quiero, pero me explico mejor.

Al pasar de la pestaña registro a DATOS es para tener en esa hoja todo lo acumulado por semana. Este sería el formulario de registro

DIA: lunes,martes ...

Movimiento: venta /abono

tTICKET

UNIDADES

MODELO

PRECIO

Todo pasaría a datos en una filay a su vez querría que todo se copiara en una fila en la hoja de cada día de la semana a partir de la celda "O"

Bien, agrego entonces la parte de las hojas diarias:

En TU macro, a continuación de la línea casi al final: Sheets("REGISTRO").Select

Agrega esto:

'AQUÍ SEPARA X DIAS.... EL DÍA SE TOMA DE B11
    hojax = Trim([B11])
    'se copia el rango B:G en hoja día, en col O, TRANSPUESTA
    'busca la primer fila libre según col O
    filx = Sheets(hojax).Range("O" & Rows.Count).End(xlUp).Row + 1
    Range("B11:B16").Copy
    Sheets(hojax).Range("O" & filx).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True

Y luego siguen tus instrucciones para limpiar las celdas.

Range("B13:B16").Select
Selection.ClearContents
End Sub

Quizás tengas que ajustar los rangos de la col B, porque en algunas notas comentas de B11 y luego limpias B13.

PD) Entiendo que eres nuevo en esto de consultar, por eso remarco la importancia de dejar imágenes cuando se trata de un formulario... sino perdemos tiempo en adivinar cómo se encuentran los datos.

Sdos!

Te recuerdo que la consulta sigue aún como 'pendiente de respuesta' a pesar de haberte respondido a cada una de tus peticiones... por favor valora para darla por cerrada. Encontrarás 2 opciones al pie (Buena o Excelente).

Sdos!

La pregunta no admite más respuestas

Más respuestas relacionadas