È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

VBA, testo nella Mail

Ultimo Aggiornamento: 30/04/2021 04:05
21/04/2021 16:09

Ciao a tutti, ho trovato & modificato un codice col quale archivio tutte le Mail (non ancora lette) in un files Excel.
-Mittente mail
-Oggetto
-Data & Orario
-Testo (.Body)
-Dovrei riuscire ad estrapolare pure 10/100 numeri di telefono da ogni mail
Purtroppo i mittenti non usano tutti la procedura corretta. Alcuni inviano...Ex
111.222.333 accapo
444.555.666 accapo, altri usano Ex
Il Sig. Pippo ha il numero 111.222.333 accapo
Il Sig. Topolino ha il numero 444.555.666 accapo ed altre persone in modo differente.
Ora se fosse possibile "spazzolare" l'intero MSG per trovare solo tali numeri sarebbe l'ideale, mà presumo che i numeri (non abbiano la stessa quantità di numeri) ed inoltre tante volte ci mettono pure dei punti&spazi in mezzo. Qualche idea a riguardo per come risolvere?
Grazie mille
Post: 1.119
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
OFFLINE
21/04/2021 19:02

Sì, ma, in che forma hai archiviato i Body ? una riga una cella oppure l'intero Body in un'unica cella ? Se sono divisi in celle, quanto numeri si posso trovare nella stessa cella ?
Se il testo è diviso in tante celle abitualmente uso questa Function (messa in un modulo vba) per estrapolare tutti i numeri presenti in una cella formattata testo.
Option Explicit
Function GetNumbers(ByVal txt As String) As String
    Dim num      As Object
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\d+"
        For Each num In .Execute(txt)
            GetNumbers = GetNumbers & num.Value
        Next
    End With
End Function
Per esempio, se la prima riga è A1 (e poi sotto) in B1 metto:
=getnumbers($A1)
e tiro giù.
Se però ci sono 2 numeri ti telefono te li riporta insieme.
E poi, nell'esempio scrivi "accapo", in realtà a che carattere corrisponde nel testo della cella ?

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
21/04/2021 19:53

>>>accapo
Intendo dire che premono il tasto ENTER ed il cursore va sotto, tutto a sinistra per digitare nuovo numero o frase (tra virgolette..., così faccendo tra una riga e l'altra esiste una riga invisibile sulla Mail, Excel invece la trova e la inserisce)

>>>l'intero Body
Momentaneamente mi appoggio alla variabile = Msg

Per adesso ho ragionato in questo metodo...
Analizzo le righe...se non è vuota, spezzo la frase con Num = Split(Frase(I), " "). Ora analizzo ogni parola per verificare che il primo carattere sia un numero (ho aggiunto un Exit For per non appesantire il tutto). Non mi sembra la soluzione migliore per delle mail scritte a casaccio. Allego in modo che possiate controllare
[Modificato da ABCDEF@Excel 21/04/2021 20:06]
Post: 1.120
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
OFFLINE
21/04/2021 20:30

Dato che non ci sono Body da sfruttare come test prova a sostituire il tuo ciclo con la Function e vedi che effetto fa, così:
cambia:
For Y = LBound(Num) To UBound(Num)
    If IsNumeric(Mid(Num(Y), 1, 1)) Then
        Cells(ri, 5) = Num(Y): ri = ri + 1: Exit For
   End If
Next Y

a:
Cells(ri, 5) = getnumbers(Y)
[Modificato da rollis13 21/04/2021 20:31]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 3.146
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
22/04/2021 10:34

Ciao
non è chiaro il tuo esempio, in quanto sottoponi tutto su una riga e non c'è traccia di "a capo"

Prova a vedere l'allegato che presuppone in colonna A lil testo delle varie email
Qualora volessi ripulirlo anche dai punti, fallo in autonomia.

saluti




[Modificato da dodo47 22/04/2021 10:35]
Domenico
Win 10 - Excel 2016
22/04/2021 14:03

@rollis13
Ho tentato di mofificare la Function in modo da separare dei numeri se fossero presenti sulla stessa riga senza riuscirci. Rimane valido per i numeri (con spazi)

@dodo47
Nel file precedente, in F5 e F12 sono con gli "a capi"
In questo, ho importato due mail in A2:A3 il resto è tuo/mio
Premesso che sul "Tuo" il num 789.789789 viene scritto con la virgola(789,789789 non capisco il motivo), volevo sapere se esiste una modalità nel caso l'utente scrivesse dei numeri con spazi ex 111 222 333 444 ed inoltre il motivo di B8=vuota + alcune celle con degli "a capo"?

Comunque, grazie a tutti
Post: 3.147
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
22/04/2021 17:23

ciao
nel tuo file non vedo il riferimento in vb a:

Microsoft VBScipt Regular expression 5.5 o superiori

è indispensabile.

Prova l'allegato

saluti




Domenico
Win 10 - Excel 2016
Post: 1.121
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
OFFLINE
22/04/2021 19:13

Questa macro (+Function) è fin dove sono arrivato io però mi sono arrenato sull'ultimo esempio dove ci sono due numeri nella stessa riga:
Option Explicit
Sub Estrai_Numeri()
    Dim riga, x, I, J, ur
    Dim testo1, testo2
    ur = Range("A" & Rows.Count).End(xlUp).Row
    For riga = 2 To ur
        x = 0
        testo1 = Split(Cells(riga, 1), vbCrLf)    'divido sul vbCrlf
        For I = LBound(testo1) To UBound(testo1)
            If testo1(I) <> "" Then
                testo2 = Split(testo1(I), Chr(10)) 'divido sul Chr(10)
                For J = LBound(testo2) To UBound(testo2)
                    If testo2(J) <> "" Then
                        Cells(riga, 2 + x) = GetNumbers(testo2(J))
                        If GetNumbers(testo2(J)) <> "" Then x = x + 1
                    End If
                Next J
            End If
        Next I
    Next riga
End Sub
[Modificato da rollis13 22/04/2021 19:20]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
22/04/2021 23:58

@dodo47
Scusami, per errore ho messo... Microsoft VBScript Regular expression >>>1.0<<<
Però sull'ultimo Tuo, rimane sempre la cella B8 con tre "a capi" + vuota.
Incece le celle B9/10/11/12 con dei "a capi" e in ultima riga il numero?
Ho modificato alcune cose e adesso mi sembra giusto. Grazie mille

Option Explicit
    Dim k As Long, j As Long, uR As Long' Aggiunto
    For j = 2 To uR 'era riga2
        str = Cells(j, 1)
        str = Replace(str, Chr(10), " ")' Questa mi toglie gli "a capi"
        str = Replace(str, " ", "")' bella questa riga che unisce se ci sono spazi nei numeri?


@rollis13
Bel lavoro, peccato per quei due numeri sulla stessa riga. Grazie lo stesso
EDIT: Ho modificato la Tua Function e sembra che funzioni....
Function GetNumbers_Mod(ByVal txt As String) As String
    Dim num As Object
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\d+"
        txt = Replace(txt, ".", "")
        txt = Replace(txt, " ", "")
        For Each num In .Execute(txt)
            GetNumbers_Mod = GetNumbers_Mod & num.Value
            GetNumbers_Mod = GetNumbers_Mod & "_"
        Next
    End With
GetNumbers_Mod = Left(GetNumbers_Mod, Len(GetNumbers_Mod) - 1)
End Function
[Modificato da ABCDEF@Excel 23/04/2021 10:56]
Post: 1.122
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
OFFLINE
23/04/2021 12:17

In effetti da un risultato gestibile. Le 2 righe e puoi scrivere così: GetNumbers_Mod = GetNumbers_Mod & num.Value & "_"
Però manca ancora il prefisso internazionale +39 mentre il 0039 va da sè.
[Modificato da rollis13 23/04/2021 12:18]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
23/04/2021 22:54

Nel caso servisse pure il +
Option Explicit
Function GetNumbers_Mod(ByVal txt As String) As String
    Dim num As Object, R As Long
    R = 0
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\d+"
        txt = Replace(txt, ".", "")
        txt = Replace(txt, " ", "")
        For Each num In .Execute(txt)
            R = InStr(txt, num.Value)
            If Mid(txt, R - 1, 1) = "+" Then
                GetNumbers_Mod = "+" & GetNumbers_Mod & num.Value & "_"
            Else
                GetNumbers_Mod = GetNumbers_Mod & num.Value & "_"
            End If
        Next
    End With
    GetNumbers_Mod = Left(GetNumbers_Mod, Len(GetNumbers_Mod) - 1)
End Function
29/04/2021 19:55

Riciao a tutti
Ho importato una mail (ho cancellato le righe 2-30 con dati sensibili), tramite codice. In teoria, ha terminato alla riga 36 (attualmente riga 7).
Avviando un secondo codice, dovrebbe analizzare solo i valori presenti in colonna F. Non capisco dove sia l'errore, perchè Ur mi segnala che ci sono 85 righe? Anche premendo il tasto "AZZERA" dice ci sono 85 righe. Grazie

EDIT: Faccio presente che se seleziono le colonne A-G (mouse destro= elimina contenuto) le righe sono regolari = 1. Domani avrò la Mail colpevole. Ps Sapete di quanti numeri Min/Max e formato un numero di telefono per l'Italia?
[Modificato da ABCDEF@Excel 29/04/2021 22:50]
Post: 1.127
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Veteran
Excel 2016-32bit Win11
OFFLINE
29/04/2021 23:20

Perché non cancelli le celle così:

Range("A2:AA" & Ur) = ClearContents

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
30/04/2021 04:05

Ciao rollis13
Forse ho capito, martedì ho consegnato il files al figlio (Portatile aziendale, Excel2013 come me) e ha importato un'email errata. Gli ho detto d'azzerare il tutto e ricominciare. Presumo che la 1° mail abbia "sporcato" il foglio, seguirò il Tuo suggerimento. Comunque strano (per una sola mail, scrivo solo in B2:E2), le colonne A+F vengono elaborate a parte per quanti numeri trovo nel Body. Perchè in A-B-C-D-E-F ci dovrebbero essere tutte le righe uguali?
[Modificato da ABCDEF@Excel 30/04/2021 11:38]
Vota: 15MediaObject5,00114 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Spostamento ad un'ALTRA CELLA nella STESSA RIGA (4 messaggi, agg.: 25/07/2022 16:23)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:47. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com