Condividi:        

[Excel] Riordinare matrici di valori

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Riordinare matrici di valori

Postdi dariozza » 14/07/11 14:50

Ciao a tutti, è il primo post che scrivo e se dovessi ripetere un argomento già trito e ritrito avvertitemi!
Il mio problema consiste nel riordinare una serie di matrici esportate da un altro software in modo da ottenere un formato tipo "database".

Il foglio excel esportato dall'altro software è strutturato così:
Grid receiver 1 at (x,y,z) = (0.5, 29.1, 1.7)
PARAMETRI F1 F2 F3 F4 F5 F6 F7 F8
PARAMETRO1 4,8 4,19 4,48 6,45 6,16 5,45 3,77 1,54
PARAMETRO2 5,09 7,23 5,87 5,45 5,76 5,71 3,38 1,59
PARAMETRO3 66 76,7 70,7 71,9 71,9 68,6 68,5 71,5
PARAMETRO4 -7,1 -13,7 -8,4 -11 -12,6 -5,9 -5,2 -2,5
PARAMETRO5 0,06 0,01 0,04 0,02 0,01 0,06 0,07 0,09
PARAMETRO6 373 478 444 550 546 421 291 154
PARAMETRO7 0,32 0,342 0,339 0,315 0,286 0,312 0,32 0,322
PARAMETRO8 77,4
PARAMETRO9 68,2
PARAMETRO10 0,4
Grid receiver 2 at (x,y,z) = (0.5, 30.1, 1.7)
PARAMETRI F1 F2 F3 F4 F5 F6 F7 F8
PARAMETRO1 4,8 4,19 4,48 6,45 6,16 5,45 3,77 1,54
PARAMETRO2 5,09 7,23 5,87 5,45 5,76 5,71 3,38 1,59
PARAMETRO3 66 76,7 70,7 71,9 71,9 68,6 68,5 71,5
PARAMETRO4 -7,1 -13,7 -8,4 -11 -12,6 -5,9 -5,2 -2,5
.....e così via per ogni punto della griglia calcolata. I parametri 8,9 e 10 sono "totali", non dipendendi dai campi F1..F8

A me interessa possibilmente avere questi dati in un formato tipo "database", ad esempio:
Point n. x y z P1F1.. P1F8 P2F1.. P2F8 P7F8 ... P8 P9 P10
1 0.5 29.1 1.7 4,8 4,19 1,54
2
3
ecc...

Ringrazio in anticipo chiunque vorrà darmi una mano! A presto!
Dario
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23

Sponsor
 

Re: [Excel] Riordinare matrici di valori

Postdi Anthony47 » 14/07/11 15:01

Ciao dariozza, benvenuto nel forum.
Mi sono fatto una vaga idea di come sono i dati di partenza, ma su come vorresti riorganizzarli sono rimasto nella nebbia.
Prova ad allegare un file di esempio con sia i dati grezzi che quelli come vorresti riordinarli; trovi le istruzioni qui: viewtopic.php?f=26&t=80395
(prima di poter allegare un link dovrai avere il contatore dei messaggi a 3, quindi scrivine un paio solo per fare numero)

Mi confermi che i numeri in input usano sia il punto che la virgola come separatore decimale (diabolico)?

Ciao, ti aspettiamo.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Riordinare matrici di valori

Postdi dariozza » 18/07/11 08:50

Ciao ti ringrazio e mi scuso per il ritardo nella risposta, ma sono in fase "trasloco casa" e senza internet ancora...

Allora, per ordine: i numeri in input usano la virgola o il punto in base all'impostazione data.
Caso particolare, però riguarda "l'intestazione della matrice" dove sono presenti le coordinate dei punti xyz in quanto il formato (x,y,z) non è modificabile mentre si può usare il punto o la virgola per i decimali all'interno dei valori x y z.
2 esempi (entrambi possibili):
Grid receiver 1 at (x,y,z) = (0.5, 29.1, 1.7)
Parametro1 4.80 4.19 4.48 6.45 6.16 5.45 3.77 1.54

Grid receiver 1 at (x,y,z) = (0,5, 29,1, 1,7)
Parametro1 4,80 4,19 4,48 6,45 6,16 5,45 3,77 1,54
Ultima modifica di dariozza su 18/07/11 08:58, modificato 1 volte in totale.
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23

Re: [Excel] Riordinare matrici di valori

Postdi dariozza » 18/07/11 08:57

Il formato a cui vorrei arrivare alla fine del lavoro è del tipo:

[N.Punto] [x] [y] [z] [Param1_F1]...[Param1_F8] [Param2_F1]...[Param2_F8] e così via,dove con [xxx] identifico l'intestazione della colonna.

Nel frattempo posto un file di output del programma come esempio.

A presto!
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23

Re: [Excel] Riordinare matrici di valori

Postdi dariozza » 18/07/11 09:18

Ecco il link al file contenente sia i dati grezzi sia il formato nel quale vorrei riuscire a sistemarli.
http://www.mediafire.com/?5rnv7iq9c0ir3ky

Grazie a tutti
A presto
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23

Re: [Excel] Riordinare matrici di valori

Postdi Anthony47 » 18/07/11 15:24

Per evitare equivoci, vorresti quindi che sotto l' intestazione EDT-63 si leggesse 4,8 poi 4,41 etc?
E le intestazioni sono fisse (63, 125, 250, 500 etc) o possono cambiare?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Riordinare matrici di valori

Postdi dariozza » 19/07/11 11:45

Mi spiego meglio: ho diversi parametri "fissi" (edt, c80, ...) suddivisi in 8 frequenze "fisse" (63, 125, 250,..) che mi creano una matrice di valori calcolati nel punto i alle coordinate (xyz)i.
Il software mi restituisce in output diverse matrici di valori calcolate ognuna in un punto i diverso nello spazio.
Così come il software me le fornisce non riesco ad utilizzarle in automatico, per cui mi servirebbe un modo per riordinare tutti i valori in modo da creare una matrice funzione di:
- n.punto in cui sono stati calcolati i valori
- variabile "parametro/frequenza"

Nell'esempio che ho riportato ho appunto "linearizzato" la matrice accorpando i parametri con le frequenze.
Riporto lo stesso esempio con un paio di righe in cui ho effettuato manualmente il riordino.
http://www.mediafire.com/?m2i8ffv6h891bdg

Grazie ancora
Dario
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23

Re: [Excel] Riordinare matrici di valori

Postdi Anthony47 » 19/07/11 16:19

Per principio sono contrario a soluzioni chiavi in mano, che non aiutano l' utente se non nell' immediato; in questo caso faccio, per pigrizia, una eccezione.
Pertanto, lavorando sul file pubbicato:
-Alt F11 per aprire l' editor delle macro
-Menu /inserisci /Modulo
-copia questo codice e inseriscilo nel frame di dx
Codice: Seleziona tutto
Dim DestW As String, SrcW As String
Sub darioz()
Dim TRiga As String
DestW = "Formato dati finale"    '<<< Il foglio di uscita
SrcW = "Dati in Output"        '<<< Il foglio coi dati di partenza
LastR = Sheets(SrcW).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(SrcW).Select
Application.ScreenUpdating = False
For I = 1 To LastR
    TRiga = Left(Cells(I, 1), 13)
    Select Case TRiga
        Case "Grid receiver": Call NewGrid(I)
        Case "EDT", "T30", "SPL", "C80", "D50", "Ts", "LF80": Call Transf(8, I)
        Case "SPL(A)", "LG80*", "STI": Call Transf(1, I)
    End Select
Next I
Application.ScreenUpdating = True

End Sub

Sub Transf(NCell, RigaN)
Cells(RigaN, 2).Resize(1, NCell).Copy
Sheets(DestW).Select
Cells(Rows.Count, 1).End(xlUp).Select
ActiveCell.Offset(0, 200).End(xlToLeft).Offset(0, 1).PasteSpecial _
    Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets(SrcW).Select
Application.CutCopyMode = False
End Sub

Sub NewGrid(RigaN)
Dim Splt1, Splt2
NwGrid = Cells(RigaN, 1)
Sheets(DestW).Select
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
ActiveCell = Val(Trim(Mid(NwGrid, 14, 3)))
Splt1 = Split(Replace(Replace(NwGrid, "(", ""), ")", ""), "=")
Splt2 = Split(Splt1(1), ",")
ActiveCell.Offset(0, 1) = Val(Splt2(0))
ActiveCell.Offset(0, 2) = Val(Splt2(1))
ActiveCell.Offset(0, 3) = Val(Splt2(2))
Sheets(SrcW).Select
End Sub

Adatta eventualmente le sitruzioni marcate <<<.
Torna sul file excel, sul foglio Dati finali lascia solo la riga delle intestazioni.
Poi lancia la macro "darioz" (Alt-F8, scegli "darioz" dall' elenco che ti propone, premi Esegui) e vedi, l' effetto che fa.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Riordinare matrici di valori

Postdi dariozza » 20/07/11 14:17

Intanto ti ringrazio, funziona perfettamente.
Concordo pienamente sulla questione "chiavi in mano" e prometto che userò la macro non come uno strumento fine a se stesso ma come "caso studio"...(ciò vuol dire che tornerò a chiederti informazioni molto presto!)
Ho dato uno sguardo al codice: se incremento il numero di punti (grid receiver)(nel file di esempio erano 10 ma possono arrivare facilmente a diverse migliaia), per ottenere il valore corretto alla voce [Punto n.] incremento il parametro "length" qui giusto? [ActiveCell = Val(Trim(Mid(NwGrid, 14, 3)))]

Grazie ancora
Dario
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23

Re: [Excel] Riordinare matrici di valori

Postdi Anthony47 » 20/07/11 16:20

Ho dimenticato di dirti che con quelle istruzioni arrivi max a 99 blocchi; ne consegue che non basta intervenire su "lenght" nella istruzione che indichi ma devi cambiare le istruzioni. Elimina Activecell = Val(Trim(etc etc e sostituiscila con
Codice: Seleziona tutto
Splt0 = Split(NwGrid, " ")
ActiveCell = Val(Splt0(2))
Questa utilizza la terza "parola" all' interno di "Grid receiver 321 at etc etc" usando lo "spazio" come separatore, qualsiasi sia la sua lunghezza (321 nell' esempio).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Riordinare matrici di valori

Postdi dariozza » 27/07/11 09:19

Funziona perfettamente!

Grazie ancora e a presto!
Dario
dariozza
Newbie
 
Post: 7
Iscritto il: 14/07/11 14:23


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Riordinare matrici di valori":


Chi c’è in linea

Visitano il forum: Nessuno e 27 ospiti