tabella doppia entrata



  • tabella doppia entrata
    di matdb80 (utente non iscritto) data: 08/12/2012 08:58:29

    ciao a tutti.
    Io ho il seguente problema: Ho una taballa a doppia entrata (circa 20 righe X 20 colonne), in testa alle colonne c'è un valore, in testa alle righe ce n'è un altro. All'incrocio di riga e colonna c'è un terzo valore. A seconda del valore che io scelgo in testa di colonna e del valore che sempre io scelgo in testa di riga, devo moltiplicare il valore che trovo all'incrocio per un quarto valore che è presente un una casella esterna a questa tabella.
    Lo scopo sarebbe:
    1-inserisci in una casella del foglio excel il valore in testa alla colonna scelta (quello desiderato dall'utente)
    2-inserisci in un'altra casella del foglio excel il valore presente in testa alla riga (quello desiderato dall'utente)
    3-inserisci in un'altra casella un valore esterno a questa tabella
    4-moltiplica il valore inserito al punto 3, per il valore presente all'incrocio di riga e colonna (posizioni di riga e colonna selezionate ai punti 1 e 2), come se quest'ultimo valore fosse una percentuale

    esempio:

    - casella "A1": 10 (vaore esistente nella tabella, inserito dall'utente)
    - casella "B2": 50 (vaore esistente nella tabella, inserito dall'utente)
    - incrocio di A1 e B2 trovo il valore 30%
    - casella "X30" inserisco manualemnte il valore numerico 100
    risultato che devo ottenere in un'ulteiroe casella esterna alla colonna = 130


    grazie



  • di Vecchio Frac data: 08/12/2012 09:35:06

    Hai praticamente fatto tutto...
    Ti manca solo di individuare il valore all'incrocio dei dati scelti dall'utente.

    Il punto è solo trovare il valore all'incrocio di A1 e B2; leggendo il quesito la mia idea è stata questa:
    cerco l'etichetta della colonna, ne ricavo la posizione; cerco l'etichetta di riga, ne ricavo la posizione; recupero il valore indicato con un riferimento all'indirizzo individuato da questi valori.
    La premessa è che righe e colonne abbiano un'intestazione definita e che l'utente indichi in due celle separate questi riferimenti.
    Es. ho messo come etichette c1, c2 e c3 per le colonne; r1, r2 e r4 per le righe; in g1 scrivo "r1" e in h1 scrivo "c3"; la formula sotto g1 mi dà il numero della riga in cui trova r1 e la formula sotto h1 la posizione della colonna. Quindi una formula altrove mi dà il riferimento a questa intersezione. Forse si può capire meglio se allego l'esempio :)





  • di matdb80 (utente non iscritto) data: 08/12/2012 13:32:10

    ciao Vecchio Frac,
    grazie della rapidità. La tua soluzione mi sembra vicina a quel che miserve...nl file che ho allegato, ho messo un esempio pratico con l'esempio del risultato che devo ottenere. Se può esserti utile all soluzione che mi serve...

    grazie ancora

    ciao



  • di Vecchio Frac data: 09/12/2012 09:21:13

    Allora ti propongo il file allegato.
    Ho messo in piedi una piccola funzione che accetta un range tabella e due coordinate (identificate dai valori di etichetta di riga e colonna all'intersezione dei quali c'è un valore). Quindi effettua il calcolo necessario secondo la tua impostazione.
    Riporto per comodità la Function (anche perchè gli allegati tra qualche giorno spariscono).
     
    Function interseca(table As Range, find_in_row As String, find_in_column As String) As String
    Dim r As Range, c As Range
    
        Set r = table.Columns(1).Find(find_in_row)
        If r Is Nothing Then interseca = "#N/D(R)": Exit Function
        Set c = table.Rows(1).Find(find_in_column)
        If c Is Nothing Then interseca = "#N/D(C)": Exit Function
    
        interseca = Cells(r.Row, c.Column)
    End Function






  • di matdb80 (utente non iscritto) data: 10/12/2012 09:42:37

    perfetto!!

    grazie mille!



  • di matdb80 (utente non iscritto) data: 12/12/2012 10:00:43

    ciao Vecchio Frac
    scusa se rompo ancora...ma mi è sorta l'esigenza di modficare le dimensioni della tabella...se lo facci la function non funziona più, mi potresti spiegare come ragiona? La tabella è fatta circa cosi:

    colonne
    righe 5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 55% 60%
    1% 25 11 7 5 4 3 3 3 2 2
    2% 67 25 15 11 9 7 6 5 5 4
    3% 150 43 25 18 14 11 9 8 7 6
    4% 400 67 36 25 19 15 13 11 10 9
    5% - 100 50 33 25 20 17 14 13 11
    6% - 150 67 43 32 25 21 18 15 14
    7% - 233 87 54 39 30 25 21 18 16
    8% - 400 114 67 47 36 30 25 22 19
    9% - 900 150 82 56 43 35 29 25 22
    10% - - 200 100 67 50 40 33 29 25
    11% - - - 300 150 100 75 60 50 43


    vorrei essere in gradi di variarmi la function autonomamente se dovessi aver bisogno di cambiare ancora la tabella

    grazie mille



  • di Vecchio Frac data: 12/12/2012 10:12:00

    Esigenza legittima e giustificata :)
    La Function INTERSECA accetta un parametro di tipo range e due di tipo string, il primo può essere un nome definito, i secondi un riferimento a celle che contengono del testo.
    Ciò premesso, devi semplicemente passare alla Function la giusta dimensione della tabella.
    Nell'esempio del file che hai visto, "table" è un range che comprende A1:D4 e la funzione in H4 dice solo =interseca(table;G2;H2). Quindi ti basta estendere il nome definito "table" per ricomprendere tutta la tabella interessata.
    Oppure, se non vuoi definire un nome, puoi passare a =INTERSECA anche un range, ad esempio con =INTERSECA(A1:L14;"5%";"25%") che significa "dammi il valore all'intersezione della colonna con etichetta 25% e riga con etichetta 5%" (nel tuo ultimo esempio sarebbe 20).





  • di matdb80 (utente non iscritto) data: 12/12/2012 10:27:42

    grazie ancora...sono stato proprio stupido...non avevo visto che "table" lo avevi deifnito come nome..e non vedevo della function alcuna definizione di table..





  • Soluzione conformule
    di Vecchio Frac data: 14/12/2012 11:34:06

    Riprendo brevemente questa discussione perchè mi sono interessato a una soluzione *senza* codice VBA.
    Ne è venuta fuori una normale formula da applicare a una cella per ottenere il risultato voluto.
    Sia "table" la solita tabella.
    La formula seguente trova il valore all'intersezione dei valori di riga e colonna cercati, inserendo al posto giusto le etichette di riga e colonna al cui incrocio si trova il valore cercato:

    =INDICE(table;CONFRONTA("etichetta_di_riga";INDICE(table;0;1);0);CONFRONTA("etichetta_di_colonna";INDICE(table;1;0);0))

    E se poi vengono nominate perfino le colonne e le righe con dei nomi definiti, si può usare questa forma per ottenere lo stesso risultato:

    .................pippo.....topolino
    pluto..........5..........10
    paperino......4..........8

    =pippo paperino
    restituisce 4 :)