|
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
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
|
|
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
|
|
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.....
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
Guest |