Condividi:        

Eliminare giorno settimana da data in cella di testo

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

Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 09/11/17 18:24

Un saluto a tutto il Forum, ho la seguente difficoltà:
in una cella Es: A1 ho la seguente data in formato testo Wednesday 8 November 2017
con la seguente formula riesco ad eliminare il giorno
Codice: Seleziona tutto
=SE(K1<>"";SOSTITUISCI(K1;"Wednesday";""))

la mia difficoltà è che se inserisco un'unica formula per eliminare qualsiasi giorno,
dovrei inserire sette formule, una per ogni giorno, vorrei sapere se mi potete aiutare
ad evitare di dover utilizzare sette formule diverse.
Metto un esempio che naturalmente non funziona perchè si ferma alla prima condizione.
Codice: Seleziona tutto
=SE(K4<>"";SOSTITUISCI(K4;"Wednesday";"");SE(K4<>"";SOSTITUISCI(K4;"Tuesday";"");SE(K4<>"";SOSTITUISCI(K4;"Monday";"");SE(K4<>"";SOSTITUISCI(K4;"Sunday";"");SE(K4<>"";SOSTITUISCI(K4;"Saturday";"");SE(K4<>"";SOSTITUISCI(K4;"Friday";"");SE(K4<>"";SOSTITUISCI(K4;"Thursday";"");SOSTITUISCI(K4;"     ";""))))))))

Ringrazio chi può aiutarmi.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: Eliminare giorno settimana da data in cella di testo

Postdi wallace&gromit » 09/11/17 18:49

sei sicuro di volere veramente fare quello che dici di voler fare?
Non sarebbe meglio trasformare il tutto in data di excel invece di testo?
In questo caso con un "testo in colonne" separi le singole posizioni in varie colonne, cancelli la prima che non ti serve, sostituisci i mesi con numeri (immagino si possa fare rapidamente) e ricomponi la data, questa volta in formato data di excel.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Eliminare giorno settimana da data in cella di testo

Postdi Anthony47 » 09/11/17 19:45

Se ti basta partire da Testo e ottenere un Testo allora penso potresti usare
Codice: Seleziona tutto
=ANNULLA.SPAZI(STRINGA.ESTRAI(SOSTITUISCI(A1;"day";RIPETI(" ";30));30;99))


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Eliminare giorno settimana da data in cella di testo

Postdi Zer0Kelvin » 09/11/17 19:56

Ciao.
Con una formula è possibile tagliare tutto quello che si trova a sinistra del primo spazio; quindi con

=DESTRA(A1;LUNGHEZZA(A1)-RICERCA(" ";A1))

dovresti ottenere il risultato desiderato.
**EDIT**
Ciao Anthony, non avevo visto la tua risposta; credo vadano bene entrambe le formule.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Eliminare giorno settimana da data in cella di testo

Postdi Anthony47 » 09/11/17 20:04

Eh he, si vanno bene tutte e due ma la tua e' piu' diretta!
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 09/11/17 21:54

Ringrazio tutti per i vostri interventi, a me serve trasformare la data scaricata come testo in data,
in quanto deve poi essere utilizzata come tale.
Ho provato i vostri codici, quello che sembra avvicinarsi di più alle mie necessità sembra quello di
Anthony, l'unico problema è che se poi in altra cella scrivo
Codice: Seleziona tutto
=DATA.VALORE(SINISTRA(L1;10))

non riesco ad ottenere un valore di data, cosa che riuscivo ad ottenere con il codice:
Codice: Seleziona tutto
=SE(K1<>"";SOSTITUISCI(K1;"Wednesday";""))
.
Indipendentemente dai riferimenti di cella, io ho in una cella esempio in K1 il testo
Wednesday 8 November 2017
nella cella L1
Codice: Seleziona tutto
=SE(K1<>"";SOSTITUISCI(K1;"Wednesday";""))

e ottenevo il seguente risultato:
8 November 2017
poi nella cella M1 inserivo il seguente codice:
Codice: Seleziona tutto
=DATA.VALORE(SINISTRA(L1;10))

e ottengo la data utilizzabile
08/11/2017.
Dovendo copiare la formula per diverse righe, per riuscire nel mio scopo dovrei
utilizzare sette colonne, ognuna per un giorno della settimana, oppure riuscire
tramite il codice di Anthony o di chi altro può, trasformare in data.
Vi ringrazio e spero di essere riuscito a chiarire il tutto, in attesa di vostre nuove indicazioni,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 09/11/17 22:22

Per zerokelvin, la tua formula purtroppo non riesce a fare quanto dovrebbe
in quanto prima del giorno ci sono spazi vuoti, per cui non riesce ad eliminare
il giorno.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 09/11/17 22:36

S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Zer0Kelvin » 09/11/17 23:36

Andando per tentativi ho ricavato questa formula dalle tue e quella di Anthony
Codice: Seleziona tutto
=DATA.VALORE(SINISTRA(ANNULLA.SPAZI(STRINGA.ESTRAI(SOSTITUISCI(SE(B1=1;SOSTITUISCI(A1;" SERA   ";"");SOSTITUISCI(A1;" NOTTE   ";""));"day";RIPETI(" ";30));30;99));5))
che usa un solo passaggio.
E' bruttina e forse si può migliorare, ma sembra che funzioni.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Eliminare giorno settimana da data in cella di testo

Postdi Zer0Kelvin » 09/11/17 23:54

**EDIT**
Se invece vuoi usare tutti i passaggi, devi solo modificare l'ultima formula
Codice: Seleziona tutto
=DATA.VALORE(SINISTRA(L1;5))

Se vuoi eliminare anche la colonna B dal calcolo
Codice: Seleziona tutto
=DATA.VALORE(SINISTRA(ANNULLA.SPAZI(STRINGA.ESTRAI(SOSTITUISCI(SE(DESTRA(A1;8)=" SERA   ";SOSTITUISCI(A1;" SERA   ";"");SOSTITUISCI(A1;" NOTTE   ";""));"day";RIPETI(" ";30));30;99));5))


PS:
mi spiegate come fa la formula
Codice: Seleziona tutto
=DATA.VALORE(SINISTRA(L1;10))
a restituire la data corretta?
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Eliminare giorno settimana da data in cella di testo

Postdi Anthony47 » 10/11/17 00:31

Ciao Z0K; ma tu hai Excel in Inglese? La stessa domanda vale per Francesco.

Perche' secondo me, con Excel in altre lingue allora non credo che si possa ottenere un risultato affidabile senza un "dizionario" che traduca i Mesi in Italiano (salvo smentite :D )

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Eliminare giorno settimana da data in cella di testo

Postdi Zer0Kelvin » 10/11/17 00:34

**RE EDIT**
Mi sono appena reso conto (meglio tardi che mai :D ) che il tutto funziona solo per quei mesi che, in inglese ed italiano, cominciano con le stesse 3 lettere.
Sarebbe più pratico, a questo punto, utilizzare una User Function.
Codice: Seleziona tutto
Public Function ConvertiData(Cella As Variant) As Variant
Application.Volatile
Dim GG As Long, MM As Long, AA As Long
Dim Spl As Variant, Mesi As Variant
    Mesi = Array("January", "February", "March", "April", "May", "June", "July", "August", _
                    "September", "October", "November", "December")
    Spl = Split(Trim(Cella), " ")
    GG = Spl(1)
    For MM = 0 To 11
        If Spl(2) = Mesi(MM) Then
            MM = MM + 1
            Exit For
        End If
    Next MM
    AA = Spl(3)
    ConvertiData = GG & "/" & MM & "/" & AA
End Function
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 10/11/17 10:06

Buongiorno a tutti, vi ringrazio per le vostre risposte.
Utilizzato il codice di zerokelvin e sembra tutto ok.
La funzione non sono riuscito a farla funzionare, comunque appena ho un pò di tempo ricontrollo con calma.
Per Anthony excel che utilizzo è in italiano.
GRazie

Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Zer0Kelvin » 10/11/17 14:34

Francesco, attento!
La formula funziona solo con alcuni mesi: February, April, March, November.
Con gli altri mesi restituisce #VALORE.

Per usare la function, la devi inserire in un modulo standard:
-Click destro su VBAProject
-Inserisci-->Modulo

Per usarla, fai come se fosse una funzione di Excel
Codice: Seleziona tutto
=ConvertiData(A1)
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 10/11/17 15:28

Grazie Zer0Kelvin, ho provato con più calma e la Funzione è perfetta.
Un ringraziamento a tutti per la vostra disponibilità e per la grande capacità che avete tutti messo a mia disposizione.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Anthony47 » 10/11/17 15:56

Hai risolto, bene e grazie a Z0K.

C'e' da notare che la Funzione restituisce una stringa; ma se vuoi una "vera data" basta usare
Codice: Seleziona tutto
=--ConvertiData(A1)

Infine, a scopo puramente ludico, pubblico questa variante:
Codice: Seleziona tutto
Function ConData(ByVal dtCell As Range, Optional ByVal iLang As Long = 0) As Variant
Dim dtVal As String, I As Long, J As Long, repArr, ubArr, langArr
'
'Utilizzo       =ConData(DataTestoOriginale [,opzionale: codice lingua])
'               Codice lingua originale: 0=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
'               La traduzione sara' sempre nella lingua "Locale"
'
dtVal = dtCell.Text
'Lingua orig:    US,   Fran,  Germ,  Span,  Ita
langArr = Array("409", "40C", "407", "C0A", "410")
repArr = Array("dddd", "ddd", "mmmm", "mmm")
ubArr = Array(7, 7, 12, 12)
For I = 0 To 3
    For J = 1 To ubArr(I)
        If I < 2 Then
'        Debug.Print Application.Text(DateSerial(2017, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I))
            dtVal = Replace(dtVal, Application.Text(DateSerial(2017, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I)) & " ", "", , , vbTextCompare)
        Else
'        Debug.Print Application.Text(DateSerial(2017, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I))
            dtVal = Replace(dtVal, Application.Text(DateSerial(2017, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I)), Format(DateSerial(2017, J, 1), repArr(I)), , , vbTextCompare)
        End If
    Next J
Next I
If IsDate(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare))) Then
    ConData = DateValue(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare)))
Else
    ConData = dtVal
End If
End Function

Utilizzo =ConData(DataTestoOriginale [,opzionale: codice lingua])
Codice lingua originale: 0 oppure Omesso=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
La traduzione sara' sempre nella lingua "Locale"

Rispetto alla ConvertiData dovrebbe essere piu' "resistente", cioe' accetta situazioni anche diverse da Weekday gg Mese Anno
Ad esempio accetta i mesi "brevi" (jan, feb,...), accetta l'assenza del Weekday (es 7 jun 2017 SERA), accetta "vere date" (in questo caso non verranno convertite, perche' le vere date sono gia' in notazione locale); e soprattutto accetta stringhe in lingua 1-Francese (lundi 6 mars 2017 NOTTE), 2-Tedesca (Montag 20 marz 2017 SERA), 3-Spagnolo (lunes 6 marzo 2017 NOTTE), oltre che 4-Italiano.
Se il campo "lingua originale" e' 0 oppure omesso si usa la lingua Inglese.

Adattandola al tuo caso, per riga 1:
Codice: Seleziona tutto
=ConData(A1)

Fosse in tedesco:
Codice: Seleziona tutto
=ConData(A1;2)


La formula restituisce una data, formattala come piu' ti piace.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Eliminare giorno settimana da data in cella di testo

Postdi Zer0Kelvin » 10/11/17 19:23

C'e' da notare che la Funzione restituisce una stringa;

Colpa mia :oops: non reggo più le ore piccole.
Basta modificare l'ultima istruzione
Codice: Seleziona tutto
    ConvertiData = CDate(GG & "/" & MM & "/" & AA)

Ciao.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 12/11/17 19:28

Scusate il ritardo con cui rispondo, siete veramente grandi.
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Francesco53 » 13/12/17 10:33

Anthony47 ha scritto:Hai risolto, bene e grazie a Z0K.

C'e' da notare che la Funzione restituisce una stringa; ma se vuoi una "vera data" basta usare
Codice: Seleziona tutto
=--ConvertiData(A1)

Infine, a scopo puramente ludico, pubblico questa variante:
Codice: Seleziona tutto
Function ConData(ByVal dtCell As Range, Optional ByVal iLang As Long = 0) As Variant
Dim dtVal As String, I As Long, J As Long, repArr, ubArr, langArr
'
'Utilizzo       =ConData(DataTestoOriginale [,opzionale: codice lingua])
'               Codice lingua originale: 0=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
'               La traduzione sara' sempre nella lingua "Locale"
'
dtVal = dtCell.Text
'Lingua orig:    US,   Fran,  Germ,  Span,  Ita
langArr = Array("409", "40C", "407", "C0A", "410")
repArr = Array("dddd", "ddd", "mmmm", "mmm")
ubArr = Array(7, 7, 12, 12)
For I = 0 To 3
    For J = 1 To ubArr(I)
        If I < 2 Then
'        Debug.Print Application.Text(DateSerial(2017, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I))
            dtVal = Replace(dtVal, Application.Text(DateSerial(2017, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I)) & " ", "", , , vbTextCompare)
        Else
'        Debug.Print Application.Text(DateSerial(2017, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I))
            dtVal = Replace(dtVal, Application.Text(DateSerial(2017, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I)), Format(DateSerial(2017, J, 1), repArr(I)), , , vbTextCompare)
        End If
    Next J
Next I
If IsDate(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare))) Then
    ConData = DateValue(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare)))
Else
    ConData = dtVal
End If
End Function

Utilizzo =ConData(DataTestoOriginale [,opzionale: codice lingua])
Codice lingua originale: 0 oppure Omesso=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
La traduzione sara' sempre nella lingua "Locale"

Rispetto alla ConvertiData dovrebbe essere piu' "resistente", cioe' accetta situazioni anche diverse da Weekday gg Mese Anno
Ad esempio accetta i mesi "brevi" (jan, feb,...), accetta l'assenza del Weekday (es 7 jun 2017 SERA), accetta "vere date" (in questo caso non verranno convertite, perche' le vere date sono gia' in notazione locale); e soprattutto accetta stringhe in lingua 1-Francese (lundi 6 mars 2017 NOTTE), 2-Tedesca (Montag 20 marz 2017 SERA), 3-Spagnolo (lunes 6 marzo 2017 NOTTE), oltre che 4-Italiano.
Se il campo "lingua originale" e' 0 oppure omesso si usa la lingua Inglese.

Adattandola al tuo caso, per riga 1:
Codice: Seleziona tutto
=ConData(A1)

Fosse in tedesco:
Codice: Seleziona tutto
=ConData(A1;2)


La formula restituisce una data, formattala come piu' ti piace.

Ciao

Ciao Anthony o chi può aiutarmi, tempo fa mi hai realizzato questa funzione che è perfetta,adesso sono state
aggiunte altre due varianti nelle stringhe, e non riesco ad annidare ulteriore selezione in :
Codice: Seleziona tutto
If IsDate(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare))) Then
    ConData = DateValue(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare)))
Else
    ConData = dtVal
End If

Avrei la necessità di estendere oltre alla notte e alla sera ulteriore mattina e pomeriggio.
Ho provato ma senza successo ad annidare altri Replace ma purtroppo sbaglio.
Ti chiedo cortesemente se puoi inserirmi questa ulteriore variazione.
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: Eliminare giorno settimana da data in cella di testo

Postdi Anthony47 » 14/12/17 13:47

Allora il mio suggerimento e' di creare un elenco di parole da eliminare; ad esempio, sostituisci le righe in cui non riesci ad annidare ulteriori Replace con
Codice: Seleziona tutto
myRem = Array("notte", "sera", "mattina", "mezzogiorno", "serata", "nottata")       '<<< Elenco parole NO
For Each noBB In myRem
    dtVal = Trim(Replace(dtVal, noBB, "", , , vbTextCompare))
Next noBB
'
If IsDate(dtVal) Then
    ConData = DateValue(dtVal)
Else
    ConData = dtVal
End If

La riga marcata <<< va compilata con le tue parole da escludere. E' opportuno cominciare con le parole piu' lunghe, per evitare che sostituzioni parziali mettano in crisi la ricerca di parole complesse. Ad esempio, se inserisci "nottata" e "nottataccia" (in quest'ordine) l' eventuale "nottataccia" inserita nella stringa da bonificare non sara' eliminata completamente; questo rischio non esiste se hai inserito "nottataccia" e "nottata" in questo ordine.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Eliminare giorno settimana da data in cella di testo":


Chi c’è in linea

Visitano il forum: Ricky0185 e 48 ospiti