Pillole di Excel

Piccoli contributi, idee, suggerimenti provenienti dal Forum ExcelVBA

Giovani e vecchi manager

Una semplice versione di un "ini manager"... Finalmente ne ho avuto bisogno pure io! Senza ricorrere a classi o artifici strani di manipolazione stringhe, prendo l'idea di Scott Lylerly e la faccio mia con qualche piccolo aggiustamento :) L'utilizzo è davvero semplice: ini_manager ("r|w", "section", "key", <"value">) dove "r" sta per read e "w" sta per write, quindi con una sola chiamata decido quale azione intraprendere (se in lettura o in scrittura). Il codice poi effettua a un certo punto una chiamata ricorsiva a se stesso che ho voluto inserire (naturalmente si può modificare questo punto) per sollevare errore se in modalità scrittura la...

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

Rollino i tamburi

Un trucco affascinante, in Excel. Naturalmente non è mio :) ma lo trovo così intrigante che ho deciso di riportarlo qui soprattutto per mia futura memoria. Si tratta di intercettare l'effetto "roll over" su una cella (che per esempio HTML mette a disposizione). Basta passare il mouse su una cella bersaglio e si scatena l'evento "mouse over". Si badi bene: nessun evento SelectionChange, nessun evento Change; il semplice passaggio del mouse sulla cella desiderata e voilà, il trucco appare. Tutto è nato da una ricerca su come modificare il contenuto di una cella da parte di una UDF... impossibile da realizzarsi normalmente ma ecco...

Strappiamo via tutto!

Una semplice proposta per liberare un testo dai caratteri indesiderati. Anche questa funzione deriva da una breve discussione sul forum di Excel VBA. Lo scopo è avere una funzione che riceve una stringa di testo, una lista di caratteri da sostituire e un carattere di sostituzione. Il nome della funzione è, semplicemente, strip e si può utilizzare anche direttamente all'interno del foglio di Excel come formula (se la inseriamo in un Modulo). Option Explicit Function strip(s As String, replace_list As String, replace_with As String) _ As String Dim re As Object, matches As Object Set re = CreateObject("vbscript.regexp") With...

Le parole in grassetto

Un'altra proposta dopo una breve discussione sul forum di Excel VBA. La richiesta era di poter estrarre il testo in grassetto da una selezione di celle. Al richiedente interessavano le parole intere, il che ha reso più semplice la funzione che segue. Ecco il codice della mia soluzione, get_bold_words. Le si passa un range di celle e restituisce una stringa con le sole parole in grassetto che compaiono nella selezione, separate da spazio. Function get_bold_words(cella As Range) As String Dim i As Integer, s As String For Each v In Split(cella, " ") s...

Numeri romani II - la vendetta del gladiatore

Dopo essere transitato sul forum di Excel VBA, e aver ricevuto complimenti immeritati, il codice che avevo illustrato qui ("Numeri romani") ha rivelato la sua estrema complicatezza ed inadeguatezza. Perciò mi sono messo al lavoro e ne ho prodotto una versione, finalmente, più decente e comprensibile :) Ecco qui il codice della nuova funzione =DEC_TO_ROMAN(). Option Explicit Function dec_to_roman(n As String) As String Dim numero As Long, s As String Dim i As Integer, j As Integer If n < 1 Or n > 3999 Then dec_to_roman = "#VALORE!" ...

Numeri romani

Da una proposta che ho fatto sul forum Excel VBA (http://excelvba.altervista.org/index.php) propongo qui una piccola funzione che trasforma un numero in base dieci in un numero costruito secondo la notazione romana. In Excel è disponibile la funzione =ROMANO() che fa la stessa cosa e anche di più ;) io mi sono attenuto alla regola classica. Buon divertimento e se avete suggerimenti... fateli :) Option Explicit 'converte un numero in base 10 in un numero romano 'vista la particolarità di questo sistema di numerazione, 'la funzione accetta solo numeri interi positivi tra 1 e 3999. 'es. dec_to_roman(891) --> "DCCCXCI" Function dec_to_roman(n As Integer) As String Dim numero As Long,...

Full Pillole di Excel Archive