Pillole di Excel

Piccoli contributi, idee, suggerimenti provenienti dal Forum ExcelVBA

Combinazioni... ritrovate

Avete presente la suspance con cui vi lasciavo in questo post? Bene, ecco la continuazione... ho implementato (e soprattutto collaudato) la possibilità di sfruttare i quattro operatori semplici di addizione, sottrazione, moltiplicazione e divisione per generare i modi possibili in cui, combinando due o più elementi della tabella iniziale di numeri, si può raggiungere il risultato richiesto. Ne è venuto fuori un semplice progetto Excel, di cui descrivo lo scenario per poterlo ricostruire (non ho un server su cui depositare i file di esempio purtroppo): - tabella numeri iniziale (con intestazione): colonna A; - numero obiettivo: cella D2; - cella (D4) con...

Che combinazione!

Questa idea viene da una discussione sul Forum di Excel VBA. Si tratta di un'idea carina. basata su un vecchio gioco dove viene fornita una tabella di numeri e occorre raggiungere una certa somma operando delle addizioni su due o più numeri della tabella iniziale. Ad esempio data la tabella di numeri 2, 5, 7, 4, quali sono gli addendi che restituiscono il numero 11? La risposta è: 7 + 4, ma anche 2 + 5 + 4. Per vedere all'opera il semplice codice proposto basta seguire poche istruzioni. Il codice si basa su una serie di combinazioni cui viene applicato l'operatore di...

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

Full Pillole di Excel Archive