|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
[VBA Excel] Differenza tra due date
Ho la necessità di calcolare la differenza di due date (nel formato DD/MM/YYYY HH:MM AM) poste su due celle differenti (contigue)
Se in A2 ho: "01/06/2004 09:00 AM" e in B2 ho "02/06/2004 06:00 PM", la differenza mi torna in C2 come "09:00" (considerando che C2 è una cella con il formato "h:mm"). Il conto non mi torna perché dovrebbero essere passate 33 ore effettive, e mi aspettavo proprio tale numero, invece mi visualizza "09:00". Dove sta l'inghippo? Il secondo quesito è: se volessi calcolare le "ore lavorative" trascorse (considerando che una giornata lavorativa è di 8 ore), basta dividere il risultato per 8? (insomma, calcolare il modulo 8)? Help, grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Forse ho capito cosa ha combinato quel mattacchione di excel
Ha sottratto la data con la data (il cui risultato diventa "01/01/1900", che però non si vede a causa della formattazione della cella, ma è così) e l'ora con l'ora (il cui risultato fa appunto "09:00"). Ma come faccio a fargli fare quello che vorrei io? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
|
Sulla differenza tra le date, non credo che excel abbia fatto come dici tu. Il tempo e` rappresentato da un numero seriale, in cui la parte intera misura i giorni e la parte decimale le frazioni di giorno, cioe` ore, minuti e secondi. Credo che il problema possa essere nel formato della cella; hai provato con "[h]:mm"?
Per le ore lavorative mi sa che e` un po' complicato... Immagino che le ore lavorative si contino solo nei giorni lavorativi, no? Allora penso che sarebbe il caso di trovare i giorni lavorativi trascorsi DOPO il primo e PRIMA dell'ultimo giorno considerati, moltiplicare per 8, e poi aggiungerci le ore lavorative effettive del primo giorno e dell'ultimo giorno, che saranno non piu` di 8 per ciascuno.
__________________
Sono GULDO, non Guido! Cioè, certo che guido... Bé, insomma, avete capito ![]() Linux 2.6.26|Debian|Debian@Hwupgrade|Debian Clan|Solo Puffin ti darà forza e grinta a volontà! NERD rank 62|Milla Jovovich|大事な物はいつも形の無い物だけ Sito e Forum sul Giappone|La mia libreria su aNobii |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Inoltre confermo che la formattazione della cella è proprio quella che hai consigliato proprio tu. Ma come faccio a far visualizzare correttamente la differenza? Quote:
|
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Un consiglio: forse può essere utile utilizzare la funzione GIORNI.LAVORATIVI.TOT() di Excel, che fa la differenza tra due date calcolando i giorni lavorativi intercorsi...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Ad ogni modo, grazie della dritta |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Se scrivo: Codice:
Worksheets(1).Cells(Riga, Colonna + 1).Value = Networkdays(Worksheets(1).Cells(Riga, T2Col).Value, Worksheets(1).Cells(Riga, T1Col).Value) Dove è l'inghippo? Scusate, ma sono neofita di VBA... |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Forse non hai installato gli Strumenti di analisi di Excel: nella versione italiana, dal menù Strumenti si seleziona Componenti aggiuntivi e poi Strumenti di analisi (e magari Strumenti di analisi per VBA) e poi si fa click su OK. Così dovrebbe funzionare...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Quando ho installato questi strumenti di analisi (anche qello per VBA), per sicurezza ho chiuso Excel e l'ho riavviato, ma la sostanza non è cambiata. E comunque, quei due tool risultano spuntati (ossia, presenti) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
|
Quote:
=NETWORKDAYS(......) E` cosi`? allora la sintassi e` un pochino piu` complicata: Codice:
Worksheets(1).Cells(Riga, Colonna + 1).Value = _
"=Networkdays(" & Worksheets(1).Cells(Riga, T2Col).Value _
& ", " & Worksheets(1).Cells(Riga, T1Col).Value & ")"
__________________
Sono GULDO, non Guido! Cioè, certo che guido... Bé, insomma, avete capito ![]() Linux 2.6.26|Debian|Debian@Hwupgrade|Debian Clan|Solo Puffin ti darà forza e grinta a volontà! NERD rank 62|Milla Jovovich|大事な物はいつも形の無い物だけ Sito e Forum sul Giappone|La mia libreria su aNobii |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Forse occorre usare l'oggetto WorksheetFunctions: una cosa tipo:
nomeFoglio.WorksheetFunctions.NetWorkDays(...) per invocare le funzioni Excel... Però non so, non l'ho mai usato...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
|
Quote:
Application.WorkbookFunctions.NetWorkDays(...) probabilmente; pero` questi servono per ottenere il risultato direttamente, non per inserire nella cella la formula. Dipende cosa ti serve.
__________________
Sono GULDO, non Guido! Cioè, certo che guido... Bé, insomma, avete capito ![]() Linux 2.6.26|Debian|Debian@Hwupgrade|Debian Clan|Solo Puffin ti darà forza e grinta a volontà! NERD rank 62|Milla Jovovich|大事な物はいつも形の無い物だけ Sito e Forum sul Giappone|La mia libreria su aNobii |
|
|
|
|
|
|
#13 | ||
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Grazie per il supporto
Allora vado con ordine: Quote:
Ho applicato la formula da te consigliata, ma mi ha restituito il seguente messaggio di errore: "Application-defined or object-defined error" E non so cosa fare. Spiego meglio cosa voglio ottenere. Il foglio viene generato da un'applicazione esterna nel formato CSV ed importato con excel. In questo file di input ho le data e le ore in due colonne differenti. Tutte le colonne sono importate nel formato "general" dal wizard. Con una prima macro (in VBA) sono riuscito a compattare tutte le colonne che hanno data e ora separati, in colonne con data e ora unificate, il cui formato è ora "d/m/yyyy h:mm AM/PM" Adesso ho il problema di calcolare la differenza tra due colonne il cui formato è custom "dd/mm/yyyy h:mm AM". Presuppongo quindi che questo formato NON sia TEXT. Quote:
Forse, che sia sbagliata la formattazione delle celle? |
||
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
|
Ho sbagliato io, WorkbookFunctions non esiste.
Cmq, senza usare networkdays, questa potrebbe essere un buon inizio: Codice:
sub OreLavorative() dim i, j as integer dim OraInizio, OraFine as double dim Giorni, PrimoGiorno, UltimoGiorno as integer dim DurataPrimoGiorno, DurataUltimoGiorno as double Giorni = 0 OraInizio = 9/24 OraFine = 17/24 j = activesheet.cells(1,1).currentregion.columns.count + 1 for i = 1 to activesheet.cells(1,1).currentregion.rows.count PrimoGiorno = int(cells(i,1)) UltimoGiorno = int(cells(i,2)) DurataPrimoGiorno = OraFine - (cells(i,1) - int(cells(i,1))) DurataUltimoGiorno = (cells(i,2) - int(cells(i,2))) - OraInizio 'giorni lavorativi PrimoGiorno = PrimoGiorno + 1 do while PrimoGiorno < UltimoGiorno if not (weekday(PrimoGiorno) = vbsaturday or weekday(PrimoGiorno) = vbsunday) then Giorni = Giorni + 1 end if PrimoGiorno = PrimoGiorno + 1 loop 'ore totali cells(i,j) = Giorni * 8 + DurataPrimoGiorno + DurataUltimoGiorno next i end sub [/list=1]Guldo
__________________
Sono GULDO, non Guido! Cioè, certo che guido... Bé, insomma, avete capito ![]() Linux 2.6.26|Debian|Debian@Hwupgrade|Debian Clan|Solo Puffin ti darà forza e grinta a volontà! NERD rank 62|Milla Jovovich|大事な物はいつも形の無い物だけ Sito e Forum sul Giappone|La mia libreria su aNobii |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Quote:
che dire? Senz'altro ti dico grazie per il tempo che mi hai dedicato, indipendentemente dal fatto che essa funzioni o no. Ormai è tardi, ma senz'altro prima me la studio, poi domani cerco di applicarla adattandola al mio foglio. Tnx |
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
|
Prego, di niente, ma ho dimenticato una cosa essenziale: non mi chiamo Guido. Il mio nick e` GULDO.
__________________
Sono GULDO, non Guido! Cioè, certo che guido... Bé, insomma, avete capito ![]() Linux 2.6.26|Debian|Debian@Hwupgrade|Debian Clan|Solo Puffin ti darà forza e grinta a volontà! NERD rank 62|Milla Jovovich|大事な物はいつも形の無い物だけ Sito e Forum sul Giappone|La mia libreria su aNobii |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Cmq grazie lo stesso, guldo76 |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Guldo della squadra Ginew!
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:16.












[/list=1]








