Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

Excel ordinare lettere numeri Opzioni
marpar
Inviato: Friday, April 23, 2010 2:20:45 PM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
In excel devo riordinare in automatico la colonna 1 avendo come risultato la colonna 2 ho provato in vari modi ma non ottengo mai il risultato sperato.
Riuscite a darmi qualche dritta?
Grazie
Ciao a tutti!!

Code:

C16E    C1E     
C10E    C2E     
C9E    C3E     
C18E    C4E     
D3E    C5E     
U2E    C6E     
YOPZ1    C7E     
U5E    C8E     
R38E    C9E     
R30E    C10E   
R25E    C11E   
C14E    C12E   
D5E    C13E   
C4E    C14E   
C24E    C15E   
D10E    C16E   
R34E    C17E   
R32E    C18E   
R51E    C19E   
C3E    C20E   
D2E    C21E   
R12E    C22E   
R28E    C23E   
R48E    C24E   
C26E    C25E   
D4E    C26E   
R20E    C27E   
R4E    C28E   
C22E    C29E   
R21E    D1E     
R17E    D2E     
U4E    D3E     
R13E    D4E     
R26E    D5E     
R18E    D6E     
R5E    D7E     
R45E    D8E     
R33E    D9E     
R22E    D10E   
C25E    D11E   
R16E    D12E   
C15E    D13E   
R24E    JENC2   
D11E    L1E     
D6E    L2E     
JENC2    R1E     
U1E    R2E     
C12E    R3E     
D12E    R4E     
C17E    R5E     
C6E    R6E     
R19E    R7E     
R6E    R8E     
L2E    R9E     
R39E    R10E   
R3E    R11E   
R8E    R12E   
R47E    R13E   
D1E    R14E   
R42E    R15E   
R35E    R16E   
C23E    R17E   
C2E    R18E   
R37E    R19E   
R46E    R20E   
R1E    R21E   
R49E    R22E   
D9E    R23E   
R41E    R24E   
R50E    R25E   
R23E    R26E   
C11E    R27E   
L1E    R28E   
R14E    R29E   
C21E    R30E   
U3E    R31E   
R9E    R32E   
D7E    R33E   
C29E    R34E   
C27E    R35E   
R7E    R36E   
D8E    R37E   
R44E    R38E   
C8E    R39E   
R10E    R40E   
C13E    R41E   
R11E    R42E   
R36E    R43E   
R43E    R44E   
R40E    R45E   
C5E    R46E   
R29E    R47E   
C1E    R48E   
R2E    R49E   
R31E    R50E   
C28E    R51E   
C19E    U1E     
C7E    U2E     
C20E    U3E     
R27E    U4E     
D13E    U5E     
U6E    U6E     
R15E    YOPZ1   
Sponsor
Inviato: Friday, April 23, 2010 2:20:45 PM

 
lui49
Inviato: Friday, April 23, 2010 7:45:10 PM
Rank: AiutAmico

Iscritto dal : 5/4/2003
Posts: 2,845
marpar
Inviato: Tuesday, April 27, 2010 9:07:30 AM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Grazie avevo già visto, ma nel mio caso quella macro da lo stesso risultato di "ordina crescente"!
Andrebbe modificata ma non ho idea di come si faccia, in excel sono un principante.
Ciao
lui49
Inviato: Tuesday, April 27, 2010 12:44:50 PM
Rank: AiutAmico

Iscritto dal : 5/4/2003
Posts: 2,845
una soluzione può essere (non so però se è fattibile da parte tua): usare per i numeri fino al 9 la doppia cifra...01,02,03. Poi per avere automaticamene l'ordinamento durante l'inserimento basta una macro tipo questa:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Worksheets("Foglio1").Range("A1:A2000").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

End Sub

...salvo errori etc etc.....
a10n11
Inviato: Tuesday, April 27, 2010 7:01:51 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
colonna B e colonna C vuote per appoggio elaborazione

Sub OrdinaNumeriLettere()
Dim Area As Range, AreaO As Range
Dim Cl As Range, i As Long, ABC As String, NR As String
Application.ScreenUpdating = False
With Sheets("foglio1")
Set Area = .Range("a1", .Range("a1").End(xlDown))
For Each Cl In Area
For i = 1 To Len(Cl)
If IsNumeric(Mid(Cl, i, 1)) Then
NR = NR & Mid(Cl, i, 1)
Else
ABC = Mid(Cl, 1, 1)
End If
Next
Cl.Offset(0, 2).Value = NR
Cl.Offset(0, 1).Value = ABC
NR = ""
ABC = ""
Next
Set Area = Nothing
Set Area = .Range("A1", .Range("C1").End(xlDown))
Area.Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("C1") _
, Order2:=xlAscending
Set Area = Nothing
Columns("B:C").ClearContents
End With
Application.ScreenUpdating = True
End Sub

saluti
Giap

marpar
Inviato: Wednesday, April 28, 2010 11:28:00 AM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Grazie funziona a meraviglia!!
Scusami in anticipo se chiedo troppo ma saresti così gentile da commentare la macro così da rendere comprensibile, ad imbranati come me, come funziona il tutto?
Visto che l'appetito vien mangiando avrei esigenza di importare da un file di testo tutto ciò che è contenuto fra queste due stringhe:

.PLACEMENT <--- stringa inizio
| testo
| da
| elaborare
.END_PLACEMENT <--- stringa fine

e dopo averlo opportunamente modificato riscriverlo nella stessa posizione. Le stringhe in questione non sono poche (fino a 3000) e possono variare di numero da file a file, potreste spiegarmi come posso procedere?
Grazie
Ciao
marpar
Inviato: Monday, May 03, 2010 4:17:28 PM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Sono rouscito a estrarre la porzione di file compresa fra |.PLACEMENT| e |.END_PLACEMENT| con la macro seguente:

Sub Apri_file_EMN()

Dim Riporta As Boolean
Filein1 = ActiveWorkbook.Path & "\EMN.emn"
Open Filein1 For Input As #1
Numriga = 1

Do While Not EOF(1)
Line Input #1, Job$
If Job$ = ".END_PLACEMENT" Then Exit Do
If Riporta Then
Cells(Numriga, 3) = Job$
Numriga = Numriga + 1
End If
If Job$ = ".PLACEMENT" Then Riporta = True
Loop

Close

End Sub



Adesso no ho idea di come fare a sovrascrivere le vecchie stringhe con quelle editate nella stessa posizione da cui l'ho estratte:

.PLACEMENT <--- stringa inizio
| testo
| editato
.END_PLACEMENT <--- stringa fine

Ciao
Grazie a tutti


a10n11
Inviato: Monday, May 03, 2010 7:56:09 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
dopo aver creato la tabella con la macro che hai postato, per riscrivere il file
prova con questa:

Sub RIMPIAZZA()
Dim f As Integer
Dim RigaTesto As String
Dim Buffer As String
filein1 = ActiveWorkbook.Path & "\EMN.emn"
f = FreeFile
Open filein1 For Input As #f
Do While Not EOF(f)
Input #f, RigaTesto
If RigaTesto <> ".PLACEMENT" Then
Buffer = Buffer & RigaTesto & vbCrLf
End If
If RigaTesto = ".PLACEMENT" Then
CTRL = True
Exit Do
End If
Loop
Buffer = Buffer & ".PLACEMENT" & vbCrLf
For n = 1 To Cells(Rows.Count, 3).End(xlUp).Row
Buffer = Buffer & Cells(n, 3).Value & vbCrLf
Next n
Do While Not EOF(f)
Input #f, RigaTesto
If RigaTesto = ".END_PLACEMENT" Then CTRL = False
If Not CTRL Then
Buffer = Buffer & RigaTesto & vbCrLf
End If
Loop
Close f
Open filein1 For Output As #f
Print #f, Buffer
Close f
End Sub

saluti
Giap

marpar
Inviato: Tuesday, May 04, 2010 8:54:17 AM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Grazie!!
Sei un genio!!

Vorrei integrare nella macro che mi apre il file che riscrivo di seguito:
_______________________________________
Sub Apri_file_EMN()

Dim Riporta As Boolean
Filein1 = ActiveWorkbook.Path & "\EMN.emn"
Open Filein1 For Input As #1
Numriga = 1

Do While Not EOF(1)
Line Input #1, Job$
If Job$ = ".END_PLACEMENT" Then Exit Do
If Riporta Then
Cells(Numriga, 3) = Job$
Numriga = Numriga + 1
End If
If Job$ = ".PLACEMENT" Then Riporta = True
Loop

Close

End Sub
_____________________________________

una funzione che scriva le stringhe si testo seguendo questo ordine:

riga 1 --> A1
riga 2 --> B1
riga 3 --> A2
riga 4 --> B2
riga 5 --> A3
e così di seguito fino alla fine del file, in parole povere le righe dispari riempiranno la conolla A e le righe pari la colonna B.

Come devo procedere per modificare la mia macro, basta anche un consiglio su cui poter lavorare.
Grazie
Ciao


a10n11
Inviato: Tuesday, May 04, 2010 10:18:48 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694

salve

Sub Apri_file_EMN()

Dim Riporta As Boolean
Filein1 = ActiveWorkbook.Path & "\EMN.emn"
Open Filein1 For Input As #1
Numriga = 1
x = 1
Do While Not EOF(1)
Input #f, Job$
If Job$ = ".END_PLACEMENT" Then Exit Do
If Riporta Then
col = IIf(x Mod 2 = 0, 2, 1)
Cells(Numriga, col) = Job$
Numriga = Numriga + 1
x = x + 1
End If
If Job$ = ".PLACEMENT" Then Riporta = True
Loop
Close
End Sub

saluti
Giap

marpar
Inviato: Tuesday, May 04, 2010 1:38:56 PM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Ho provato la macro ma si blocca, quindo ho modificato come di seguito;

Input #f, Job$ --> Line Input #1, Job$

lavora ma non da il risultato sperato:




Ciao
a10n11
Inviato: Tuesday, May 04, 2010 2:06:11 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
si blocca perchè io nelle mie prove uso una sintassi differente da quella che usi tu. e il copia incolla dei tuuoi riferimenti ha creato delle incongruità.
questo è il codice su cui ho fatto le prove con la modifica alla scrittura nelle celle:

Sub Apri_file_EMN()

Dim Riporta As Boolean
miapath= ActiveWorkbook.Path
f = FreeFile
Open miapath "\EMN.emn" For Input As #f
numriga = 1
x = 1
Do While Not EOF(f)
Input #f, Job$
If Job$ = ".END_PLACEMENT" Then Exit Do
If Riporta Then
col = IIf(x Mod 2 = 0, 2, 1)
Cells(numriga, col) = Job$
If col = 2 Then
numriga = numriga + 1
Else
numriga = numriga
End If
x = x + 1
End If
If Job$ = ".PLACEMENT" Then Riporta = True
Loop
Close
End Sub

saluti
Giap

marpar
Inviato: Wednesday, May 05, 2010 8:56:36 AM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Grazie!!! Adesso funziona a meraviglia, ho dovuto sistemare solo "miapath" che dava errore come di seguito:

Sub Apri_file_EMN()

Dim Riporta As Boolean
Filein1 = ActiveWorkbook.Path & "\EMN.emn"
f = FreeFile
Open Filein1 For Input As #f
numriga = 1
x = 1
Do While Not EOF(f)
Input #f, Job$
If Job$ = ".END_PLACEMENT" Then Exit Do
If Riporta Then
col = IIf(x Mod 2 = 0, 2, 1)
Cells(numriga, col) = Job$
If col = 2 Then
numriga = numriga + 1
Else
numriga = numriga
End If
x = x + 1
End If
If Job$ = ".PLACEMENT" Then Riporta = True
Loop
Close
End Sub


a10n11, spero con il tuo aiuto di diventare bravo con le macro di excel.
Saluti

a10n11
Inviato: Wednesday, May 05, 2010 9:26:23 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
l'istruzione
Open miapath "\EMN.emn" For Input As #f
non funzionava perchè è rimasta sulla tastiera un carattere.
questa è corretta
Open miapath & "\EMN.emn" For Input As #f

saluti
Giap

marpar
Inviato: Wednesday, May 05, 2010 9:53:48 AM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Grazie, ancora 2 domande:

1. Se volessi aprire il file (solo uno alla volta naturalmente) ma non specificando il nome es. *.emn come devo intervenire.
2. Se volessi ordinare in maniera sequenziale non su 2 colonne A-B ma su quattro A-B-C-D cosa devo modificare.

Ciao
a10n11
Inviato: Wednesday, May 05, 2010 12:37:08 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
la cosa non è impossibile, ma temo la domanda successiva che sarà inevitabile..
"Come faccio adesso a sovrascrivere i dati modificati??"

Riscrivere tutta la macro è un compito che ti lascio se non vuoi riportare la tabella ad una unica colonna.

questa è la macro di estrazione:

Sub Apri_file_EMN()
Dim Riporta As Boolean
numriga = 1
miapath = ActiveWorkbook.Path
ChDir miapath
fs = Dir("*.emn")
If fs = "" Then Exit Sub
While fs <> ""
f = FreeFile
Open fs For Input As #f
Riporta = False
col = 1
x = 1
Do While Not EOF(f)
Input #f, Job$
If Job$ = ".END_PLACEMENT" Then Exit Do
If Riporta Then
Cells(numriga, col) = Job$
col = col + 1
If col = 5 Then
numriga = numriga + 1
col = 1
Else
numriga = numriga
End If
x = x + 1
End If
If Job$ = ".PLACEMENT" Then Riporta = True
Loop
Close
fs = Dir
Wend
End Sub

saluti
Giap

marpar
Inviato: Wednesday, May 05, 2010 12:48:48 PM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Grazie, invece la domanda non te la farò perchè l'idea è di editare tutti i dati confrontandoli con altri file ed in seguito concatenare le stringe in una colonna che salverò nel file con la macro "RIMPIAZZA".
Appena avrò testato il tutto ti farò sapere.
Intanto ancora grazie per la prontezza ed esaustività delle risposte.
marpar
Inviato: Thursday, May 06, 2010 9:50:51 AM

Rank: Member

Iscritto dal : 4/23/2010
Posts: 20
Piccolo aiuto!!

In questa macro dovrei fare in modo che quando viene letta la stringa "0" la fase di export si blocchi alla stringa immediatamente prima, quindi che "0" sia il limite di lettura e non sia compresa nei dati estratti.


Sub RIMPIAZZA()
Dim f As Integer
Dim RigaTesto As String
Dim Buffer As String
filein1 = ActiveWorkbook.Path & "\EMN.emn"
f = FreeFile
Open filein1 For Input As #f
Do While Not EOF(f)
Input #f, RigaTesto
If RigaTesto <> ".PLACEMENT" Then
Buffer = Buffer & RigaTesto & vbCrLf
End If
If RigaTesto = ".PLACEMENT" Then
CTRL = True
Exit Do
End If
Loop
Buffer = Buffer & ".PLACEMENT" & vbCrLf
For n = 1 To Cells(Rows.Count, 3).End(xlUp).Row
Buffer = Buffer & Cells(n, 3).Value & vbCrLf
Next n
Do While Not EOF(f)
Input #f, RigaTesto
If RigaTesto = ".END_PLACEMENT" Then CTRL = False
If Not CTRL Then
Buffer = Buffer & RigaTesto & vbCrLf
End If
Loop
Close f
Open filein1 For Output As #f
Print #f, Buffer
Close f
End Sub

Grazie a tutti, ciao
a10n11
Inviato: Thursday, May 06, 2010 12:52:14 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
marpar ha scritto:
Piccolo aiuto!!

In questa macro dovrei fare in modo che quando viene letta la stringa "0" la fase di export si blocchi alla stringa immediatamente prima, quindi che "0" sia il limite di lettura e non sia compresa nei dati estratti.


salve
che significa la frase .." che non sia compresa tra i dati estratti"??
se nella tabella trova valori "0" ripetuti chi gli dice se appartiene o meno ai dati estratti?
Per stringa intendi il valore della cella oppure una stringa di testo che inizia per "0"??
I dati estratti possono avere righe che contengono solo "0"?
saluti
Giap


Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.