Oppure

Loading
14/03/11 16:58
lasistem
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.
aaa