Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-06-2004, 10:55   #1
fpucci
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
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2004, 10:59   #2
fpucci
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?
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2004, 22:34   #3
guldo76
Senior Member
 
L'Avatar di guldo76
 
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.
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2004, 23:10   #4
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da guldo76
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"?
Si, so come excel tratta i valori temporali ed è per questo che ho detto quanto riportato nel msg precedente.
Inoltre confermo che la formattazione della cella è proprio quella che hai consigliato proprio tu. Ma come faccio a far visualizzare correttamente la differenza?

Quote:
[...]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.
Si, mi sembra una buona idea, per cominciare....
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2004, 13:46   #5
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
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
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2004, 14:42   #6
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da Mixmar
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...
Davvero esiste tale funziona? Io ho la versione in inglese di Exce. Come potrebbe chiamarsi una funzione simile?

Ad ogni modo, grazie della dritta
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2004, 11:06   #7
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da Mixmar
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...
Nella versione in inglese, la funzione da te descritta si chiama NETWORKDAYS;

Se scrivo:
Codice:
Worksheets(1).Cells(Riga, Colonna + 1).Value = Networkdays(Worksheets(1).Cells(Riga, T2Col).Value, Worksheets(1).Cells(Riga, T1Col).Value)
mi va in errore eseguendo il codice dicendo che NETWORKDAYS non è definita. Eppure essa è descritta nell'help di excel.

Dove è l'inghippo?
Scusate, ma sono neofita di VBA...
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2004, 12:12   #8
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
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
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2004, 12:35   #9
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da Mixmar
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...
Purtroppo sembrano installati.
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)
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2004, 16:55   #10
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da fpucci
Se scrivo:
Codice:
Worksheets(1).Cells(Riga, Colonna + 1).Value = _
Networkdays(Worksheets(1).Cells(Riga, T2Col).Value, _
Worksheets(1).Cells(Riga, T1Col).Value)
mi va in errore eseguendo il codice dicendo che NETWORKDAYS non è definita.
Mi sa che non ho capito bene cosa vuoi fare di preciso; se non sbaglio tu vorresti con quel codice ottenere una cella X1 (supponiamo) col valore:
=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 & ")"
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2004, 17:02   #11
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
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
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2004, 17:46   #12
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da Mixmar
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...
Si, si, c'e` anche quello, e c'e` anche
Application.WorkbookFunctions.NetWorkDays(...)
probabilmente; pero` questi servono per ottenere il risultato direttamente, non per inserire nella cella la formula.
Dipende cosa ti serve.
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2004, 09:25   #13
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Grazie per il supporto

Allora vado con ordine:
Quote:
Guido76 wrote
Mi sa che non ho capito bene cosa vuoi fare di preciso; se non sbaglio tu vorresti con quel codice ottenere una cella X1 (supponiamo) col valore[...]:
Si, hai compreso bene le mie intenzioni; devo scrivere in una cella il risultato della differenza di due date che si trovano in altre due celle.
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:
Mixmar wrote
Forse occorre usare l'oggetto WorksheetFunctions: una cosa tipo:
nomeFoglio.WorksheetFunctions.NetWorkDays(...)
per invocare le funzioni Excel...
Ho provato anche questa, ma mi da sempre errore nella riga che ho postato in precedenza.
Forse, che sia sbagliata la formattazione delle celle?
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2004, 16:28   #14
guldo76
Senior Member
 
L'Avatar di guldo76
 
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
Ma considera che[list=1][*]non l'ho testata, quindi provala prima di fidarti[*]ho dato per scontato che i dati comincino dalla cella a1[*]ho dato per scontato che data e ora iniziali siano nella prima colonna, quelle finali nella seconda[*]ho dato per scontato che gli orari fossero sempre compresi tra le 9 e le 17[*]ho ignorato le vacanze, come 1 maggio, 15 agosto, etc... ce le dovrai aggiungere nelle condizioni del IF[*]spero di non aver sbagliato niente [/list=1]

Guldo
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2004, 17:09   #15
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da guldo76
Ho sbagliato io, WorkbookFunctions non esiste.
No problem. Io ho usato la WorksheetFunctions
Quote:
[...]
Ma considera che[list=1][*]non l'ho testata, quindi provala prima di fidarti[*]ho dato per scontato che i dati comincino dalla cella a1[*]ho dato per scontato che data e ora iniziali siano nella prima colonna, quelle finali nella seconda[*]ho dato per scontato che gli orari fossero sempre compresi tra le 9 e le 17[*]ho ignorato le vacanze, come 1 maggio, 15 agosto, etc... ce le dovrai aggiungere nelle condizioni del IF[*]spero di non aver sbagliato niente [/list=1]
Caro Guido76,
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
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2004, 17:26   #16
guldo76
Senior Member
 
L'Avatar di guldo76
 
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.
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2004, 17:31   #17
fpucci
Senior Member
 
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
Quote:
Originariamente inviato da guldo76
Prego, di niente, ma ho dimenticato una cosa essenziale: non mi chiamo Guido. Il mio nick e` GULDO.
Azz.... ho pure il "Copy&Paste" bacato

Cmq grazie lo stesso, guldo76
fpucci è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2004, 17:32   #18
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
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
Mixmar è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Fujitsu Monaka è pronto: 144 core...
Il dispositivo ultra compatto che trasfo...
Bonus colonnine 2026: dal 22 settembre d...
Revolut, una cartella "Italy" ...
Le auto connesse possono vendere i tuoi ...
E se i computer elaborassero le informaz...
NVIDIA non ci sta: "Non lasceremo che l'...
Gli Stati Uniti hanno armi in orbita: ar...
Robot aspirapolvere in offerta su Amazon...
ChatGPT inventa testimoni falsi e un avv...
Find X10 Pro Max di OPPO arriverà...
L'IA scriverà codice migliore del suo st...
Valve apre le prenotazioni di Steam Fram...
ECOVACS T50 OMNI Gen3 a 379€: il riferim...
Netflix e Sega insieme: arrivano i film ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v