Buongiorno a tutti!
Premesse:
1) Uso excel 2013
2) Conoscenza di VBA: abbastanza scarsa
Negli ultimi tempi, mi trovo spesso ad utilizzare il componente aggiuntivo "Analisi dati" (Funcres.xlam), in particolare lo strumento "Statistica descrittiva"; per chi non lo conoscesse, lo strumento non fa altro che calcolare una serie una di funzioni (media, moda, mediana, varianza, curtosi ecc. ecc.) a partire da un set di dati che l'utente può selezionare tramite l'interfaccia del componente aggiuntivo.
Ora, altrettanto spesso i miei dati di partenza devono essere "splittati" in diversi gruppi, a seconda del valore che assumono delle variabili in alcune colonne; una volta splittati, posso procedere con il calcolo delle statistiche descrittive sui singoli gruppi.
Di per sè, la cosa non è difficile, ma fa sprecare parecchio tempo. Al che ho pensato che potrei superare il problema creando una macro che possa permettermi di ottenere le statistiche descrittive di cui ho bisogno senza organizzare preventivamente i dati. Questo posso farlo, ad esempio, con la media (media.più.se) e il conteggio (conta.più.se), ma non con altre (mediana, moda, varianza ecc.). Però al momento la cosa non mi interessa, preferisco concentrarmi sulla sola media, poi quando avrò acquisito dimestichezza con vba proverò a calcolare anche le altre funzioni.
Ho fatto una prova, creando una macro per il calcolo della funzione "somma.più.se". L'ho creata utilizzando la "registrazione" delle operazioni, quindi non ho scritto manualmente i comandi. Vi allego il file con i dati di partenza e la macro.
Cerco di spiegarvi come sono strutturati i dati di partenza e cosa ho fatto con la macro. (sperando di riuscirci... scusate ma non sono un fenomeno con le spiegazioni :))
Dunque: il file contiene dei dati inventati da me, organizzati in quattro colonne:
A) "Squadra": il nome di una squadra di calcio di serie A
B) "Giocatore": il nome di un possibile nuovo acquisto al calciomercato
C) "Ruolo": il ruolo ricoperto dal giocatore (quattro possibili valori: "P", "D", "C", "A")
d) "Costo": il costo legato all'acquisto del giocatore
I dati iniziano dalla riga 2 e arrivano alla riga 17; nella riga 1 vi sono, ovviamente, le intestazioni delle colonne.
Messi dentro i dati, ho fatto partire la registrazione della macro; come detto in precedenza, la macro ha come obiettivo quello di creare una tabella che mi faccia vedere quanto ha speso ogni squadra in ogni ruolo (quindi nella tabella riassuntiva non mi servono i nomi dei giocatori), utilizzando la funzione "somma.più.se".
Al termine della registrazione, ho aggiunto dei commenti ad alcuni passaggi della macro e 5-6 domande: sarei davvero felice se deste un'occhiata e mi deste un feedback; per i commenti, potreste aiutarmi a capire se ho ben capito le operazioni descritte dalle porzioni di codice; per le domande, ovviamente, potreste darmi risposte che reputo fondamentali per migliorare la macro e, più in generale, per capire meglio come funziona vba.
Ho ritenuto opportuno lasciare le domande all'interno del codice e non riportarle qui perchè mi sembrano meglio contestualizzate e più facili da capire guardando anche il codice. Tuttavia, se lo ritenete opportuno, posso copiarle e incollarle anche in questo post.
Ho altre due domande che mi frullano in testa e ve le faccio qui:
1) Il file di dati di esempio da me creato contiene 4 colonne e 17 righe; la macro da me registrata è "tarata" (almeno credo) sull'intervallo A1:D17; come posso fare per rendere valida la macro anche quando ho 100, 200 o 10.000 righe? Voglio dire, come posso "slegare" le operazioni da realizzare dal numero di righe, in modo che i calcoli vengano fatti su tutte le righe contenenti dati utili?
2) Con la seconda domanda vi propongo una possibile risposta alla prima: potrei selezionare gli intervalli di dati che mi interessano all'inizio, tramite una cosa simile a quella che vedete nell'immagine png allegata (non so come si chiami...); potrei fare diverse "selezioni": selezionare tutti i dati da sommare (segnalando che le intestazioni devono essere selezionate), selezionare la colonna con la prima variabile (quella da mettere in riga) e selezionare la colonna con la seconda variabile (quella da mettere in colonna). Eccoci alla domanda: come si fa a far "comparire" quella finestra che permette di selezionare un intervallo di celle? Cercando qui e là ho trovato qualcosa di simile con "InputBox", ma ovviamente non è quello che mi serve.
Vi ringrazio anticipatamente per aver letto il mio post e per tutto l'aiuto che vorrete/potrete darmi!! ;)
Excel 2013