Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[vba] calcolo giorni

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[vba] calcolo giorni

Postdi riskismoney » 21/09/12 14:22

For x = 3 To RigNum
If x < RigNum Then
Giorni = Cells(x + 1, 1) - Cells(x, 1)
Else
Giorni = Val("31/12/2009")-Cells(x,1)
End If

Premesso che nella colonnaA ci sono delle date, con questo codice intendo contare quanti giorni passano tra la data presente nella riga x+1 e la riga x. Se la riga x+1 è vuota il codice deve simulare la data del 31/12/2009.
Funziona correttamente fino all'ultima riga quando il codice non riesce a trasformare la data simulata con un numero e quindi sbaglia. Ho provato in vari modi, anche simulando la data in inglese ma sbaglia comunque.
Qualche suggerimento?
Grazie
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Sponsor
 

Re: [vba] calcolo giorni

Postdi Flash30005 » 21/09/12 14:33

Al posto della data
inserisci
Codice: Seleziona tutto
Giorni = 40178 - Cells(x,1)


Ciao

Edit ore 15:40 - o meglio
Codice: Seleziona tutto
Giorni = Format(40178 - Cells(x, 1), "0")
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi riskismoney » 21/09/12 14:37

Flash cosi ci arrivo pure io, ma quel codice è solo una simulazione, quella data cambia ad ogni anno, in pratica partendo dall'anno dell'ultima riga presente creo una stringa con la data dell'ultimo giorno dell'anno. Il problema è trasformare in valore numero appunto la stringa.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi Flash30005 » 21/09/12 14:50

Ok
allora prova questa
Codice: Seleziona tutto
Sub Calcolagiorni()
For x = 3 To 10
If x < 10 Then
Giorni = Cells(x + 1, 1) - Cells(x, 1)
Else
Thedate = "31/12/2009"
Giorni = DateDiff("d", Thedate, Cells(x, 1))
End If
MsgBox Giorni
Next x
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi riskismoney » 21/09/12 14:59

Ora si che ci siamo ;), grazie mille.
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi riskismoney » 22/09/12 18:05

Ciao, due problemi ancora su questa macro.

Il primo... mi serve sapere se la riga successiva è vuota e quindi scrivo:
if Cells(x + 1, 1) = """" then ... ma non identifica mai la cella vuota.

Il secondo.... le date non sono scritte direttamente nella cella ma attraverso un richiamo da altro foglio e quindi_
=Se(dataxxx="";"";dataxxx)
quindi se dataxxx è scritta fino alla riga 50, avrò 50 date e dalla riga 51 in giù nulla... il problema è che con queste celle contenenti una formula ma vuota come risultato la macro da errore, se cancello le formule gira.

Qualche suggerimento?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi Flash30005 » 22/09/12 18:13

Hai provato con se Val(dataxx) = 0
premetto però che è è testo avrai zero
oppure con

Codice: Seleziona tutto
Datax = "03/03/2012"
MyPos = InStr(1, Datax, "/", 0)
If MyPos = 0 Then MsgBox MyPos
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi riskismoney » 22/09/12 18:21

Si avevo già provato con Val(data).... non funziona... il tuo codice non l'ho capito...
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi riskismoney » 22/09/12 18:28

Allora un errore è risolto (avevo cannato io)... questa funziona:
if Cells(x + 1, 1) = "" then ...

La macro invece non non gira proprio se nella colonna data ci sono delle formule ed il risultato è vuoto.
Eppure dove ci stanno queste celle vuote con le formule la macro non dovrebbe proprio toccarle.

Io conto le righe scritte quindi chiedo al codice di girare fino a quando le righe sono scritte, eppure con quella formula nelle righe successiva la macro non va.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi Flash30005 » 22/09/12 20:09

beh hai ragione in parte
perché la macro"vede" quelle celle scritte (hai detto che ci sono delle formule)?
Per trovare una soluzione
bisogna fare un'analisi più approfondita dei dati
perché la soluzione c'è sicuramente!!!
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi Anthony47 » 22/09/12 21:07

Non ho capito se c' e' un problema residuo e quale e'...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] calcolo giorni

Postdi riskismoney » 22/09/12 21:22

Anthony47 ha scritto:Non ho capito se c' e' un problema residuo e quale e'...

Ciao


Un problema residuo ci sta... il problema sta sulla colonna A che contiene delle date non scritte direttamente ma richiamate con formule.
Ora mettiamo che le prime 50 righe della colonna date restituiscano effettivamente una data e le altre invece contengono una formula che restiutiscono niente ("").
Quindi for 2 to 50.... io ho necessità di "guardare" cosa ci sta nella riga in corso e quella successiva per capire che calcolo devo fare. Qundi quando arrivo alla riga 50 io devo vedere cosa ci sta nella cella A50 ed A51. Nella cella A50 essendo l'ultima con data non ci sono problemi, nella cella A51 come detto ci sta una formula che non restituisce niente. La macro va in errore perchè quella cella non la vede come vuota o come una data.
Per la verità una soluzione l'ho trovata... faccio leggere il ciclo fino alla penultima riga e poi ripeto il tutto per l'ultima riga modificando i calcoli.
Chissà però se esiste qualcosa di migliore.

Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi Anthony47 » 22/09/12 21:41

Allora un errore è risolto (avevo cannato io)... questa funziona:
if Cells(x + 1, 1) = "" then ...
Ma allora questa non e' risolta...

Senza volermi macerare sui post precedenti (che comunque avevo gia' letto prima di scrivere il post precedente), forse puoi usare If Len(Cells(x+1,1))=0 then

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] calcolo giorni

Postdi Flash30005 » 22/09/12 21:42

e se fai un loop?
del tipo...
Codice: Seleziona tutto
Sub TrovaUltR()
UR = Range("A" & Rows.Count).End(xlUp).Row
For RR = 2 To UR
IniS = Mid(Range("A" & RR).Value, 1, 1)
If IniS <> 0 And IniS <> 1 And IniS <> 2 And IniS <> 3 Then Exit For
UltimaR = RR
Next RR
MsgBox UltimaR '<<< questa è l'ultima riga con data
End Sub


ciao


EDIT - leggi post di Anthony, abbiamo scritto contemporaneamente
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi riskismoney » 22/09/12 22:00

Anthony47 ha scritto:
Allora un errore è risolto (avevo cannato io)... questa funziona:
if Cells(x + 1, 1) = "" then ...
Ma allora questa non e' risolta...

Senza volermi macerare sui post precedenti (che comunque avevo gia' letto prima di scrivere il post precedente), forse puoi usare If Len(Cells(x+1,1))=0 then

Ciao


Anthony, il problema è che io devo scrivere una condizione simile a questa:
If Year(RTab(x, 1)) < m And Year(RTab(x + 1, 1)) < m Then....
Se metto la tua condizione prima e come evitare l'ultima riga ovvero come ho già risolto, se l'aggiungo cosi:
If Year(RTab(x, 1)) < m And (Year(RTab(x + 1, 1)) < m Or Len(Cells(x+1,1))=0 ) Then... comunque va in errore.

Credo che lascerò stare come ho risolto, grazie mille.
Grazie mille anche al grande Flash!
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi Flash30005 » 22/09/12 22:08

:roll:

forse complicherò le cose cercando una soluzione semplice ma a livello pratico mi trovo molto bene quando mi trovo nelle tue stesse condizioni:
calcolare l'ultima riga uso
Codice: Seleziona tutto
UR = Range("A" & Rows.Count).End(xlUp).Row

ma se ci sono formule allora l'ultima riga è quella che contiene la formula non il valore o stringa
quindi ripiego analizzando cosa ho nelle formule...
nel tuo caso hai una data formattata come dd/mm/aaaa
quindi la prima lettera o valore di questa data non può essere altro che 0,1,2,3 (i giorni del mese)
inserendo un loop ottengo l'ultima riga contenente una data
Codice: Seleziona tutto
UR = Range("A" & Rows.Count).End(xlUp).Row
For RR = 2 To UR
IniS = Mid(Range("A" & RR).Value, 1, 1)
If IniS <> 0 And IniS <> 1 And IniS <> 2 And IniS <> 3 Then Exit For '<<<<<< 
UltimaR = RR
Next RR
UR = UltimaR '<<< questa è l'ultima riga con data
End Sub

<<<< se non rispetta la condizione esce dal loop quindi UltimaR sarà l'ultima riga con data
Dopodiché userò il "nuovo" UR

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi Anthony47 » 22/09/12 22:19

Codice: Seleziona tutto
If Len(Cells(x+1,1))>0  Then
  If Year(RTab(x, 1)) < m And (Year(RTab(x + 1, 1)) < m then
  ..
Else
'Se cioe' la cella x+1,1 e' vuote
...
End if


C'e' anche una proposta di Flash, vedi sopra.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] calcolo giorni

Postdi riskismoney » 22/09/12 22:24

Anthony47 ha scritto:
Codice: Seleziona tutto
If Len(Cells(x+1,1))>0  Then
  If Year(RTab(x, 1)) < m And (Year(RTab(x + 1, 1)) < m then
  ..
Else
'Se cioe' la cella x+1,1 e' vuote
...
End if


C'e' anche una proposta di Flash, vedi sopra.


Per la risposta di Flash direi che nel mio caso è davvero complicare le cose..
Per questa tua soluzione, è la stessa identica che adottato io... in pratica questo ciclo fa leggere tutte le righe tranne l'ultimo.
Grazie ragazzi, siete grandi.
ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba] calcolo giorni

Postdi Flash30005 » 22/09/12 23:55

riskismoney ha scritto: in pratica questo ciclo fa leggere tutte le righe tranne l'ultimo


:?:

Questa macro legge tutte le righe con data e si interrompe quando la riga non è più una data (mi sembra essere il tuo caso)
se, invece, hai righe alterne di data puoi impostare un salto di riga
ma non voglio insistere senza avere fisicamente "in mano" un file esempio

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] calcolo giorni

Postdi riskismoney » 23/09/12 08:48

Flash30005 ha scritto:
riskismoney ha scritto: in pratica questo ciclo fa leggere tutte le righe tranne l'ultimo


:?:

Questa macro legge tutte le righe con data e si interrompe quando la riga non è più una data (mi sembra essere il tuo caso)
se, invece, hai righe alterne di data puoi impostare un salto di riga
ma non voglio insistere senza avere fisicamente "in mano" un file esempio

ciao

Flahs ha ragione ma la mia soluzione fa la stessa cosa, va bene cosi davvero. Mi siete stati di grande aiuto, grazie!
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04


Torna a Applicazioni Office Windows


Topic correlati a "[vba] calcolo giorni":


Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti