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
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
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!:)
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ù...
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!:(
Spostato da discussioni generiche.
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.
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"
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
: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
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!:(
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!
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!
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.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.