Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - VB6 di Excel - cercare condizione corretta per casella di testo
Forum - Visual Basic 6 - VB6 di Excel - cercare condizione corretta per casella di testo

Avatar
lasistem (Normal User)
Newbie


Messaggi: 1
Iscritto: 14/03/2011

Segnala al moderatore
Postato alle 17:58
Lunedì, 14/03/2011
Salve a tutti, sono nuovo e molto fuori allenamento. Mi sono diplomato nel lontano 94 e fino ad oggi mi sono occupato di ben altro, ma inizio ad avere bisogno di tornare a creare piccoli script e macro utili a velocizzare il mio lavoro.
Vi descrivo la mia necessita:
Mi capita spesso di scaricare con il classico metodo COPIA e INCOLLA dati da vari siti di Elenchi Telefonici e Albi Industriali e alla fine il risultato è sempre lo stesso, un enorme pappone di dati in excel che si propongono in questo modo ( classifichero' con Imp1 , 2 , 3 , ecc dei valori importanti e null dei valori che scartero' )

__A____B____C____D___E___F____G................Z
1 Imp1 Imp1 Imp1 Imp1 Imp1 Imp1 Imp1
2 Imp2 Imp2 Imp2 Imp2 Imp2 Imp2 Imp2
3 Null __Null_ Null_ Null_ Null__ Null _Null
4 Imp3 Imp3 Imp3 Imp3 Imp3 _____Imp3
5 Imp4 Imp4 Imp4 Imp4 Imp4 _________
6 Null Null Null Null Null Null Null Null_ Null
7 Null Null Null Null Null Null Null Null_ Null
8 Null Null Null Null Null Null Null Null_ Null
9 Null Null Null Null Null Null Null Null_ Null
10 Imp1 Imp1 Imp1 Imp1 Imp1 Imp1 Imp1
11 Imp2 Imp2 Imp2 Imp2 Imp2 Imp2 Imp2
12 Null Null Null Null Null Null Null Null Null
13 Imp3 Imp3 Imp3 Imp3 Imp3 ____Imp3
14 Imp4 Imp4 Imp4 Imp4 Imp4 ________
15 Null Null Null Null Null Null Null Null Null
16 Null Null Null Null Null Null Null Null Null
17 Null Null Null Null Null Null Null Null Null
18 Null Null Null Null Null Null Null Null Null


Come vedete sono dei dati incolonnati a gruppi di 9 che si ripetono per le 21 lettere Alfabetiche, ma può capitare che un dato manchi e che ci sia o una casella vuota o una casella mancante. Partendo dal fatto che dei quattro dati importanti riesco a classificare le seguenti variabili:
- Name per il campo Importante1 che si contraddistingue per il fatto che in tutte è presente la scritta "Matr."
- Born per il campo Importante2 che si contraddistingue per il fatto che in tutte è presente la scritta "Nato"
-Street per il campo Importante3 che si contraddistingue per il fatto che intutte è presente o "Via , Largo e Piazza" oppure "V.,L.,P."
- Email per il campo Importante4 che si contraddistingue per il fatto che in tutte è presente "Indirizzo"

Ho disegnato un flow chart e ne ho tirato fuori tutto questo:

Sub CatturaDati()
    Dim ColonL As Long      ' varibile Colonna Lettura
        ColonL = 1
    Dim RigL As Long        ' Varibile Riga Lettura
        RigL = 1
    Dim RigS As Long        ' Varibile Riga Scrittura
        RigS = 1
    Dim ColonS As Long      ' Varibile Colonna Scrittura
        ColonS = 50
    Dim Name As String      ' Variabile lettura Nome
        Name = ""
    Dim Born As String      ' Varibile lettura Data Nascita
        Born = ""
    Dim Street As String    ' Variabile lettura Indirizzo
        Street = ""
    Dim Email As String     ' Varibiale lettura Email
        Email = ""
        
CheckName:
        If ActiveSheet.Cells(RigL, ColonL) = "*MATR*" Then    ' che la cella contenga un dato che inizi per nome
        Name = ActiveSheet.Cells(RigL, ColonL)
        Cells(RigS, ColonS) = Name
        ColonS = ColonS + 1
        RigL = RigL + 1
        GoTo CheckBorn
        Else: RigL = RigL + 1
        GoTo CheckName
    End If
            
CheckBorn:

    If ActiveSheet.Cells(RigL, ColonL) = "nato*" Then
        Born = ActiveSheet.Cells(RigL, ColonL)
        Cells(RigS, ColonS) = Born
        ColonS = ColonS + 1
        RigL = RigL + 1
        GoTo CheckStreet
        Else: RigL = RigL + 1
        GoTo CheckBorn
    End If
    
CheckStreet:

    If ActiveSheet.Cells(RigL, ColonL) = "p.*" Or "V.*" Or "l.*" Or "via*" Or " largo*" Or "piazza*" Then ' che la cella contenga
        Street = ActiveSheet.Cells(RigL, ColonL)                                                          ' almeno una di queste
        Cells(RigS, ColonS) = Street                                                                                                  ' opzioni
        ColonS = ColonS + 1
        RigL = RigL + 1
        GoTo CheckEmail
        Else: RigL = RigL + 1
        GoTo CheckStreet
    End If
    
CheckEmail:

     If ActiveSheet.Cells(RigL, ColonL) = "indirizzo*" Then   ' che la cella contenga un dato che inizi per indirizzo
        Email = ActiveSheet.Cells(RigL, ColonL)
        Cells(RigS, ColonS) = Email
        ColonS = 50
        RigS = RigS + 1
        RigL = RigL + 1
        GoTo CheckFineCol
        Else: RigL = RigL + 1
        GoTo CheckEmail
     End If
    
CheckFineCol:
    If RigL < 5550 Then
        GoTo CheckName
    End If
        MsgBox "colonna terminata"
        GoTo CheckFineFile
            
CheckFineFile:
    If ColonL < 22 Then                                 ' arrivati alla 22 colonna avremo terminato le lettere dell'alfabeto
        GoTo CheckName
    End If
        MsgBox "procedura terminata"
        GoTo Fine
    
Fine:
    
End Sub

Credo innanzitutto che non sia una condizione valida l'utilizzo del carattere jolly "*" indicando i caratteri mancanti e volevo chiedervi come potevo ovviare.
E poi se avevate qualche suggerimento per ovviare alla probabile presenza di celle vuote o dove non sia presente il successivo dato che creerebbe un loop nelle singole funzioni.
A tal proposito pensavo di testare comunque tutte le caselle , comprese le NULL , e far fare così uno scarto.

Il risultato finale sarà una tabella incolonnata con i 4 dati importanti posizionati orizontalmente a partire dalla colonna 50.

Grazie per ora.

PM