marzo 2015 Blog Posts

Gli ultimi saranno i primi... chi cerca trova

Una semplice funzioncina da tenere sott'olio per farsi restituire l'ultima occorrenza di una stringa, in un range dato. Si può specificare se per la ricerca della la stringa si usa il metodo della "parola intera" o della "parte di testo". L'idea è nata dal voler migliorare questo codice, di ricerca brutale a partire dal fondo del range specificato, per farsi restituire l'ultima ricorrenza della stringa cercata: Option Explicit Sub find_last_in_cell() Dim cell As Range, ur As Long, i As Long ur = Range("A" & Columns(1).Rows.Count).End(xlUp).Row For i = ur To 1 Step -1 ...

E' in arrivo sul terzo binario...

Raccolgo qui un paio di utili funzioni per esprimere la conversione da numero binario a numero decimale e viceversa, frutto di un suggerimento di qualche anno fa del vecchio amico Diego Cattaruzza. La prima funzione è DeToBin e converte un numero decimale in stringa che rappresenta il numero in formato binario. Opzionalmente si può specificare il numero di cifre binarie restituite. Se non si passa questo parametro la funzione calcola il numero di cifre minimo necessario a rappresentare l'intero numero. Option Explicit 'converte un numero decimale nel corrispondente binario 'esempio di utilizzo: DecToBin(1503) ---> "10111011111" 'esempio di utilizzo: DecToBin(1503, 15) ---> "000010111011111" 'se il parametro size...

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...

Appiattiamo i Range!

Option Explicit Function flatten(ByVal r As Range, Optional delimiter As String = "", _ Optional bycol As Boolean = False) As String 'appiattisce un range riga per riga e restituisce una stringa '(solo celle non vuote) ' si può specificare un delimitatore tra i 'diversi valori e se si specifica "bycol:=True", l'appiattimento è 'effettuato colonna per colonna Dim vect() As Variant, v As Variant, i As Integer, s As String Dim col As Range If bycol Then If r.Rows.Count = 1 Then flatten...