Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Macro Excel] Elaborazione file txt con ciclo for!

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

[Macro Excel] Elaborazione file txt con ciclo for!

Postdi Marcello Ferrau » 25/04/13 14:44

Salve a tutti ragazzi,
eccomi di nuovo alle prese con questi dannati file txt...

Stavolta nel mio txt ci sono una serie di comuni ai quali devo assegnare diversi codici.
Ad esempio ai comuni COMUNE1, COMUNE3 e COMUNE5 assegnerò il codice LT001, al COMUNE2 il codice LT002 ecc.
Queste assegnazioni sono presenti nel file excel dov'è presente la macro che deve leggere e modificare il txt.

A questo link trovate sia un esempio del txt da elaborare che l'excel con la macro, per vederne l'attuale funzionamento pratico:
http://www.mondometalwebzine.com/Prova.rar

Sto utilizzando questo codice:

Codice: Seleziona tutto
Sub GCLI_Assegna_Letturisti()

    Dim V As Variant
    Dim mycell As String
    Dim mybook As String

    Worksheets("GU1").Activate
    fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    If fileToOpen = False Then
        Sheets("GU1").Cells(1, 1) = ""
        Exit Sub
    Else
        Sheets("GU1").Cells(1, 1) = fileToOpen
    End If

    NomeFile = Right(fileToOpen, Len(fileToOpen) - InStrRev(fileToOpen, "\"))
        Sheets("GU1").Cells(2, 1) = NomeFile

    mycell = fileToOpen
    myfile = ThisWorkbook.Sheets("GU1").[A5] & "Letturisti_" & ThisWorkbook.Sheets("GU1").[A2]

    Open mycell For Input As #1
    Open myfile For Output As #2

    For i = 2 To ThisWorkbook.Sheets("GU2").[G2]

    comune = ThisWorkbook.Sheets("GU2").Cells(i, 9)
    letturista = ThisWorkbook.Sheets("GU2").Cells(i, 10)

    Do While Not EOF(1)
        Line Input #1, V
        If Mid$(V, 44, 30) = comune Then
            va = Mid$(V, 1, 182)
            vb = letturista
            vc = Mid$(V, 188, 81)
            modifica = va & vb & vc
            Print #2, modifica
        Else
            Print #2, V
        End If
     Loop
    Next i
        Close #1
        Close #2

    Worksheets("GU1").Range("A2").Clear
    Worksheets("GU1").Range("A1").Clear
        MsgBox ("ELABORAZIONE TERMINATA")
       
End Sub


Sicuramente sto usando male il ciclo for (o magari nemmeno quello dovrei usare, ma qualcos'altro), perché attualmente la macro mi sostituisce solo il primo valore assunto dalla i, mentre non i restanti.
Come dovrei modificare il codice per effettuare tutte le sostituzioni presenti nell'excel?

Grazie mille per le proposte e scusate la mia incapacità :)
Marcello Ferrau
Win7 + Office 2010 Ita
Xp + Office 2003 Ita
Avatar utente
Marcello Ferrau
Utente Junior
 
Post: 13
Iscritto il: 24/10/12 20:47

Sponsor
 

Re: [Macro Excel] Elaborazione file txt con ciclo for!

Postdi ricky53 » 25/04/13 16:47

Ciao,
almeno un po' di logica elaborativa potevi descrivercela.
Ci vuoi proprio costringere a fare il "REVERSE ENGINEERING" del tuo codice.

Forza: descrivi cosa deve fare la macro e dove vanno presi i dati.
Più espliciti prima faremo ad aiutarti.

Come recita la mia firma ...
...
...
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Macro Excel] Elaborazione file txt con ciclo for!

Postdi Marcello Ferrau » 25/04/13 18:16

Ciao ricky53,
credevo di aver descritto tutto nel file excel allegato. Ho messo lì diversi commenti per descrivere le colonne interessate e da cui prelevare i dati.

Il codice scorre (o dovrebbe scorrere) il file txt, leggendo i comuni presenti dalla colonna 44 (lunghezza stringa 30 caratteri). Questi comuni sono gli stessi presenti nella colonna I dell'excel e quindi a questi deve compararli.
Nel file excel, nella colonna J, ci sono dei codici abbinati a ciascun comune.
Quando il codice trova il comune deve associare il relativo codice che sarà riportato a partire dalla colonna 183 al posto di MC 1 (nel file txt è presente in partenza la scritta MC 1). I codici hanno la forma LTxxx, quindi di 5 cifre esattamente come il valore già presente.

Come ho scritto prima, l'attuale codice sostituisce solo per il primo comune, quindi non scorre la colonna I alla ricerca dei successivi.
Quindi credo che sia il ciclo FOR ad essere errato. O magari mal posizionato.

Posso aggiungere qualcos'altro che possa aiutarvi?
Marcello Ferrau
Win7 + Office 2010 Ita
Xp + Office 2003 Ita
Avatar utente
Marcello Ferrau
Utente Junior
 
Post: 13
Iscritto il: 24/10/12 20:47

Re: [Macro Excel] Elaborazione file txt con ciclo for!

Postdi Anthony47 » 25/04/13 22:02

Credo che questa versione possa essere idonea:
Codice: Seleziona tutto
Sub letturisti()
Dim VLine, myMatch
'
Worksheets("GU1").Activate
fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen = False Then
    Sheets("GU1").Cells(1, 1) = ""
    Exit Sub
Else
    Sheets("GU1").Cells(1, 1) = fileToOpen
End If
NomeFile = Right(fileToOpen, Len(fileToOpen) - InStrRev(fileToOpen, "\"))
Sheets("GU1").Cells(2, 1) = NomeFile

mycell = fileToOpen
myfile = ThisWorkbook.Sheets("GU1").[A5] & "Letturisti_" & ThisWorkbook.Sheets("GU1").[A2]
Close #1: Close #2
Open mycell For Input As #1
Open myfile For Output As #2

Do While Not EOF(1)
    Line Input #1, VLine
    VLComune = Mid(VLine, 44, 30)
    myMatch = Application.Match(VLComune, ThisWorkbook.Sheets("GU2").Range("I:I"), 0)
    If Not IsError(myMatch) Then
        va = Mid$(VLine, 1, 182)
        vb = ThisWorkbook.Sheets("GU2").Range("J" & myMatch).Value
        vc = Mid$(VLine, 188, 81)
        modifica = va & vb & vc
        Print #2, modifica
    Else
        Print #2, VLine
    End If
Loop
'
Close #1
Close #2
'
Worksheets("GU1").Range("A2").Clear
Worksheets("GU1").Range("A1").Clear
MsgBox ("ELABORAZIONE TERMINATA")
'
End Sub

Fai sapere, 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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Macro Excel] Elaborazione file txt con ciclo for!

Postdi Marcello Ferrau » 26/04/13 19:14

Ciao Anthony,
ringraziandoti per la soluzione proposta, ti dico che è decisamente perfetta per ciò che volevo ottenere.

Alla prossima, buona serata.
Ciao
Marcello Ferrau
Win7 + Office 2010 Ita
Xp + Office 2003 Ita
Avatar utente
Marcello Ferrau
Utente Junior
 
Post: 13
Iscritto il: 24/10/12 20:47


Torna a Applicazioni Office Windows


Topic correlati a "[Macro Excel] Elaborazione file txt con ciclo for!":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti