Preparazione Foglio2Nella cella A1 inserisci 1
nella cella A2 inserisci 2
e copia la sequenza fino alla riga 50 (elenco cantieri)
Nella cella B1 fai una convalida di questo elenco
Macro1In un modulo inserisci questa macro
- Codice: Seleziona tutto
Sub CopiaDatiSe()
Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
Cantiere = Ws2.Range("B1").Value
Ws2.Range("C1:IV1000").Clear
UC1 = Ws1.Cells(1, Columns.Count).End(xlToLeft).Column
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
For CC1 = 2 To UC1 Step 2
passo = 0
For RR1 = 3 To UR1
If Ws1.Cells(RR1, CC1).Value = Cantiere Then
UC2 = CC1 + 1
If passo = 0 Then
Ws1.Range(Ws1.Cells(1, CC1), Ws1.Cells(2, CC1 + 1)).Copy Destination:=Ws2.Cells(1, UC2)
passo = 1
End If
UR2 = Ws2.Cells(Rows.Count, UC2).End(xlUp).Row + 1
Ws1.Range(Ws1.Cells(RR1, CC1), Ws1.Cells(RR1, CC1 + 1)).Copy Destination:=Ws2.Cells(UR2, UC2)
End If
Next RR1
Next CC1
UC2 = Ws2.Cells(1, Columns.Count).End(xlToLeft).Column
For CC2 = UC2 To 3 Step -1
If Ws2.Cells(2, CC2).Value = "" Then Columns(CC2).Delete
Next CC2
End Sub
E nel vba del foglio2 inserisci questo codice (macro2)
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$1" Then Exit Sub
CopiaDatiSe
End Sub
Ora ad ogni variazione del valore in B1 del Foglio2 avrai l'elenco degli operai che hanno lavorato in quel cantiere con le rispettive ore
Allego il file per maggior chiarezza di quanto esposto.
Ciao