Crear hoja nueva con datos de otra en el mismo libro (uso de ciclos para repetir filas y copiar datos)

'Para Elsa'... En "Hoja1" esta la información inicial tal como me la facilitan, esta debería transformarla en una base de datos para poder sacar indicadores. La solicitud es crear una hoja por mes y en esta trasformar la data a posición vertical.

Los datos de la primera fila (Hoja1) se repetirán tantos días tenga el mes por las horas hasta pasar a la siguiente línea de negocio, allí es donde tengo el problema no se como hacer para que pase a la siguiente línea de negocio y repita este ciclo hasta que ya no hayan más líneas de negocios (en la Hoja1 columna A), además que aun debo ver como pasar los datos de día y hora que se encuentran horizontal.

Además que deben ser los valores del mes solicitado al inicio.

Respuesta
2

Te estoy enviando tu libro con la nueva macro.

Observa que utilizo el mismo bucle para enviar las 4 columnas en lugar de hacer un For para cada una como lo tenías inicialmente.

Se recorre la col A de hoja1 y se completan tantas filas como las indicadas en el combo de días... no entendí porqué multiplicas por 2 pero lo dejé así.

Le agregué un control por si queda algún desplegable vacío, otro por si la hoja mensual ya existe y dejé la propiedad MatchRequired en True para que no escriban texto u otros números en el desplegable de días.

Private Sub CommandButton1_Click()
'x Elsamatilde
'Crear la hoja por mes y guardar número de dias por mes
Dim nbreHoja As String
Dim hora As Integer
Dim lineg As String
Dim año As Integer
nbreHoja = ComboBox1.Text
nfilas = ComboBox2.Text
año = ComboBox3.Text
mes = nbreHoja
'primero ejecutar los controles, si no cumplen cancelar el proceso.
If nbreHoja = "" Or año = 0 Or nfilas = "" Then
    MsgBox "Faltan datos.", , "Error"
    ComboBox3.SetFocus
    Exit Sub
End If
'se controla si la hoja ya existe
esta = 0
For Each sh In Sheets
    If sh.Name = nbreHoja Then esta = 1: Exit For
Next sh
If esta = 1 Then
    MsgBox "Ya existe hoja para este mes.", , "Error"
    ComboBox1.SetFocus
    Exit Sub
End If
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = nbreHoja
Sheets(nbreHoja).Select
'Asignar titulos de columnas
Range("A1").Value = "Linea de negocio"
Range("B1").Value = "Localidad"
Range("C1").Value = "Año"
Range("D1").Value = "Mes"
Range("E1").Value = "Dia"
Range("F1").Value = "Hora"
Range("G1").Value = "Performance"
'filas de hoja origen
ini = 4
fini = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
'se recorre hoja1 desde ini hasta fini
While ini <= fini
    lineg = Worksheets(1).Range("A" & ini).Value
    loca = Worksheets(1).Range("B" & ini).Value
    '1er fila en hoja destino
    finx = Range("A" & Rows.Count).End(xlUp).Row + 1
    'se utiliza el mismo bucle para completar las 4 col
    For x = finx To (nfilas * 2) + (finx - 1) '24 = horas del dia   'porqué x 2 ???
        Cells(x, 1) = lineg
        Cells(x, 2) = loca
        Cells(x, 3) = año
        Cells(x, 4) = mes
    Next x
    'pasa a la fila siguiente en Hoja1
    ini = ini + 1
'repite el bucle para el siguiente negocio
Wend
'autoajustar col A:D
Columns("A:D").EntireColumn.AutoFit
'mensaje de fin de proceso
MsgBox "Fin de la creación de la hoja " & ComboBox1.Text
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas