Evviva!
Adesso parliamo del problema del file .out che mette i dati su due righe; non so se hai confermato che il tracciato e' sempre come lo hai descritto nel messaggio del 03/11/06 09:39, supponiamo di SI.
In questa situazione possiamo procedere cosi’:
1)ti crei un foglio (all’ interno del tuo file) col nome Work (doppioclick sul tab del nome, digiti il nuovo nome); questo sara’ il foglio in cui copieremo il .out nelle colonne M e successive.
2) selezioni Work e ci importi come esempio un file .out con la seguente macro:
- Codice: Seleziona tutto
Sub Macro2()
'
' Macro2 Macro
' Macro registrata il 08/11/2006 da cad1
'
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Documents and Settings\cad1\Desktop\CAMP_1.out", Destination:=Range( _
"M1"))
.Name = "CAMP_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = "'"
.Refresh BackgroundQuery:=False
End With
Range("I15").Select
End Sub
(E’ LA TUA con la variante della cella di destinazione)
3) Con pazienza, nelle celle A e successive metti formule che prendono i dati disordinati da M e successive e creano una tabella ordinata.
Quindi per i titoli: B2=N1 C2=O2 D2=P2 etc
Per i valori: A4=M4 B4=N4 C4=N5 D4=O5 etc
E cosi’ via fino ad avere a sx una immagine ordinata di quanto e’ a destra
NOTA: se hai pazienza, invece di queste formule usane una leggermente piu’ annoiante ma migliore, cioe’ B2=SE(N1= " "; " ";N1) In questo modo se una cella di dx e’ vuota lasci vuota anche la cella di Sx; con la formula B2=N1, se N1 e’ vuota in B2 metteresti 0.
4) Selezioni tutta la tabella di sx e assegni a questo range il nome Normalizz (Menu ->Inserisci ->Nome ->Definisci; nella finestrella che compare, nell’ area “Nomi nella cartella di lavoro:” scrivi Normalizz; chiudi con Ok)
5) Cancelli la macro Macro2 e copi questa:
- Codice: Seleziona tutto
Sub Viskio()
AWN = ActiveSheet.Name 'Nome del Foglio di partenza
'Seleziona foglio Work
Sheets("Work").Select
'Seleziona file
Scegli:
FullNome = Application.GetOpenFilename(Filefilter:="Output Files (*.out), *.out,Tutti (*.*),*.*", Title:="Seleziona file")
'Segnala file scelto e Azione
Mess = ">>Selezionato " & FullNome & vbCrLf & ">>Foglio di destinazione: " & AWN & vbcrlf & ">> SI per Confermare; NO per Cambiare; CANCEL per abortire"
scelta = MsgBox(Prompt:=Mess, Buttons:=vbYesNoCancel)
If scelta = 2 Then GoTo Esci 'Cancel
If scelta = 7 Then GoTo Scegli 'NO = Riseleziona
'Importa file selezionato
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FullNome, Destination:=Range("M1"))
.Name = "CAMP_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = "'"
.Refresh BackgroundQuery:=False
End With
'Torna al file di partenza
Sheets(AWN).Select
Columns("A:K").Select 'Azzera colonne A:K
Selection.ClearContents
Range("Normalizz").Copy 'Copia range Normalizz si foglio Work
Range("A1").Select ' e incolla valori su foglio di partenza
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Esci:
Sheets(AWN).Select
End Sub
6) Assegni alla macro un tasto di scelta rapida: Menu ->Strumenti ->Macro ->Macro; selezioni la macro Viskio, premi Opzioni; nell’ area “Tasto di scelta rapida” inserisci I (maiuscolo); chiudi con Ok e X.
In questo modo la macro sara’ lanciata tutte le volte che premi (insieme) Contr-Maiusc-I.
Uso:
-Selezionare il foglio su cui si vogliono incollare i dati presi dal file .out
-premere Contr-Maiusc-I per lanciare la macro;
-selezionare il file da importare;
-se il file selezionato e il foglio di destinazione sono corretti, confermare con SI, oppure No per scegliere altro file o Annulla per abortire tutto.
Se hai dubbi, fatti sentire.
Ciao,