Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    1

    Excel-Vba: Macro per riordinare tabella

    Buongiorno a tutti,
    sono nuovo di questo forum e innanzitutto vorrei salutare tutti.

    In seguito ho un dilemma da porvi e spero davvero che possiate aiutarmi.

    Io ho una tabella come la seguente:



    Anche se non si visualizza bene cerco di descriverla brevemente:

    1)Righe: Data
    2)Colonne: Orari (del tipo:7.30;8.00;8.30)

    Il mio obiettivo è quello di avere 7 tabelle (in 7 fogli diversi una per ogni giorno della settimana).

    Quindi la macro dovrebbe:

    1)cercare nella tabella di partenza tutti i lunedì,i martedì, i mercoledì, ecc. ecc. e mettere nel rispettivo foglio il valore indicato.

    2)Il formato delle tabelle "di arrivo" dev'essere lo stesso e quindi sulle righe le date (che rappresenteranno tutte lo stesso giorno della settimana) e sulle colonne le fasce orarie (7.30;8.00;8.30;......)


    Spero davvero che possiate aiutarmi...sono disperato.


    Grazie a tutti.

  2. #2
    Ciao,
    questa macro dovrebbe risolverti il problema:
    codice:
    Private Sub CommandButton1_Click()
    
       Worksheets("Foglio1").Rows(1).Copy
          Paste Destination:=Worksheets("Lun").Range("a1")
          Paste Destination:=Worksheets("Mar").Range("a1")
          Paste Destination:=Worksheets("Mer").Range("a1")
          Paste Destination:=Worksheets("Gio").Range("a1")
          Paste Destination:=Worksheets("Ven").Range("a1")
          Paste Destination:=Worksheets("Sab").Range("a1")
          Paste Destination:=Worksheets("Dom").Range("a1")
    
       Worksheets("Foglio1").Rows(2).Copy
          Paste Destination:=Worksheets("Lun").Range("a2")
          Paste Destination:=Worksheets("Mar").Range("a2")
          Paste Destination:=Worksheets("Mer").Range("a2")
          Paste Destination:=Worksheets("Gio").Range("a2")
          Paste Destination:=Worksheets("Ven").Range("a2")
          Paste Destination:=Worksheets("Sab").Range("a2")
          Paste Destination:=Worksheets("Dom").Range("a2")
    
       For Each casella In Worksheets("Foglio1").Range("a3:a1000")
    
          If IsDate(casella.Value) Then
             Select Case Weekday(casella.Value)
                Case 1
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Dom").Cells((Worksheets("Dom").Range("D:D").End(xlDown).Row + 1), 1)
                Case 2
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Lun").Cells((Worksheets("Lun").Range("D:D").End(xlDown).Row + 1), 1)
                Case 3
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Mar").Cells((Worksheets("Mar").Range("D:D").End(xlDown).Row + 1), 1)
                Case 4
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Mer").Cells((Worksheets("Mer").Range("D:D").End(xlDown).Row + 1), 1)
                Case 5
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Gio").Cells((Worksheets("Gio").Range("D:D").End(xlDown).Row + 1), 1)
                Case 6
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Ven").Cells((Worksheets("Ven").Range("D:D").End(xlDown).Row + 1), 1)
                Case 7
                   Worksheets("Foglio1").Rows(casella.Row).Copy Destination:=Worksheets("Sab").Cells((Worksheets("Sab").Range("D:D").End(xlDown).Row + 1), 1)
             End Select
          End If
       
       Next
    
       MsgBox ("fatto")
    
    End Sub
    Il foglio di origine deve chiamarsi Foglio1 e i fogli di destinazione Lun, Mar, Mer, Gio, Ven, Sab, Dom, se non si chiamano così adatta la macro con i nomi dei tuoi fogli (e occhio alle maiuscole).
    Per capire in che riga incollare, questa macro prende a riferimento l’ultimo valore presente nella colonna D del foglio di destinazione perché dall’immagine vedo che la colonna D è sempre piena, se quella colonna dovesse invece avere dei buchi, usane un’altra che sia sempre piena (basta sostituire i sette D:D che vedi nella macro).
    La macro lavora fino alla riga 1000, se ti serve di più modifica il range della foreach.
    Te la spiego brevemente.
    Inizialmente viene fatto un copia incolla delle prime due righe nelle prime due di tutti i fogli e poi parte il ciclo di esame delle celle della colonna A. Per ogni cella si determina il giorno della settimana con la funzione Weekday e si effettua la copia nel foglio opportuno.
    Se serve altro chiedi pure.
    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.