Condividi:        

[excel] ordinare colonna con nomi di file ...

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

[excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 10/07/12 17:25

Buona sera a tutti!
ho un "problemone" nell'ordinamento di una colonna ...
in pratica mi trovo questi dati (tutti nella colonna A):

produzione100720121530.txt
produzione100720121710.txt
produzione230520121738.txt
produzione240520121710.txt
produzione240520121712.txt
produzione240520121717.txt
produzione240520121722.txt
produzione240520121727.txt
produzione240520121750.txt
produzione280520121733.txt (i numeri rappresentano 28/05/2012 17:33)

sono i nomi di alcuni file contenuti i una cartella. Questa lista (se possibile) mi piacerebbe ordinarla in modo tale da avere in A1 il file prodotto più recente.
Mi sono sbizzarrito con =Destra e =Sinistra per ricavare la parte "utile" diciamo, ma una volta ottenuta ad esempio una colonna "B" con solo numeri non riesco a trasformarla in una data ...

spero in un gentile riscontro :idea: ... grazie ! saluti !!
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Sponsor
 

Re: [excel] ordinare colonna con nomi di file ...

Postdi Flash30005 » 10/07/12 19:19

E' evidente che chi ha salvato (con programma) quei file testo non è molto pratico di programmazione e non "vede molto lontano"
Quando si salvano file (testo, log etc) in serie e che ripropongano la data e si sa che questi file dovranno essere processati è sempre opportuno dare al nome del file inserendo la data con anno mese giorno (AAAAMMGG..etc)
Il tuo file sarebbe stato così
201205281733
In questa maniera l'ordine era facilissimo ottenerlo con un semplice ordinamento crescente o decrescente mentre ora occorre una macro....

a dopo
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 10/07/12 19:46

una volta estratta la data in B15 con
Codice: Seleziona tutto
=STRINGA.ESTRAI(A15;11;12)

basta applicare la formula
Codice: Seleziona tutto
=STRINGA.ESTRAI(DESTRA(B15;12);5;4)&STRINGA.ESTRAI(DESTRA(B15;12);3;2)&STRINGA.ESTRAI(DESTRA(B15;12);1;2)&DESTRA(B15;4)

per ottenere la data nel formato indicato da Flash
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [excel] ordinare colonna con nomi di file ...

Postdi Flash30005 » 10/07/12 23:33

Seguendo il consiglio di Patel (utilizzare una colonna di appoggio) è possibile inserire in B1 (considerando in A1 la prima stringa dell'elenco)
questa formula
Codice: Seleziona tutto
=VALORE(STRINGA.ESTRAI(A1;11;2) &"/" & STRINGA.ESTRAI(A1;13;2) &"/" & STRINGA.ESTRAI(A1;15;4) &" " & STRINGA.ESTRAI(A1;19;2)&":" & STRINGA.ESTRAI(A1;21;2))

e formattare la cella con formattazione Personalizzata gg/mm/aaaa hh:mm
poi trascinare la formula verso il basso fino dove occorre.
infine selezionare le colonne A e B e ordinare in ordine decrescente la colonna B.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 11/07/12 08:47

Ciao Patel, ciao Flash

meravigliosa, formula perfetta! l'ho provata e va alla grande!

Per Flash: questo è l'elenco di una directory su un server che viene generato dopo il lancio di una procedura dove inserendo un codice numerico vengono estrapolati dei dati all'interno di questi file di testo ai quali viene (purtroppo) applicato questo timestamp orrendo. Quindi con questo codice:
Codice: Seleziona tutto
 Dim i As Integer, f As String, miopath As String
 cartella = InputBox("Scrivi il numero di produzione")
miopath = "\\10.11.12.13\export\DIR\" & cartella & "\"
f = Dir(miopath & "*.txt")
If f = "" Then Exit Sub
While f <> ""
i = i + 1
Cells(i, 1) = f
f = Dir
Wend

mi prendo tutti i nomi dei file e li metto nella colonna come li avete trovati...

Ora la formula postata è meravigliosa, solo che se la copio fino alla riga B150 (ad esempio) e ho solo 20 nomi di file, dal 21° in poi mi darebbe #VALORE e quindi incasinerei l'ordinamento ...
ho apportato questa mini modifica con un SE davanti per valutare se c'è o meno qualche valore nella colonna A, quindi se non c'è nulla nella colonna B non farà nulla:

Codice: Seleziona tutto
=SE(A1<>"";VALORE(STRINGA.ESTRAI(A1;11;2) &"/" & STRINGA.ESTRAI(A1;13;2) &"/" & STRINGA.ESTRAI(A1;15;4) &" " & STRINGA.ESTRAI(A1;19;2)&":" & STRINGA.ESTRAI(A1;21;2));"")


Grazie mille ciao buona giornata!
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 11/07/12 09:23

visto che usi una macro per importare i nomi dei file potresti tasformarli direttamente con la macro prima di copiarli nelle celle
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 11/07/12 10:06

Ciao Patel

bhè, sarebbe esagerato! nel senso bellissimo!
Però non saprei dove "mettere le mani" nel codice dell'importazione ...
hai qualche illuminato suggerimento? :) :idea:

grazie mille ciao!
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi Flash30005 » 11/07/12 10:50

Non è sufficiente importarli variando il nome perché penso che da quell'elenco, poi, debbano essere richiamati e il file non sarebbe più trovato
Allora ho pensato di fare una copia dei file in una cartella temporanea creata appositamente ma con nomi dei file modificati lasciando nella directory originale i nomi iniziali
Codice: Seleziona tutto
Sub ModNomi()
PercI = "C:\Temp\"  '<<<<sostituisci il percorso con quello file testo originali
DirM = "TempM"   '<<<<<  Nome directory temporanea
If Len(Dir(PercI & DirM, vbDirectory)) = 0 Then
MkDir PercI & DirM
Else
Kill PercI & DirM & "\*.txt"
End If
PercF = PercI & DirM & "\"
f = Dir(PercI & "*.txt")
If f = "" Then Exit Sub
While f <> ""
I = I + 1
NNome = Mid(f, 1, 10) & Mid(f, 15, 4) & Mid(f, 13, 2) & Mid(f, 11, 2) & Mid(f, 19, 8)
FileCopy PercI & f, PercF & NNome
f = Dir
Wend
Columns("A:A").ClearContents
I = 0
f = Dir(PercF & "*.txt")
If f = "" Then Exit Sub
While f <> ""
I = I + 1
Cells(I, 1) = f
f = Dir
Wend
'<<<<< codice ordinamento modificare il nome del "Foglio3" con quello effettivo
    URG = Worksheets("Foglio3").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Foglio3").Range(Cells(1, 1), Cells(URG, 1)).Select
    Selection.Sort Key1:=Cells(2, 1), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
        Range("A1").Select
       
End Sub


Ora bisogna solo testarla :)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 11/07/12 11:02

Flash30005 ha scritto:Non è sufficiente importarli variando il nome perché penso che da quell'elenco, poi, debbano essere richiamati e il file non sarebbe più trovato
mi sono espresso male, intendevo effettuare la conversione del nome da macro, inserire i nomi convertiti nella colonna accanto e fare l'ordinamento.
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [excel] ordinare colonna con nomi di file ...

Postdi Flash30005 » 11/07/12 11:07

Ehmmm :roll:
se intendi modificare fisicamente il nome al file nella directory originale e fare l'elenco va bene ma....
funziona solo la prima volta che esegui la macro
perché la seconda volta invertiresti i valori aaaammgg ormai sistemati ;)

ciao

EDIT ore 12:15 - Ok nella colonna a fianco avevo interpretato di utilizzare la macro per modificare il nome fisico dei file
Ma con la macro postata poco fa "tagliamo la testa al toro" ;)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 11/07/12 13:40

senza dubbio, era tanto per avere un'alternativa
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 11/07/12 16:46

rieccomi
testata la macro di Flash, è perfetta!
Funziona benissimo.
Chiedo, ma la conversione del nome dei file (ottenuta tramite la copia nella cartella d'appoggio) non la si potrebbe fare senza la copia dei file ma con i nomi del listato? magari usando delle colonne "appoggio"? Purtroppo i dati sono all'interno di una cartella di un server, chi lo gestisce potrebbe non gradire la creazione/cancellazione frequente di queste cartelle temporanee... vero che la si potrebbe creare in C:\ mi direte, giusto? E perchè no? :)
effettivamente ...
ma senza la copia dei file è un'impresa? Ho fatto anche delle altre prove, ma vane ... cioè ho usato una delle formule postate in precedenza (il risultato c'è) solo che quando vado ad ordinare per la colonna B (anche se ho messo la condizione SE) essendoci delle righe vuote le mette prima, quindi in A1 non ci sarà mai nulla, in quanto il valore utile (cioè il nome del file più recente) sarà chissà dove (ma sempre in pole position!) ...
:oops:
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 11/07/12 17:26

prova così
Codice: Seleziona tutto
Sub prova()
Dim i As Integer, f As String, miopath As String
cartella = InputBox("Scrivi il numero di produzione")
miopath = "\\10.11.12.13\export\DIR\" & cartella & "\"
f = Dir(miopath & "*.txt")
If f = "" Then Exit Sub
While f <> ""
    i = i + 1
    f = Cells(i, 1)
    NNome = Mid(f, 1, 10) & Mid(f, 15, 4) & Mid(f, 13, 2) & Mid(f, 11, 2) & Mid(f, 19, 4)
    Cells(i, 2) = NNome
Wend

'<<<<< codice ordinamento
URG = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(URG, 2)).Select
Selection.Sort Key1:=Cells(2, 2), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Range("A1").Select
End Sub
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 12/07/12 10:24

Ciao Patel! grazie per il codice

purtroppo però non funziona, con F8 vedo cosa fa, in pratica non copia i nomi dei files nelle celle , solo che non riesco a capire il ciclo " i = i + 1
f = Cells(i, 1)"

quindi la routine,una volta chiesto il numero, lo inserisco ma va avanti e non scrive nulla ...

ciao!
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi Flash30005 » 12/07/12 11:09

tricilindrico ha scritto:ma senza la copia dei file è un'impresa?

Si può fare l'elenco in excel aggiustando la data e lasciando il file con il nome originale ma dipende se poi vuoi ricercare il file testo utilizzando il nome in elenco, in questo caso non è possibile se non si "riconverte" il nome dell'elenco per ottenere di nuovo il nome effettivo del file.

tricilindrico ha scritto:vero che la si potrebbe creare in C:\ mi direte, giusto? E perchè no?

Se nessun altro deve avere accesso ai file (oppure ognuno avra i suoi temporanei) si può fare!
questa, per esempio, è la macro che fa la copia sul disco C:\Temp\ dei file che si trovano in rete.
Codice: Seleziona tutto
Sub ModNomi()
PercI = "C:\Temp\"  '<<<<sostituisci il percorso con quello file testo originali (MODIFICA SOLO QUESTO PERCORSO)
DirM = "TempM"   '<<<<<  Nome directory temporanea che ora troverai in C:\Temp\.
PercLoc = "C:\Temp"  '<<<<< directory locale sul disco C:\ , la cartella Temp in C:\Dovresti averla altrimenti creala
If Len(Dir(PercLoc & DirM, vbDirectory)) = 0 Then
MkDir PercLoc & DirM
Else
Kill PercLoc & DirM & "\*.txt"
End If
PercF = PercLoc & DirM & "\"
f = Dir(PercI & "*.txt")
If f = "" Then Exit Sub
While f <> ""
I = I + 1
NNome = Mid(f, 1, 10) & Mid(f, 15, 4) & Mid(f, 13, 2) & Mid(f, 11, 2) & Mid(f, 19, 8)
FileCopy PercI & f, PercF & NNome
f = Dir
Wend
Columns("A:A").ClearContents
I = 0
f = Dir(PercF & "*.txt")
If f = "" Then Exit Sub
While f <> ""
I = I + 1
Cells(I, 1) = f
f = Dir
Wend
'<<<<< codice ordinamento modificare il nome del "Foglio3" con quello effettivo
    URG = Worksheets("Foglio3").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Foglio3").Range(Cells(1, 1), Cells(URG, 1)).Select
    Selection.Sort Key1:=Cells(2, 1), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
        Range("A1").Select
       
End Sub


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 12/07/12 13:45

Ciao Flash
grazie! la Macro così funziona perfettamente.
Purtroppo ho commesso un grave errore, ho focalizzato l'attenzione sull'ordinamento, trascurando un altro dettaglio non secondario.

In pratica questa è la lista di file contenuta in alcune directory su un server, frutto di alcune lavorazioni di un software che "spara" in questi file di testo delle informazioni.
Quest file di testo (delimitati da ; per fortuna...) vengono poi importati in excel e lavorati. Questo accade attualmente e viene fatto "a mano" . La procedura che ho postato in effetti serviva ad automatizzare questo: chiedendo all'operatore il codice di una produzione, excel dovrebbe andare sul server, nella cartella relativa a quel numero, copiare i nomi di tutti i file.TXT in una colonna.
Questa cartella purtroppo contiene molti files diversi (per contenuto) ma comunque tutti relativi ad un determinato numero d'ordine. L'operatore (solo uno può richiedere i dati) lancia la procedura per l'export di questi dati quindi saprà che il file "più giovane" è il suo, appena fatto. E' per questo motivo che in excel ho la necessità di ordinare la colonna con i nomi dei files in maniera crescente, per avere in cima (A1) il nome di file da "importare" con un'altra macro (già pronta) .
E anche il nome del file purtroppo mi serve completo così come viene letto dalla directory, poichè il time stamp applicato(!) sarà sempre uguale (finchè non me lo cambiano) ma potrebbe cambiare il prefisso (di caratteri) in funzione di un export richiesto diverso (altra maco visto che ci sono altri tipi di dati ).
Purtroppo quindi non avendo descritto fino in fondo l'uso della colonna con i nomi dei file, vi ho messi su una strada sbagliata ... chiedo umilmente venia per lo sforzo richiesto e per il tempo richiesto.
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 12/07/12 14:00

tricilindrico ha scritto:Ciao Patel! grazie per il codice
purtroppo però non funziona.....

Non avendo la possibilità di provarlo ho fatto errori, prova così
Codice: Seleziona tutto
Sub prova()
Dim i As Integer, f As String, miopath As String
cartella = InputBox("Scrivi il numero di produzione")
miopath = "\\10.11.12.13\export\DIR\" & cartella & "\"
f = Dir(miopath & "*.txt")
If f = "" Then Exit Sub
While f <> ""
    i = i + 1
    Cells(i, 1) = f
    NNome = Mid(f, 1, 10) & Mid(f, 15, 4) & Mid(f, 13, 2) & Mid(f, 11, 2) & Mid(f, 19, 4)
    Cells(i, 2) = NNome
Wend

'<<<<< codice ordinamento
URG = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(URG, 2)).Select
Selection.Sort Key1:=Cells(2, 2), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Range("A1").Select
End Sub
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 12/07/12 14:43

Ciao Patel!
grazie ancora!
provato, mi sa che ci siamo, bella l'idea di riscrivere nella colonna B la trasformazione (così mi rimane il nome del file originale) però la routine mi propone (in loop) sempre il primo nome di file che trova ...e trasfoma sempre e solo quello ...
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi tricilindrico » 12/07/12 14:55

patel ha scritto:
tricilindrico ha scritto:Ciao Patel! grazie per il codice
purtroppo però non funziona.....

Non avendo la possibilità di provarlo ho fatto errori, prova così
Codice: Seleziona tutto
Sub prova()
Dim i As Integer, f As String, miopath As String
cartella = InputBox("Scrivi il numero di produzione")
miopath = "\\10.11.12.13\export\DIR\" & cartella & "\"
f = Dir(miopath & "*.txt")
If f = "" Then Exit Sub
While f <> ""
    i = i + 1
    Cells(i, 1) = f
    NNome = Mid(f, 1, 10) & Mid(f, 15, 4) & Mid(f, 13, 2) & Mid(f, 11, 2) & Mid(f, 19, 4)
    Cells(i, 2) = NNome
Wend

'<<<<< codice ordinamento
URG = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(URG, 2)).Select
Selection.Sort Key1:=Cells(2, 2), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Range("A1").Select
End Sub



ecco, prima di NNome ho messo
f = Dir
in questo modo legge tutta la directory, però nasce un secondo problema, il risultato è questo:
produzione100720121529.txt produzione201207101530
produzione100720121530.txt produzione201207101710
produzione100720121710.txt produzione201207110853
produzione110720120853.txt produzione201205231738
produzione230520121738.txt produzione201205241710
produzione240520121710.txt produzione201205241712
produzione240520121712.txt produzione201205241717
produzione240520121717.txt produzione201205241722
produzione240520121722.txt produzione201205241727
produzione240520121727.txt produzione201205241750
produzione240520121750.txt produzione201205281733
produzione280520121733.txt

in pratica in colonna B viene inserito il nome "trasformato" del file successivo, quindi non posso ordinare )anche perchè manca l'ultimo valore)
però non capisco dal codice come faccia a fare questa cosa ...
S.O.: Windows 8.1 Pro 64 with media center (ITA)
Off.: Office Professional plus 2013 (15.0.4569.1506) 64 bit (ITA)
tricilindrico
Utente Junior
 
Post: 36
Iscritto il: 05/07/12 14:59

Re: [excel] ordinare colonna con nomi di file ...

Postdi patel » 12/07/12 15:17

no, devi correggere così
Codice: Seleziona tutto
Sub prova()
Dim i As Integer, f As String, miopath As String
cartella = InputBox("Scrivi il numero di produzione")
miopath = "\\10.11.12.13\export\DIR\" & cartella & "\"
f = Dir(miopath & "*.txt")
If f = "" Then Exit Sub
While f <> ""
    i = i + 1
    Cells(i, 1) = f
    NNome = Mid(f, 1, 10) & Mid(f, 15, 4) & Mid(f, 13, 2) & Mid(f, 11, 2) & Mid(f, 19, 4)
    Cells(i, 2) = NNome
    f=dir
Wend

'<<<<< codice ordinamento
URG = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(URG, 2)).Select
Selection.Sort Key1:=Cells(2, 2), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Range("A1").Select
End Sub
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] ordinare colonna con nomi di file ...":


Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti