Sicuramente access sarebbe più veloce, nel caso, però, che vuoi usare ancora excel prova questo codice. Manca la conversione in giorno giuliano ma per il resto dovrebbe fare abbastanza al caso tuo. Nel caso dagli tu un'aggiustatina qua e la.![]()
[ot] Per quanto riguarda il cobol mi ero illuso; e invece: ancora solooooooooocodice:Option Explicit '> "fI" = foglio Input '> "ws" = array delle stazioni selezionate '> "fO" = foglio Output Public Sub routine() Dim rigaInput As Integer Dim rigaOutput As Integer, colonnaOutput As Integer Dim c As Range, c2 As Range '> Creo un array con referenza delle stazioni selezionate. Dim ws() As Worksheet, ixWS As Integer ixWS = 0 For rigaInput = 2 To fI.Cells(fI.Rows.Count, 2).End(xlUp).Row ReDim Preserve ws(ixWS) Set ws(ixWS) = ThisWorkbook.Worksheets(Trim(fI.Cells(rigaInput, 2))) ixWS = ixWS + 1 Next rigaInput '> ... for debug ... For ixWS = LBound(ws) To UBound(ws) Debug.Print "stazione selezionata: " & ws(ixWS).Name Next ixWS '> Adesso ciclo per le date creando il foglio di output. rigaOutput = 1 fO.Cells.Delete '> cancella il contenuto del foglio di output prima di iniziare For rigaInput = 2 To fI.Cells(fI.Rows.Count, 1).End(xlUp).Row fO.Cells(rigaOutput, 1) = Format(fI.Cells(rigaInput, 1), "dd/mm/yyyy hh:mm:ss") rigaOutput = rigaOutput + 1 '> Ciclo per le stazioni selezionate. For ixWS = LBound(ws) To UBound(ws) '>Ciclo per la colonna 1 della stazione corrente. For Each c In ws(ixWS).Range(ws(ixWS).Cells(1, 1), ws(ixWS).Cells(ws(ixWS).Cells(fI.Rows.Count, 2).End(xlUp).Row, 1)) If Format(fI.Cells(rigaInput, 1), "dd/mm/yyyy hh:mm:ss") = Format(c.Value, "dd/mm/yyyy hh:mm:ss") Then '>Ho trovato la data corrispondente. colonnaOutput = 1 For Each c2 In ws(ixWS).Range(ws(ixWS).Cells(c.Row, 2), ws(ixWS).Cells(c.Row, ws(ixWS).Cells(c.Row, ws(ixWS).Columns.Count).End(xlToLeft).Column)) fO.Cells(rigaOutput, colonnaOutput) = c2.Value colonnaOutput = colonnaOutput + 1 Next c2 rigaOutput = rigaOutput + 1 End If Next c Next ixWS Next rigaInput End Sub![]()
[/ot]

Rispondi quotando