Che ci vuoi fare, io sono affezionato al blogroll e quindi l’ho rimesso anche qui. Alcuni link non funzionano più, ma non ho il cuore di toglierli. Sono troppo tenero.
I drammi in Excel: Reverse Engineering di una tabella riassuntiva
La settimana scorsa, durante un corso di Excel per una azienda del Luganese, mi hanno raccontato una brutta storia. Uno dei lavori ricorrenti più lunghi, ingrati e noiosi affidati in azienda ad alcuni allievi era questo: data una tabella di ordini riempita dal cliente e simile a questa:

ottenere un elenco di dati simile a questo:

La prima domanda, ovviamente, è stata “Perché? Ma soprattutto, perché?” La dura risposta: “Perché il cliente vuole così, e il cliente ha sempre ragione”. Questo restringe molto il campo delle possibili soluzioni, ma almeno si può fare una bella macro. Siccome non c’è stato tempo durante il corso, mi ci sono divertito oggi e ho messo insieme una soluzione “quick & dirty” che farà storcere il naso a tutti i programmatori (io non lo sono), ma che funziona per qualsiasi tabella di qualsiasi dimensione, purché si parta con una cella attiva dentro la tabella da svolgere. Il file di esempio (47KB formato Excel 2003) è dalla tabella alla lista, e il codice è questo:
Sub Tabella_Elenco()
‘
‘ Prende una tabella da un foglio
‘ e la trasforma in un elenco in un altro foglio
‘
On Error Resume Next
Application.ScreenUpdating = FalseDim MioFoglio As Worksheet
Dim MiaTabella As Range
Dim Etichette As Range
Dim colcnt As Integer
Dim rowcnt As Integer‘ Definisco le variabili e il foglio di destinazione
‘ con le etichetteSet MioFoglio = ActiveSheet
Set MiaTabella = ActiveSheet.Cells(1, 1).CurrentRegion
colcnt = MiaTabella.Columns.Count
rowcnt = MiaTabella.Rows.Count
Set Etichette = MiaTabella.Range(Cells(1, 2), Cells(1, colcnt))
N = 0Sheets.Add.Name = “Destinazione”
With ActiveWorkbook.Names
.Add Name:=”Prodotto”, RefersTo:=”=Destinazione!A1″
.Add Name:=”Taglia”, RefersTo:=”=Destinazione!B1″
.Add Name:=”Quantità”, RefersTo:=”=Destinazione!C1″
End With
Range(“Prodotto”).FormulaR1C1 = “Prodotto”
Range(“Taglia”).FormulaR1C1 = “Taglia”
Range(“Quantità”).FormulaR1C1 = “Quantità”‘ Copio e incollo in modo diverso per la prima riga
While N < rowcnt – 1
Application.CutCopyMode = False
MiaTabella.Cells(N + 2, 1).Copy
Application.Goto Reference:=”Prodotto”If N = 0 Then
Range(“Prodotto”).Offset(1, 0).Range(“A1”).SelectElse
Range(“Prodotto”).End(xlDown).Offset(1, 0).Range(“A1″).Select
End IfSelection.Resize(Selection.Rows.Count + colcnt – 2, Selection.Columns.Count).Select
ActiveSheet.PasteApplication.CutCopyMode = False
Etichette.Copy
Application.Goto Reference:=”Taglia”If N = 0 Then
Range(“Taglia”).Offset(1, 0).Range(“A1”).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
Range(“Taglia”).End(xlDown).Select
ActiveCell.Offset(1, 0).Range(“A1″).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End IfApplication.CutCopyMode = False
MioFoglio.Select
MiaTabella.Range(Cells(N + 2, 2), Cells(N + 2, colcnt)).Copy
Application.Goto Reference:=”Quantità”If N = 0 Then
Range(“Quantità”).Offset(1, 0).Range(“A1”).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
Range(“Quantità”).End(xlDown).Select
ActiveCell.Offset(1, 0).Range(“A1”).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End IfN = N + 1
Wend
Application.CutCopyMode = False
Range(“A1”).Select
Application.ScreenUpdating = TrueEnd Sub
Buon divertimento. Molto volentieri accetto critiche, pomodori e suggerimenti.
Bloggers Anonimi
Ciao, mi chiamo Gaspar e ho un blog da due giorni.
Prima avevo una roba da bambini, un giocattolino senza importanza che voglio solo dimenticare in fretta. Questo è un vero Blog da grandi, con il database, i temi, i plugin, i widget, i tools, le categories e i tags. Tutto è altamente customizzabile e personalizzabile. Sono felice.
Ci sono i forums pieni di astutissimi tips, tricks e workarounds. Per esempio, ho chiesto: “come faccio a mettere la mia foto nel titolo?“. Mi hanno subito risposto: “Niente di più facile, qualsiasi idiota ci riuscirebbe. Basta che nel tuo Child-Theme, fai un CSS image replacement sull’anchor del #blog-title div. Ovviamente, aggiungi del paddling a sinistra e lo droppi nel background“.
E io stupido che non ci avevo pensato subito.
Blog chiuso e nuovo indirizzo
Il vecchio blog è chiuso e non verrà più aggiornato. Il nuovo indirizzo è www.gaspartorriero.it. Il nuovo indirizzo del feed è https://gaspartorriero.it/feed.
Dopo quasi dieci anni di onorato servizio mi spiace moltissimo abbandonarlo, ma è una scelta obbligata: dal 1° maggio blogger.com non supporta più l’upload via ftp.
Eccomi dunque dall’altra parte. Qui tutto è ancora provvisorio, abbi pazienza e per favore aggiorna i tuoi link.
Capo di Coda Cavallo
Google Maps è passato da Capo di Coda Cavallo. A me invece tocca aspettare fino a luglio.
