Raggruppamenti... misteriosi

Chissà quante mille volte vi sarà capitato di voler sapere a quale gruppo appartiene un elemento di un insieme raggruppati a un certo numero alla volta... a me poche volte, veramente, ma mi è venuto in mente di utilizzare una piccola funzione VBA che sembra alquanto sottovalutata e che invece serve bene allo scopo. In altre parole dato un insieme composto da elementi numerati, serve conoscere in quale gruppo si posiziona un elemento qualsiasi, sapendo che i gruppi sono numerati da 1 e hanno tutti un numero fisso di elementi. Esempi:
  • In una classe di 20 alunni, raggruppandoli a quattro a quattro, l'alunno numero 15 si pone nel quarto gruppo.
  • In una cassetta di 23 mele, raggruppandole a cinque a cinque, la mela numero 7 finisce nel gruppo numero 2.
  • In una scatola di 64 pennarelli, in gruppi di dodici, il pennarello n° 25 si trova nel gruppo numero 3.
La funzione utilizzata è semplicissima: Partition, che restituisce un valore Variant (String) che indica la posizione di un numero in una serie calcolata di intervalli. La sua sintassi è
Partition(number, start, stop, interval)
dove number è il numero intero da valutare in base agli intervalli; start è il numero intero che corrisponde all'inizio della serie di intervalli. Non può essere minore di 0; stop è il numero intero che corrisponde alla fine della serie di intervalli. Non può essere uguale o minore di start; interval rappresenta il numero di elementi che costituiscono un gruppo. La stringa restituita ha la forma "numero:numero+intervallo" e rappresenta il gruppo in cui si posiziona il numero fornito; splittando la stirnga in corrispondenza dei duepunti, prelevando il secondo item e dividendolo per l'intervallo, otteniamo il gruppo in chiaro:
group = Split(Partition(number, start, stop, interval), ":")(1) / interval
Così per esempio il primo esempio proposto:
Split(Partition(15, 1, 20, 4), ":")(1) / 4
restituisce 4. Applicazioni pratiche? non lo so :-)

posted @ sabato 21 marzo 2015 18:22

Print

Comments on this entry:

No comments posted yet.

Your comment:



 (will not be displayed)


 
 
 
Please add 6 and 8 and type the answer here:
 

Live Comment Preview: