Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Allineare per riga dati di più tabelle

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

Allineare per riga dati di più tabelle

Postdi toymen » 13/04/14 08:52

salve,
premesso che uso Excel pro 2013, ho questa esigenza. in un file ho una tabella enorme che è il risultato dell'accorpamento di 3 Tabelle. queste hanno in comune dei dati (nello specifico il nome dei Titoli di borsa inseriti rispettivamente nelle colonne A/T/AG) ma per il resto riportano valori diversi.
L'esigenza è quella di allineare i valori secondo il nome del titolo non coincidendo le righe di ogni titolo rispetto alle tre tabelle. in altri termini, le tre tabelle sono rispettivamente: A8: S361; T8: AF358; AG8:BE357 e sono contigue. I valori da allineare devono essere quelli corrispondenti alle colonne A, T, AG. Ritengo importante precisare la Riga 8 corrisponde alle intestazioni di colonna, quindi non rientra tra i dati da allineare.
Si presentano 2 problemi: 1. "normalizzare" i nomi dei Titoli (col A/T/AG) in quanto ad es il nome riportato in A145 (ENI .) è leggermente difforme da quello riportato in A146 (Eni) e da quello riportato in AG145 (Eni spa), essendo i tre nomi corrispondenti allo stesso titolo ma poiche derivano da queries di fonti diverse, hanno delle difformità di denominazione. C'è un modo per rendere omogenei i valori riportati nelle tre colonne? Ho provato ad adottare la formula =sinistra(A145;3) mi permetterebbe di estrarre le prime 3 lettere di ogni titolo e di ogni colonna, ma e' inadeguata inadeguata in quanto spesso dello stesso titolo ci sono più tipologie (ad es. "zucchi" e "zucchi risp"). Infine, normalizzati i nomi delle tre colonne, dovrei fare in modo che i valori riportati nelle colonne successive rispetto a quella del nome del titolo vengano allineati ottenendo un'unica nuova Tabella stavolta con 1 sola colonna "Titolo" a cui si affiancano le restanti colonne delle tre tabelle.
So che pongo un quesito complicato, e magari sarebbe opportuno allegare il file ma qui non vedo la possibilità di inserire un allegato. L'ideale sarebbe inserire delle nuove colonne prima delle tabelle che copio con una macro da altri fogli nel foglio "SintMF_BOR_MOR", nelle quali inserire delle formule che direttamente "estraggano" i dati e quindi poi nascondere le colonne restanti. grazie a tutti sin da ora
P.S. come si allega un file in questo Forum?
toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Sponsor
 

Re: Allineare per riga dati di più tabelle

Postdi Anthony47 » 14/04/14 01:21

Ciao toymen, benvenuto nel forum.
Per risolvere il problema delle difformita' di denominazione hai secondo me due opzioni
1-Ti crei a mano una tabella dove indichi per ogni titolo, uno per riga, come quel titolo e' denominato in ciascuna delle tre tabelle
2-Oltre al nome del titolo estrai anche il suo Isin, che sara' usato per l' allineamento; i siti che si occupano di finanza credo contengano anche questo codice univoco.

Per allegare un file guarda qui: viewtopic.php?f=26&t=80395

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Allineare per riga dati di più tabelle

Postdi toymen » 14/04/14 13:17

grazie per la solerzia con cui riscontri il mio post.
e tuttavia le fonti da cui derivano i dati sono le uniche che non sono a pagamento. Le stesse fonti tuttavia non riportano affianco a ogni titolo il rispettivo ISIN.
saluti toymen
toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Re: Allineare per riga dati di più tabelle

Postdi toymen » 14/04/14 13:19

come allineare comunque i dati? quale formula?
toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Re: Allineare per riga dati di più tabelle

Postdi Anthony47 » 15/04/14 01:03

come allineare comunque i dati? quale formula?
So che la domanda puo' sembrare una provocazione, ma quale delle due vie (o anche una terza) pensi di poter percorrere?
Poiche' l' operazione richiedera' una macro, servira' anche il layout preciso dei dati, meglio se pubblichi un file di esempio.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Allineare per riga dati di più tabelle

Postdi toymen » 15/04/14 14:50

allegherei volentieri il file in questione. se solo riuscissi a capire come si fa. perdonami, ma non riesco a trovare il modo di allegare il file a questo post
toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Re: Allineare per riga dati di più tabelle

Postdi ricky53 » 15/04/14 16:35

Ciao,
leggi QUI e saprai come fare per allegare un file.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare per riga dati di più tabelle

Postdi toymen » 15/04/14 17:29

toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Re: Allineare per riga dati di più tabelle

Postdi Anthony47 » 18/04/14 02:15

Ci sono un paio di operazioni preliminari da fare sul tuo file, in questo ordine:
1) selezionare l' intera colonna A (primi Titoli)
a) sostituire tutte le stringhe " ." con "" (cioe' eliminare la sequenza)
b) sostituire tutte le stringhe "." con "" (cioe' eliminare il "punto")
c) sostituire tutte le stringhe " spa" con "" (cioe' eliminare la sequenza)
2) selezionare l' intera colonna T (secondi Titoli) e ripetere le fasi a, b, c
3) selezionare l' intera colonna AG (terzi Titoli) e ripetere le fasi a, b, c
4) ordinare per "titolo" crescente l' intervallo A:S
5) idem per l' intervallo T:AF
6) idem per l' intervallo AG:BE

Tutto questo lo puoi automatizzare registrando una macro mentre esegui le suddette operazioni una alla volta:
-da Excel, Menu /Sviluppo /Gruppo Codice, Registra macro
-lascia pure il nome che ti propone (prendi nota), seleziona "Memorizza macro in questa cartella di lavoro"; Ok
-esegui diligentemente le operazioni suddette, nell' ordine indicato.
-al termine ferma la registrazione: Sviluppo /Gruppo Codice, Interrompi registrazione

Se non vedi il tab "Sviluppo" nel tuo ribbon dei menu segui le istruzioni di questo articolo: http://office.microsoft.com/en-us/excel ... 19080.aspx

Questa prima normalizzazione consente di eliminare le differenze piu' semplici all' interno dei nomi titoli, e per replicarla bastera' mandare in esecuzione la macro autoregistrata.

Poi, partendo da Excel:
-premi Alt-F11 per aprire l' editor delle macro
-Menu /Inserisci /Modulo
-copia questo codice e incollalo nel frame vuoto di destra:
Codice: Seleziona tutto
Option Compare Text
Option Base 1
Dim TStart As Variant, TTit(0 To 10) As Integer, TWidth As Variant

Sub myToy()
Dim I As Long, myPos As Long, SSh As String
Dim myNorm As Long, mySkip As Long

SSh = "SintMF_BOR_MOR"              '<<< Il foglio con le 3 tabelle da allineare
TStart = Array(1, 20, 33)           '<<< Le colonne dove cominciano le tre tabelle
TWidth = Array(19, 13, 25)          '<<< Le colonne delle singole tabelle
'
Sheets(SSh).Copy After:=Sheets(SSh)
'
I = 9
Do
DoEvents
Cells(I, 1).Select
    myPos = GimmePos(I, Range("A1"))
    'ORDINE: T1.T2.T3
    myNorm = 0
    For JJ = 1 To 3
        mySkip = Int(myPos / (10 ^ (3 - JJ)))
        If mySkip > 0 Then
            myPos = myPos - mySkip * (10 ^ (3 - JJ))
            Cells(I, TStart(JJ)).Resize(mySkip, TWidth(JJ)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next JJ
I = I + myNorm + 1
If I > Cells(Rows.Count, 1).End(xlUp).Row Then Exit Do
'If I > 294 Then Stop
Loop
End Sub

Function GimmePos(ByVal myRow As Long, ByRef zczc As Range) As Long
Dim A$, B$, C$, JJ&, JK&
Erase TTit
'TStart = Array(1, 20, 33)
'
A = Replace(Replace(Replace(Cells(myRow, TStart(1)), ".", ""), " spa", ""), " ", " ")
B = Replace(Replace(Replace(Cells(myRow, TStart(2)), ".", ""), " spa", ""), " ", " ")
C = Replace(Replace(Replace(Cells(myRow, TStart(3)), ".", ""), " spa", ""), " ", " ")
If A = "" Then A = "zzczzc"
If B = "" Then B = "zzczzc"
If C = "" Then C = "zzczzc"

If A > B Then TTit(1) = TTit(1) + 1
If A > C Then TTit(1) = TTit(1) + 1

If B > A Then TTit(2) = TTit(2) + 1
If B > C Then TTit(2) = TTit(2) + 1

If C > A Then TTit(3) = TTit(3) + 1
If C > B Then TTit(3) = TTit(3) + 1
'
If A = "zzczzc" Then TTit(1) = 0 '
If B = "zzczzc" Then TTit(2) = 0 '
If C = "zzczzc" Then TTit(3) = 0 '
'
If TTit(1) = 0 And TTit(2) = 0 And TTit(3) = 0 Then GoTo Esci
If TTit(1) = 1 Or TTit(2) = 1 Or TTit(3) = 1 Then GoTo Esci
If TTit(1) = 2 Then TTit(1) = 1
If TTit(2) = 2 Then TTit(2) = 1
If TTit(3) = 2 Then TTit(3) = 1
Esci:
GimmePos = TTit(1) * 100 + TTit(2) * 10 + TTit(3)
End Function

Personalizza le istruzioni marcate <<<, adeguandole al tuo file (io le ho adeguate al file che hai condiviso).

Poi torna su Excel es esegui la macro myToy:
-Alt-F8
-seleziona myToy dall' elenco di macro disponibili
-premi Esegui

La macro creera' una copia del foglio indicato come sorgente e poi su questa copia cerchera' gli allineamenti da realizzare.
Il file sara' da salvare nel formato "xlsm".

Prova e fai sapere....
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Allineare per riga dati di più tabelle

Postdi toymen » 21/04/14 10:12

grazie infinite.rispondo solo ora alla t risposta in quanto ho dovuto formattare pc e quindi recuperare i relativi dati. provero' prossime ore a eseguire le tue preziose indicazxioni e ti farò sapere. davvero molte grazie
cordialità
toymen
toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Re: Allineare per riga dati di più tabelle

Postdi toymen » 24/04/14 08:48

perfetto. tutto sembra funzionare miracolosamente. grazie!
p.s. ma se il tutto si volesse fare attraverso l'uso di una macro, incluso l'allineamento delle tabelle dopo aver "normalizzato" i nomi dei titoli?
Dico questo perchè debbo fare un lavoro simile e, essendo digiuno di programmazione e codici di scrittura, magari con una macro riesco a cavarmela.
in ogni caso grazie davvero
saluti toymen
toymen
Newbie
 
Post: 8
Iscritto il: 12/04/14 07:45

Re: Allineare per riga dati di più tabelle

Postdi Anthony47 » 27/04/14 00:54

perfetto. tutto sembra funzionare miracolosamente. grazie!
Non ci sono miracoli, e' tutto frutto di ingegno umano.

ma se il tutto si volesse fare attraverso l'uso di una macro, incluso l'allineamento delle tabelle dopo aver "normalizzato" i nomi dei titoli?
Ma noi ABBIAMO usato una macro...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Allineare per riga dati di più tabelle":


Chi c’è in linea

Visitano il forum: alfrimpa e 16 ospiti