PDA

View Full Version : Riordinare un testo...


vascoblu
07-04-2005, 13:50
Ciao a tutti!
Uso un programma per il mio nokia6600 che mi trasforma in formato .txt tutti gli sms che ho.Il problema è che me li ordina (a1-Mittente,a2-Data,a3-Testo sms;b1-Mittente,b2-Data...e così via) dall'ultimo ricevuto al primo.
Ora io vorrei invertirli.In maniera da avere all'inizio del testo il primo messaggio avuto,il secondo ecc...
Volevo sapere ora sa se c'è un software per pc o un metodo con l'excel che mi ordini il testo in questa maniera:
Prima
z1
z2
z3
w1
w2
w3
.
.
.
b1
b2
b3
a1
a2
a3

Dopo
a1
a2
a3
b1
b2
b3
.
.
.
w1
w2
w3
z1
z2
z3

es.:
a1(Mittente)"Federico"
a2(Data) "12-Marzo-2005"
a3(Testo) "Ciao che fai...."

Spero che capiate il mio schema!

Grazie in anticipo per l'aiuto!
Vascoblu

zei78
07-04-2005, 16:45
prova ad importare il file di testo in excel ed a ordinare i dati.... c'è proprio il pulsantino che ti permette di farlo

vascoblu
07-04-2005, 17:43
Originariamente inviato da zei78
prova ad importare il file di testo in excel ed a ordinare i dati.... c'è proprio il pulsantino che ti permette di farlo

L'ho importato in excel, ma per quello che devo fare il tasto ordinamento non va'!Ci vorrebbe qualche comando che mi faccia questo:

dal foglio 1 (composto da 562 righe):
A1 z1
A2 z2
A3 z3
..
A560 a1
A561 a2
A562 a3

devo ordinaresul foglio 2 le righe in modo da avere questo:

A1 =Foglio1!A560
A2 =Foglio1!A561
A3 =Foglio1!A562
...
A560 =Foglio1!A1
A561 =Foglio1!A2
A562 =Foglio1!A3

zei78
07-04-2005, 18:50
ehmm.... senti, se ti dico che prima mi sembrava di aver capito ma in realtà non ci ho capito nulla????

Potresti spiagarti in un altro modo? magari un paio di esempi....

vascoblu
07-04-2005, 19:15
Allora...Ho questo programma per il mio nokia6600 che mi crea un file .txt con tutti i miei messaggi in questa maniera:

z1)Marco
z2)7-4-2005 17.55
z3)Sto bene grazie...
w1)Giuseppe
w2)7-4-2005 17.50
w3)Ciao Marco come stai...
.
.
.
b1)Marco
b2)10-1-2005 14.30
b3)Ho pranzato...
a1)Alessia
a2)10-1-2005 14.20
a3)Ciao Marco hai pranzato...

(Le lettere rappresentano un sms composto da 1=Mittente,2=Data,3=Testo sms)

Se noti le date il programma mi mette prima i messaggi ultimi ricevuti ed infine i primi ricevuti.

Ora vorrei ordinare in maniera da invertire l'ordine in questa:

a1)Alessia
a2)10-1-2005 14.20
a3)Ciao Marco hai pranzato...
b1)Marco
b2)10-1-2005 14.30
b3)Ho pranzato...
.
.
.
w1)Giuseppe
w2)14-2-2005 17.50
w3)Ciao Marco come stai...
z1)Marco
z2)14-2-2005 17.55
z3)Sto bene grazie...

Ho esportato il tutto in excel ed ora dovrei cercare il modo di ordinare il tutto in automatico...Spero si possa fare!

Spero di essere stato chiaro!:)

zei78
07-04-2005, 19:55
Ho capito ma penso che l'unico modo per farlo sia scrivere una macro.....

Prova magari a chiedere in programmi e utility, di sicuro ne sanno di più...

zei78
07-04-2005, 20:04
Comunque credo che se sai un pò di VB sia abbastanza facile....

Direi che ti bastano un paio di for concatenati, i comandi saranno una cosa del genere:

Sheets("Foglio2").Select
ActiveSheet.Cells(1, 3) = Sheets("Foglio1").Cells(3, 1)

vascoblu
07-04-2005, 20:12
Originariamente inviato da zei78
Comunque credo che se sai un pò di VB sia abbastanza facile....

Direi che ti bastano un paio di for concatenati, i comandi saranno una cosa del genere:

Sheets("Foglio2").Select
ActiveSheet.Cells(1, 3) = Sheets("Foglio1").Cells(3, 1)

Purtroppo non ne so di VisualBasic!:(

vascoblu
07-04-2005, 20:46
Io avevo pensato ad un comando che faccia questo:

Se ho, ad esempio, 2337 righe in un primo foglio, deve tagliare ed incollare nella prima riga vuota del secondo folglio la terz'ultima riga (2335) del primo foglio,poi la penultima (2336) nella prima riga vuota (a logica dovrebbe posizionarsi in A2 visto che A1 è stata occupata in precedenza) ed infine l'ultima (2337) nella prima riga vuota del secondo foglio.Il primo ciclo si chiude così per iniziare di nuovo,ma con il primo foglio con 2334 righe e considerando poi la riga 2332 la terz'ultima,la 2333 la penultima e la 2334 l'ultima.Deve ripetersi così fino a tagliare ed incollare tutte le righe del primo foglio nel secondo!
Spero di essere stato chiaro!

C'è qualcuno che può darmi una mano a farlo?
Premetto che non so nulla di VisualBasic in excel!:(

Kewell
07-04-2005, 22:01
Spostato da discussioni generiche.

guldo76
08-04-2005, 12:07
Sub riordina()

'IMPOSTAZIONI
Set primoFoglio = Sheets("Foglio1")
Set cellaIniziale = primoFoglio.Range("A1")
Set secondoFoglio = Sheets("Foglio2")
elemNum = 3 'gruppi di 3 elementi l'uno

'CALCOLI
primoFoglioConta = _
cellaIniziale.End(xlDown).Row + 1 - cellaIniziale.Row
secondoFoglioConta = _
secondoFoglio.Cells(1, 1).End(xlDown).Row + 1 - secondoFoglio.Cells(1, 1).Row
cellValue = secondoFoglio.Cells(1, 1)

If secondoFoglioConta = 65536 Then
If IsEmpty(cellValue) Then
Set myCella = secondoFoglio.Cells(1, 1)
Else
Set myCella = secondoFoglio.Cells(2, 1)
End If
Else
Set myCella = secondoFoglio.Cells(1, 1).End(xlDown).Offset(1, 0)
End If

For i = primoFoglioConta To elemNum Step -elemNum
For j = (elemNum - 1) To 0 Step -1
myCella.Offset(primoFoglioConta + elemNum - i - j - 1, 0) = _
primoFoglio.Cells(i - j, 1)
Next j
Next i

End Sub
:)

vascoblu
08-04-2005, 12:45
Originariamente inviato da guldo76
Sub riordina()

'IMPOSTAZIONI
Set primoFoglio = Sheets("Foglio1")
Set cellaIniziale = primoFoglio.Range("A1")
Set secondoFoglio = Sheets("Foglio2")
elemNum = 3 'gruppi di 3 elementi l'uno

'CALCOLI
primoFoglioConta = _
cellaIniziale.End(xlDown).Row + 1 - cellaIniziale.Row
secondoFoglioConta = _
secondoFoglio.Cells(1, 1).End(xlDown).Row + 1 - secondoFoglio.Cells(1, 1).Row
cellValue = secondoFoglio.Cells(1, 1)

If secondoFoglioConta = 65536 Then
If IsEmpty(cellValue) Then
Set myCella = secondoFoglio.Cells(1, 1)
Else
Set myCella = secondoFoglio.Cells(2, 1)
End If
Else
Set myCella = secondoFoglio.Cells(1, 1).End(xlDown).Offset(1, 0)
End If

For i = primoFoglioConta To elemNum Step -elemNum
For j = (elemNum - 1) To 0 Step -1
myCella.Offset(primoFoglioConta + elemNum - i - j - 1, 0) = _
primoFoglio.Cells(i - j, 1)
Next j
Next i

End Sub
:)


:eek: Cavoli!
Tante grazie!!!!
Ora come faccio a fargli fare questo lavoro?Come lo inserisco?

Tante grazie ancora Guldo76!!!

vascoblu
08-04-2005, 12:50
Sono riuscito a farlo partire!
Solo c'è un problema con le date!Ci mette numeri al loro posto.

guldo76
08-04-2005, 13:22
Hai controllato il formato della colonna dove vanno a finire le date?

vascoblu
08-04-2005, 13:26
Originariamente inviato da guldo76
Hai controllato il formato della colonna dove vanno a finire le date?

Il tuo script (e ti ringrazio davvero tanto) fa quello che volevo!Solo che le date le sostituisce con numeri strani tipo 38247,7319444444.

vascoblu
08-04-2005, 13:30
Non so se ti puo' servire ma il formato di una data è del tipo"21/09/2004 1.47"

guldo76
08-04-2005, 13:42
Queste date stanno da sole in un'apposita colonna, giusto?
Devi impostare il formato della cella su "data", invece che "generico".
Il numero "strano" che vedi è il numero seriale che indica la data.
XL non capisce nativamente le date; conta quanti giorni (ore, minuti, secondi) sono passati da un punto di partenza predefinito (1/1/1900).

vascoblu
08-04-2005, 13:50
Grazie tantissimo!!!
Risolto!
Cmq io per prova avevo cambiato le date in questo formato "01/12/2004-23.54"aggiungendo il trattino ed andava!!!Poi con trova e sostituisci ho sistemato la data.

Grazie ancora!:D

guldo76
08-04-2005, 14:08
:mbe:
Che brutta soluzione... :p
Molto meglio cambiare l'ultimo blocco For del listato di prima con questo:
For i = primoFoglioConta To elem_num Step -elem_num
For j = (elem_num - 1) To 0 Step -1
myCella.Offset(primoFoglioConta + elem_num - i - j - 1, 0) = _
primoFoglio.Cells(i - j, 1)
If IsDate(primoFoglio.Cells(i - j, 1).Value) Then
myCella.Offset(primoFoglioConta + elem_num - i - j - 1, 0).NumberFormat = "dddd dd/mm/yyyy hh:mm"
'myCella.Offset(primoFoglioConta + elem_num - i - j - 1, 0).HorizontalAlignment = xlLeft
End If
Next j
Next i
Naturalmente puoi modificare il formato della data come più ti pare e piace; se vuoi la data allineata a sinistra come il testo, togli l'apostrofo iniziale dalla riga successiva (quella che finisce con "xlLeft").

vascoblu
08-04-2005, 14:21
Che brutta soluzione...
Putroppo non conoscendo bene l'excel ed il VB mi sono adattato!:D


Putroppo la nuova soluzione che mi hai dato non va!Non fa nulla

Sub riordina()

'IMPOSTAZIONI
Set primoFoglio = Sheets("Foglio1")
Set cellaIniziale = primoFoglio.Range("A1")
Set secondoFoglio = Sheets("Foglio2")
elemNum = 3 'gruppi di 3 elementi l'uno

'CALCOLI
primoFoglioConta = _
cellaIniziale.End(xlDown).Row + 1 - cellaIniziale.Row
secondoFoglioConta = _
secondoFoglio.Cells(1, 1).End(xlDown).Row + 1 - secondoFoglio.Cells(1, 1).Row
cellValue = secondoFoglio.Cells(1, 1)

If secondoFoglioConta = 65536 Then
If IsEmpty(cellValue) Then
Set myCella = secondoFoglio.Cells(1, 1)
Else
Set myCella = secondoFoglio.Cells(2, 1)
End If
Else
Set myCella = secondoFoglio.Cells(1, 1).End(xlDown).Offset(1, 0)
End If

For i = primoFoglioConta To elem_num Step -elem_num
For j = (elem_num - 1) To 0 Step -1
myCella.Offset(primoFoglioConta + elem_num - i - j - 1, 0) = _
primoFoglio.Cells(i - j, 1)
If IsDate(primoFoglio.Cells(i - j, 1).Value) Then
myCella.Offset(primoFoglioConta + elem_num - i - j - 1, 0).NumberFormat = "dddd dd/mm/yyyy hh:mm"
'myCella.Offset(primoFoglioConta + elem_num - i - j - 1, 0).HorizontalAlignment = xlLeft
End If
Next j
Next i

End Sub

guldo76
08-04-2005, 14:30
Eppure è giusta.
Ho l'atroce sospetto che tu abbia modificato le date, inserendo il trattino, nel foglio originale invece che in quello derivato; e ciò è male, perché ora le date non sono più tali: sono diventati semplice testo.
Riesci a rimettere le date come erano prima?

vascoblu
08-04-2005, 14:35
Originariamente inviato da guldo76
Eppure è giusta.
Ho l'atroce sospetto che tu abbia modificato le date, inserendo il trattino, nel foglio originale invece che in quello derivato; e ciò è male, perché ora le date non sono più tali: sono diventati semplice testo.
Riesci a rimettere le date come erano prima?

Le date sono senza trattino e non va!:(

guldo76
08-04-2005, 15:07
C'è qualcosa che non quadra.
Se vuoi, potresti postare il documento, o una sua minima parte che cmq non funziona, così si prova a capirci qualcosa.
Ripeto, se vuoi. :)

bye

vascoblu
08-04-2005, 15:33
Originariamente inviato da guldo76
C'è qualcosa che non quadra.
Se vuoi, potresti postare il documento, o una sua minima parte che cmq non funziona, così si prova a capirci qualcosa.
Ripeto, se vuoi. :)

bye
Ti allego un file per fare la prova!
Grazie ancora per il tuo aiuto!

guldo76
08-04-2005, 16:02
A me funziona.
Ti passo il mio documento XL con la macro.

vascoblu
08-04-2005, 16:53
Hai provato con il file che ho allegato se ti funziona?

Non ci capisco molto cosa hai fatto sul tuo!:confused:

Cmq non preoccuparti più tanto!Il vero problema lo hai risolto!
Ancora grazie!

guldo76
08-04-2005, 17:59
Sì, sì, il tuo file mi funziona.

EDIT p.s.: non ti preoccupare della roba che trovi sparsa sul foglio XL... :p
L'unica cosa che conta è la macro.