Il Blog di Andrea Perotti



Visualizzare le proprietà di un file di Excel in una cella

Per visualizzare in una cella di Excel alcune proprietà del file quali l'autore o la data e ora dell'ultimo salvataggio seguire la seguente procedura:

Prima di tutto si deve lavorare tramite codice VBA quindi apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:


Function DocProps(prop As String)
application.volatile
On Error GoTo err_value
DocProps = ActiveWorkbook.BuiltinDocumentProperties _
(prop)
Exit Function
err_value:
DocProps = CVErr(xlErrValue)
End Function

Quindi per non dover salvare il file come "Cartella di lavoro con attivazione macro" è possibile creare un componente aggiuntivo contenete il codice che verrà avviato automaticamente all'avvio di Excel, come spiegato qui.

Inserire infine nella cella desiderata la formula che permette di estrarre le proprietà del file secondo questo schema:

Per visualizzare l'Autore:

=DocProps ("last author")

Per visualizzare la data e l'ora dell'ultimo salvataggio:
=DocProps ("last save time") e formattare la cella come data in modo che visualizzi la data e l'ora


Technorati technorati tags: , , , ,
 

Etichette: ,

posted by Andrea Perotti @ 14.54 Permalink , ,




Sommare solo celle visibili in Excel

Se in un foglio di Excel sono presenti righe e colonne nascoste e vogliamo sommare un intervallo che contenga anche le celle nascoste il risultato della somma comprenderà non solo le celle visibili ma anche quelle nascoste.

Vediamo quindi come fare se vogliamo sommare solamente le celle visibili di un intervallo tralasciando quelle nascoste; dovremo introdurre una funzione tramite codice VBA, quindi
apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)

Copiare nel modulo il codice riportato sotto:

Function Sum_Visible_Cells(Cells_To_Sum As Object)

Application.Volatile
For Each cell In Cells_To_Sum
If cell.Rows.Hidden = False Then
If cell.Columns.Hidden = False Then
total = total + cell.Value
End If
End If
Next
Sum_Visible_Cells = total
End Function

Posizionarsi quindi nella cella in cui si vuole venga calcolata la somma e digitare la seguente funzione:

=Sum_Visible_Cells(A1:A10)
Dove A1:A10 è l'intervallo delle celle da sommare; se nell'intervallo sono presenti righe nascoste, queste non verranno prese in considerazione nel calcolo.

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.

Technorati technorati tags: , , , , ,

Etichette: ,

posted by Andrea Perotti @ 15.41 Permalink , ,




Estrarre commenti da celle Excel

Vediamo come estrarre un commento presente in una cella Excel e visualizzarlo come testo all'interno di un'altra cella. Dovendo lavorare tramite codice VBA apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)

Copiare nel modulo il codice riportato sotto:


Function GetCommentText(rCommentCell As Range)

Dim strGotIt As String

On Error Resume Next

strGotIt = WorksheetFunction.Clean _
(rCommentCell.Comment.Text)
GetCommentText = strGotIt

On Error GoTo 0

End Function


Posizionarsi quindi nella cella in cui si vuole venga inserito il commento presente in un'altra cella e digitare la seguente funzione:

=GetCommentText(A1)
Dove A1 è la cella contenete il commento

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.

Technorati technorati tags: , , ,

Etichette: ,

posted by Andrea Perotti @ 11.15 Permalink , ,




Selezionare celle che contengono collegamenti ad altri file di Excel

Se in un foglio di lavoro di Excel vi sono celle che contengono collegamenti a celle presenti in un altro foglio di Excel tramite il comando Menù - Modifica - Collegamenti (in Excel XP/2003) o Bottone Office - Prepara - Modifica collegamenti a file (in Excel 2007) è possibile visualizzare quali sono i file relativi a questi collegamenti.

Però nel caso in cui sia necessario evidenziare solo le celle che in uno specifico foglio di Excel contengono collegamenti a celle presenti in un altro file di Excel potremmo ricorre ad una macro che possiamo inserire come spiegato di seguito

Aprire la finestra di VBA:


In Excel XP o 2003: Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007: Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
Quindi ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:

Public Sub CollView()
Const cWshName = "Foglio1"
Dim wb As Excel.Workbook
Dim wsh As Excel.Worksheet
Dim rng As Excel.Range
Dim vntItem As Variant
Dim strFormula As String
Dim strFilename As String
Dim rngOut As Excel.Range

Set wb = Application.ThisWorkbook
Set wsh = wb.Worksheets.Item(cWshName)
For Each vntItem In wb.LinkSources
Debug.Print vntItem
strFilename = GetFileName(vntItem)
If InStr(strFilename, Chr$(32)) Then
strFilename = "[" & strFilename & "]"
End If
For Each rng In wsh.Cells.SpecialCells(xlCellTypeFormulas)
strFormula = rng.Formula
Debug.Print strFormula
If InStr(strFormula, strFilename) Then
If rngOut Is Nothing Then
Set rngOut = rng
Else
Set rngOut = Application.Union(rngOut, rng)
End If
End If
Next
Next
If Not rngOut Is Nothing Then
rngOut.Select
End If

Set rngOut = Nothing
Set rng = Nothing
Set wsh = Nothing
Set wb = Nothing
End Sub

Private Function GetFileName(ByVal FullName) As String
Dim strSep As String
strSep = Application.PathSeparator
GetFileName = Mid$(FullName, InStrRev(FullName, strSep) + 1)
End Function


A questo punto basterà lanciare la macro CollView perchè risultino selezionate tutte le celle del Foglio1 che presentano collegamenti a celle di altri fogli di Excel. Nel caso in cui si debba lavorare in un altro foglio basterà cambiare il codice precedente mettendo al posto di Foglio1 nella seconda riga il nome del foglio di Excel in cui evidenziare le celle contenenti collegamenti esterni.

Technorati technorati tags: , , ,

Etichette: ,

posted by Andrea Perotti @ 16.37 Permalink , ,




Ordinare le celle di Excel in base al colore

Immaginiamo di voler ordinare un elenco in Excel in base al colore dello sfondo o al colore del testo delle celle; in Excel 2007 questa funzionalità è disponibile di default tramite il pulsante Ordina e Filtra nel gruppo Modifica della scheda Home, selezionando il filtro automatico o l'ordinamento personalizzato.

In Excel 2003 e precedenti l'ordinamento secondo le celle colorate non è presente, si dovrà quindi aggiungere una funzione personalizzata che permetta questa operazione.
Il concetto che seguiremo per ottenere il risultato voluto è quello di inserire in una colonna a fianco delle celle colorate una formula che restituisca il numero corrispondente ad ogni colore, ossia l'indice del colore; si ordinerà quindi la tabella in base alla colonna contenente i numeri corrispondenti ai colori, ottenendo quindi un ordinamento basato sul colore delle celle.

Passiamo quindi alla creazione della funzione che restituisce il numero del colore presente nella cella:

Menù Strumenti - Macro - Visual Basic Editor

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)
Copiare il codice riportato sotto relativo alla funzione desiderata:

Function ColorIndexOfCell(Rng As Range, _
Optional OfText As Boolean, _
Optional DefaultAsIndex As Boolean = True) As Integer
Dim C As Long
If OfText = True Then
C = Rng.Font.ColorIndex
Else
C = Rng.Interior.ColorIndex
End If
If (C < 0) And (DefaultAsIndex = True) Then
If OfText = True Then
C = GetBlack(Rng.Worksheet.Parent)
Else
C = GetWhite(Rng.Worksheet.Parent)
End If
End If
ColorIndexOfCell = C
End Function
Function GetWhite(WB As Workbook) As Long
Dim Ndx As Long
For Ndx = 1 To 56
If WB.Colors(Ndx) = &HFFFFFF Then
GetWhite = Ndx
Exit Function
End If
Next Ndx
GetWhite = 0
End Function
Function GetBlack(WB As Workbook) As Long
Dim Ndx As Long
For Ndx = 1 To 56
If WB.Colors(Ndx) = 0& Then
GetBlack = Ndx
Exit Function
End If
Next Ndx
GetBlack = 0
End Function

Quindi in una nuova colonna inserire la seguente formula:

Nel caso si cosideri il colore dello sfondo della cella
=ColorIndexOfCell(A1;FALSO;VERO)

Nel caso si cosideri il colore del carattere della cella
=ColorIndexOfCell(A1;VERO;VERO)

La cella A1 rappresenta la cella colorata che si desidera ordinare .

A questo punto in questa nuova colonna saranno visualizzati i numeri corrispondenti ai colori presenti nelle celle di riferimento; basterà ordinare la tabella in base a questa colonna per aver ottenuto un ordinamento basato sui colori delle celle!

Se è necessario creare un ordinamento specifico, ossia che non segua la lista numerica crescente o decrescente, si dovrà impostare un elenco numerico personalizzato che segua l'ordine dei colori desiderati.

Per creare un elenco personalizzato:
Menù strumenti -> Opzioni -> Scheda Elenchi

Per definire un ordinamento in base all'elenco personalizzato:
Menù Dati -> Ordina -> Opzioni -> Prima chiave di ordinamento

Per rendere disponibile questa funzione in tutte le cartelle di Excel e non solo in quella in cui l'abbiamo inserita è possibile creare e attivare un componente aggiuntivo secondo queste istruzioni.

Technorati technorati tags: , , , ,

Etichette: ,

posted by Andrea Perotti @ 22.10 Permalink , ,




Excel per me è troppo difficile

Giovane dalle mille speranze, tu che hai poca voglia di fare, tu che dici di essere un DJ, tu che torni all'alba dalle tue serate e per questo ti addormenti durante le lezioni... tu, DJ, non mi puoi dire che per te Excel è troppo difficile!

Dimmi che per te Excel è soporifero ma non che è troppo difficile...

Technorati technorati tags: , , ,

Etichette:

posted by Andrea Perotti @ 15.30 Permalink , ,




Estrarre una stringa di testo da una cella Excel

Vediamo come estrarre velocemente una parte di testo da una cella di Excel senza dover ricorrere alla funzione STRIGA.ESTRAI

Ad esempio immaginiamo di avere in una cella Excel questo testo:

Andrea Perotti - In The Name Of Blog - www.andreaperotti.ch - Lugano

Abbiamo bisogno di estrarre il testo www.andreaperotti.ch dalla cella.

Chiaramente il testo contenuto nella cella deve essere delimitato ad esempio:
Nome, Cognome, Indirizzo (in questo caso i "pezzi" sono delimitati dalla virgola)

Procediamo quindi in questo modo:

Aprire la finestra di VBA:

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:
Function GetStringPart(strInput As String, strDelimiter As String, _
intPart As Integer) As String
Dim varStrings As Variant
varStrings = Split(strInput, strDelimiter, -1, vbBinaryCompare)
On Error Resume Next
GetStringPart = Trim(varStrings(intPart - 1))
On Error GoTo 0
End Function
Chiudere quindi la finestra di Visual Basic e tornare in Excel.

A questo punto immaginiamo che nella cella A5 sia presente questo testo:

Andrea Perotti - In The Name Of Blog - www.andreaperotti.ch - Lugano

Nella cella H5 abbiamo bisogno di visualizzare solo il testo www.andreaperotti.ch

La formula che dovremo inserire nella cella H5 è la seguente:

=GetStringPart(strInput;strDelimiter;intPart)

Dove:

strInput: è la cella che contiene il testo completo

strDelimiter: è ciò che delimita una parte di testo dall'altra (tra virgolette " ")

intPart: è la posizione del testo che vogliamo estrarre

Nel nostro caso quindi la funzione risulterebbe:

=GetStringPart(A5;"-";3)

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.

Technorati technorati tags: , , , , , , ,

Etichette: ,

posted by Andrea Perotti @ 09.38 Permalink , ,




Aggiungere un motivo di riempimento alle barre di un grafico in Excel 2007

In Excel 2003 o precedenti era possibile formattare le barre di un grafico con un motivo di riempimento; cliccando con il pulsante destro sulla barra relativa alla serie da formattare e scegliendo la voce Formato serie dati... si apriva la relativa finestra che nella scheda Motivo presentava il pulsante Riempimento... tramite il quale si accedeva alla finestra Effetti di riempimento.
In questa finestra trovava infine posto la scheda Motivo che permetteva di impostare il motivo di riempimento desiderato da applicare alle barre del grafico.

Se passiamo ora ad Excel 2007 e proviamo a fare la stessa cosa scopriamo che nella finestra che gestisce la formattazione delle barre non è più possibile impostare un motivo di riempimento per le stesse.

Per ottenere lo stesso risultato del passato si può agire in questo modo:
in una cella qualsiasi di Excel 2007 impostare il riempimento desiderato, cliccando con il pulsante destro sulla cella stessa, scegliendo dal menù contestuale la voce Formato celle..., passando, nella finestra che comparirà, alla scheda Riempimento e quindi scegliendo un eventuale sfondo della cella ed un colore e stile per il riempimento.

Quindi chiudere la finestra e copiare, tramite un semplice copia e incolla, la cella che contiene la formattazione appena creata.

Passare al grafico, cliccare con il pulsante destro sulla barra della serie alla quale si vuole applicare il riempimento, scegliere il comando Formato serie dati... e passare alla sezione Riempimento.

Scegliere quindi l'opzione Riempimento a immagine o trama e
alla voce Inserisci da: cliccare sul pulsante Appunti

A questo punto configurare il riempimento scegliendo l'opzione In pila e proporzionata con 1 unità di immagine.

Avremo così ottenuto il riempimento delle barre del grafico tramite un motivo.

Technorati technorati tags: , , , , , ,

Etichette: ,

posted by Andrea Perotti @ 10.42 Permalink , ,




Visualizzare le funzioni contenute nelle celle di Excel

Vediamo come sia possibile visualizzare una funzione presente in una cella di Excel.

La prima possibilità è di ricorrere al menù Strumenti -> Opzioni -> Scheda Visualizza -> Comando Formula (in Excel 2003) oppure Pulsante Office -> Opzioni di Excel -> Impostazioni Avanzate -> Opzioni di visualizzazione per il foglio di lavoro -> Visualizza formule nelle celle anziché i risultati calcolati (in Excel 2007). In questo modo verranno visualizzate tutte le formule del foglio, che sostituiranno quindi il relativo risultato e viceversa.

Se invece vogliamo visualizzare solo le formule inserite in alcune celle a nostra scelta, si dovrà creare una nuova funzione come descritto di seguito:

Aprire la finestra di VBA:

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:


Function FormText(CellRef As Range, Optional RefIndicator As Integer) As String
' RefIndicator: 0 do not show, 1 show reference, 2 show absolute reference
Dim n As Integer, f As Integer

If IsNull(RefIndicator) = True Then
RefIndicator = 0
End If

FormText = CellRef.Formula

If RefIndicator > 0 Then
FormText = "[" & CellRef.Address & "] " & FormText
End If

n = 1
f = InStr(1, FormText, "]")

Do While n <>
If RefIndicator = 1 And Mid(FormText, n, 1) = "$" Then
FormText = Trim(Left(FormText, n - 1) & Mid(FormText, n + 1, 200))
End If
If Mid(FormText, n, 1) = "," Then
FormText = Trim(Left(FormText, n) & " " & Mid(FormText, n + 1, 200))
End If
n = n + 1
Loop
End Function

Chiudere quindi la finestra di Visual Basic e tornare in Excel.

A questo punto ci posizioniamo nella cella in cui vogliamo visualizzare il risultato della funzione ossia la formula contenuta in un'altra cella:

=FormText(Riferimento)

Dove Riferimento è la cella di cui vogliamo visualizzare la formula

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.

Etichette: ,

posted by Andrea Perotti @ 15.02 Permalink , ,




Come estrarre l'URL completo da un elenco di collegamenti ipertestuali presenti nelle celle di Excel

Vediamo come estrarre, tramite una funzione, l'URL completo presente nel testo di un collegamento ipertestuale in una cella di Excel.

Dovendo lavorare tramite codice VBA apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)
Copiare il codice riportato sotto:

Public Function Estrai_Indirizzi(ByVal Collegamento As Excel.Range)

Estrai_Indirizzi = Replace _
(Collegamento.Hyperlinks(1).Address, "mailto:", "")

End Function



Chiudere la finestra e ritornare in Excel.
La funzione che deve essere inserita per estrarre l'URL completo del collegamento ipertestuale è la seguente:


=Estrai_Indirizzi(Riferimento)

In cui:
Riferimento: La cella che contiene il collegamento ipertestuale del quale si vuole estrarre l'URL completo.

Esempio:
=Estrai_Indirizzi(A10)

Tags: , , , ,

Etichette: ,

posted by Andrea Perotti @ 15.00 Permalink , ,




Disponibile la patch per il bug di Excel 2007

Microsoft ha rilasciato la patch che risolve il bug di Excel 2007, scoperto qualche settimana fa, relativo ai calcoli che danno come risultato i valori 65'535 e 65'536.

Qui il download per Excel 2007

Qui il download per Excel Services 2007 64-bit

Qui il download per Excel Services 2007 32-bit

Tags:
, , , ,

Etichette: ,

posted by Andrea Perotti @ 08.38 Permalink , ,




Excel 2007 sbaglia i calcoli? Si!

Sì... sembrerebbe proprio che Excel 2007 non sia così bravo nel fare i calcoli!!!

Infatti se provate a digitare in una cella =850*77.1 il risultato non sarà, come ci si aspetta, 65535 ma bensì 100000.

Provate anche con altri calcoli che dovrebbero dare come risultato 65535 (ad esempio =425*154.2)

Conclusione: finché Microsoft non porrà rimedio a questo bug state attenti a fare calcoli con Excel 2007, oppure usate le versioni precedenti, oppure passate a OpenOffice!

Tags:
, , ,

Etichette: ,

posted by Andrea Perotti @ 09.56 Permalink , ,




Raggruppare per colore i fogli di una cartella di Excel

Se in una cartella di Excel avete applicato un colore alle schede dei fogli, è possibile raggruppare tali schede in base al loro colore.
Chiaramente questa funzionalità è valida solo a partire dalla versione 2002 (XP) di Excel e successive, visto che nelle versioni precedenti non era presente l'opzione per colorare le schede.

Aprire il file che contiene i fogli che devono essere raggruppati per colore.
A questo punto dovendo lavorare tramite codice VBA apriamo la relativa finestra:


In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:


Sub GroupSheetsByColor()
Dim Ndx As Long
Dim Ndx2 As Long
For Ndx = 1 To Worksheets.Count - 1
For Ndx2 = Ndx To Worksheets.Count
If Worksheets(Ndx2).Tab.ColorIndex = _
Worksheets(Ndx).Tab.ColorIndex Then
Worksheets(Ndx2).Move after:=Worksheets(Ndx)
End If
Next Ndx2
Next Ndx
End Sub


Chiudere quindi la finestra di Visual Basic e tornare in Excel.

Passiamo quindi all'elenco delle Macro
In Excel 2003 Strumenti -> Macro -> Macro
In Excel 2007 Scheda Sviluppo -> Pulsante Macro
Eseguire quindi la Macro "GroupSheetsByColor"

I fogli presenti nella cartella di Excel saranno ora raggruppati secondo il loro colore.

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.


Tags:
, , , , , , , ,

Etichette: ,

posted by Andrea Perotti @ 10.00 Permalink , ,




Ordinare fogli di lavoro in una cartella Excel

E' possibile ordinare in maniera automatica i fogli di lavoro presenti in una cartella di Excel, secondo un ordine alfabetico o numerico.
Vediamo come:

Ordinamento alfabetico

Aprire il file che contiene i fogli che devono essere ordinati.
A questo punto dovendo lavorare tramite codice VBA apriamo la relativa finestra:


In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:

Sub SortWorksheets()

Dim N As Integer
Dim M As Integer
Dim FirstWSToSort As Integer
Dim LastWSToSort As Integer
Dim SortDescending As Boolean

SortDescending = False

If ActiveWindow.SelectedSheets.Count = 1 Then
FirstWSToSort = 1
LastWSToSort = Worksheets.Count
Else
With ActiveWindow.SelectedSheets
For N = 2 To .Count
If .Item(N - 1).Index <> .Item(N).Index - 1 Then
MsgBox "You cannot sort non-adjacent sheets"
Exit Sub
End If
Next N
FirstWSToSort = .Item(1).Index
LastWSToSort = .Item(.Count).Index
End With
End If

For M = FirstWSToSort To LastWSToSort
For N = M To LastWSToSort
If SortDescending = True Then
If UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then
Worksheets(N).Move Before:=Worksheets(M)
End If
Else
If UCase(Worksheets(N).Name) < UCase(Worksheets(M).Name) Then
Worksheets(N).Move Before:=Worksheets(M)
End If
End If
Next N
Next M

End Sub


Chiudere quindi la finestra di Visual Basic e tornare in Excel.

Passiamo quindi all'elenco delle Macro
In Excel 2003 Strumenti -> Macro -> Macro
In Excel 2007 Scheda Sviluppo -> Pulsante Macro
Eseguire quindi la Macro "SortWorksheets"

I fogli presenti nella cartella di Excel saranno ora elencati secondo l'ordinamento alfabetico.

L'ordinamento verrà effettuato in senso crescente se invece è necessario ordinare in senso decrescete allora si dovrà impostare a True il valore SortDescending.

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.



Ordinamento numerico


Aprire il file che contiene i fogli che devono essere ordinati.
A questo punto dovendo lavorare tramite codice VBA apriamo la relativa finestra:


In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo) e copiare il codice riportato sotto:

Sub SortWorksheetsNumeric()

Dim N As Integer
Dim M As Integer
Dim FirstWSToSort As Integer
Dim LastWSToSort As Integer
Dim SortDescending As Boolean

SortDescending = False

If ActiveWindow.SelectedSheets.Count = 1 Then
FirstWSToSort = 1
LastWSToSort = Worksheets.Count
Else
With ActiveWindow.SelectedSheets
For N = 2 To .Count
If .Item(N - 1).Index <> .Item(N).Index - 1 Then
MsgBox "You cannot sort non-adjacent sheets"
Exit Sub
End If
Next N
FirstWSToSort = .Item(1).Index
LastWSToSort = .Item(.Count).Index
End With
End If

For M = FirstWSToSort To LastWSToSort
For N = M To LastWSToSort
If SortDescending = True Then
If CInt(Mid(Worksheets(N).Name, 6)) > _
CInt(Mid(Worksheets(M).Name, 6)) Then
Worksheets(N).Move Before:=Worksheets(M)
End If
Else
If CInt(Mid(Worksheets(N).Name, 6)) < _
CInt(Mid(Worksheets(M).Name, 6)) Then
Worksheets(N).Move Before:=Worksheets(M)
End If
End If
Next N
Next M

End Sub


Chiudere quindi la finestra di Visual Basic e tornare in Excel.

Passiamo quindi all'elenco delle Macro
In Excel 2003 Strumenti -> Macro -> Macro
In Excel 2007 Scheda Sviluppo -> Pulsante Macro
Eseguire quindi la Macro "SortWorksheetsNumeric"


I fogli presenti nella cartella di Excel saranno ora elencati secondo l'ordinamento numerico.

L'ordinamento verrà effettuato in senso crescente se invece è necessario ordinare in senso decrescete allora si dovrà impostare a True il valore SortDescending.

Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all'avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.

Tags: , , , , , ,

Etichette: ,

posted by Andrea Perotti @ 17.06 Permalink , ,




Sommare le celle in Excel in base alla formattazione

Immaginiamo di avere un intervallo di celle in Excel, B5:B20, e di voler sommare le celle di questo intervallo in base alla loro formattazione; ad esempio abbiamo bisogno di sommare tutte le celle che hanno il carattere o lo sfondo rosso e il testo in grassetto.

Prima di tutto si deve lavorare tramite codice VBA quindi apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)
Copiare il codice riportato sotto:

Function FormatSum(rCriteriaCell As Range, rRange As Range)
Dim rcell As Range
Dim bMatch As Boolean
Dim vResult

For Each rcell In rRange
With rcell
bMatch = (rCriteriaCell.Interior.ColorIndex = _
.Interior.ColorIndex And _
rCriteriaCell.Font.ColorIndex = _
.Font.ColorIndex And _
rCriteriaCell.Font.Bold = _
.Font.Bold And _
rCriteriaCell.Font.Italic = _
.Font.Italic And _
rCriteriaCell.Font.Underline = .Font.Underline)
End With
If bMatch = True Then
vResult = WorksheetFunction.Sum(rcell) + vResult
End If
Next rcell

FormatSum = vResult
End Function

Chiudere la finestra e ritornare in Excel. La funzione che deve essere inserita per sommare le celle secondo il loro formato è la seguente:

=FormatSum(Formato;Intervallo)

In cui:
Formato: La cella contenente il formato di riferimento
Intervallo: Le effettive celle da sommare

Esempio:
=FormatSum($B$5;B5:B20)
Somma, nell'intervallo B5:B20, tutte le celle che hanno il formato presente nella cella B20 (esempio testo o sfrondo rosso in grassetto).

Nel nostro esempio la cella del formato può essere qualsiasi cella, contenente qualsiasi formato.

P.S.
Se nella cella di riferimento viene modificato il formato, l'aggiornamento del risultato della somma non è automatico; il cambiamento di un dato nelle celle dell'intervallo da sommare farà si che il risultato venga ricalcolato.

Invece il metodo più veloce per far si che la somma si aggiorni automaticamente quando cambiate il formato delle celle nell'intervallo, è quello di applicare il formato nelle celle che dovranno essere aggiunte alla somma copiandolo da una cella già formattata utilizzando il pulsante Copia Formato presente sulla barra degli strumenti di Formattazione.

Etichette: , ,

posted by Andrea Perotti @ 00.10 Permalink , ,




Evidenziare dati ripetuti in Excel

Come fare per evidenziare in una colonna o in una riga di Excel i dati ripetuti?

Immaginiamo di avere lungo una colonna o una riga una serie di numeri casuali e di voler far si che tutte le celle che contengono valori che appaiono più di una volta vengano colorate in rosso.
Dovremo ricorrere alla formattazione condizionale in cui la condizione è la formula CONTA.SE


La situazione di partenza è la seguente:



Ciò che vogliamo ottenere è che tutti i numeri ripetuti vengano evidenziati con un colore, ad esempio rosso.

In Excel XP/2003
Posizionarsi sulla cella B3 e attivare la finestra della Formattazione Condizionale tramite il menù Formato -> Formattazione Condizionale, scegliendo
la formula è come condizione e come parametro la funzione =CONTA.SE(B:B;B3)>1
Assegnare quindi tramite il pulsante Formato... la formattazione desiderata per le celle ripetute.



Cliccare quindi su ok; se il numero contenuto all'interno della cella B3 è presente altre volte nella colonna B, la cella stessa prenderà la formattazione che abbiamo assegnato nella finestra della Formattazione Condizionale.
A questo punto copiare la cella B3 e tramite Incolla Speciale incollare il formato in tutte le celle dell'elenco.

In Excel 2007
Posizionarsi sulla cella B3 e attivare la finestra della Formattazione Condizionale tramite la Scheda Home -> Gruppo Stili -> Pulsante Formattazione Condizionale -> Comando Nuova regola
Selezionare la regola Utilizza una formula per determinare le celle da formattare e inserire
la funzione =CONTA.SE(B:B;B3)>1
Assegnare quindi tramite il pulsante Formato... la formattazione desiderata per le celle ripetute.



Cliccare quindi su ok; se il numero contenuto all'interno della cella B3 è presente altre volte nella colonna B, la cella stessa prenderà la formattazione che abbiamo assegnato nella finestra della Formattazione Condizionale.
A questo punto copiare la cella B3 e tramite Incolla Speciale incollare il formato in tutte le celle dell'elenco.

Il risultato finale è il seguente:



N.B.: nella formula =CONTA.SE(B:B;B3)>1 l'intervallo B:B rappresenta tutta la colonna ma può essere sostituito con la selezione delle sole celle da analizzare o con il nome del gruppo di celle.
Lo stesso discorso vale anche se i dati da prendere in considerazione non sono lungo la colonna ma lungo la riga.

N.B.2: In Excel 2007 in realtà ciò che si è detto sopra è automatico in quanto la Formattazione Automatica prevede già la possibilità di evidenziare i valori duplicati.
Basterà selezionare l'intervallo che contiene i dati duplicati quindi scegliere la
Scheda Home -> Gruppo Stili -> Pulsante Formattazione Condizionale -> Regole evidenziazione celle -> Valori duplicati



In questa finestra di dialogo basterà scegliere il tipo di formattazione che si vuole applicare alle celle che contengono i valori duplicati.

Etichette: ,

posted by Andrea Perotti @ 08.25 Permalink , ,




Evidenziare celle non bloccate in Excel

E' possibile evidenziare velocemente tutte le celle sbloccate in Excel, ovvero tutte le celle che nella finestra di dialogo Formato Celle -> Protezione non presentano selezionato il flag bloccato?
Sì e questa macro ci viene in aiuto, permettendo di evidenziare in giallo tutte le celle che non hanno il flag bloccato impostato.

Prima di tutto dobbiamo creare la macro:

In Excel XP/2003
Menù Strumenti -> Macro -> Macro...

In Excel 2007
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Macro

Nella finestra delle Macro scriviamo il nome della macro e quindi clicchiamo su Crea; si aprirà la finestra di Microsoft Visual Basic nella quale dovremo scrivere il testo seguente:

Sub Evidenzianonbloccate()
'
' Macro per evidenziare le celle non bloccate
' Macro registrata il 19/07/2007 da Andrea Perotti
'
'
Dim c As Range
For Each c In Selection
If c.Locked = False Then
c.Interior.ColorIndex = 6
End If
Next
End Sub

A questo punto è possibile chiudere la finestra; abbiamo creato la Macro.

Ritorniamo al foglio di lavoro, selezioniamo un gruppo di celle e quindi, tramite la finestra delle Macro, lanciamo la Macro appena creata.
Le celle con il flag bloccato non impostato verranno evidenziate in giallo.

Tags:
, , , , , ,

Etichette: ,

posted by Andrea Perotti @ 16.51 Permalink , ,




Creare un componente aggiuntivo (Add-Ins) per Excel

Nel post precedente abbiamo visto come creare due funzioni in Excel che permettano di contare o sommare celle in base al loro colore.
Vediamo ora come salvare queste funzioni come componente aggiuntivo e inserirle quindi in qualsiasi Excel in modo tale che vengano caricate all'avvio.


Per creare un componente aggiuntivo

Quando abbiamo inserito,
nel modulo della finestra di Visual Basic, il codice relativo alla funzione che ci interessa, salviamo come componente aggiuntivo tramite il menù File - Salva
Nella finestra di salvataggio scegliamo, in basso, un nome da assegnare al nostro componente e come Tipo File:
In Excel XP/2003 "Componente aggiuntivo xla"
In Excel 2007 "Componente aggintivo xlam"
A questo punto possiamo chiudere Excel


Per rendere disponibile in Excel il componente aggiuntivo

In Excel XP / 2003
Menù Strumenti - Componenti aggiuntivi
Caricare il componente aggiuntivo tramite il pulsante Sfoglia
Il nome del componente aggiuntivo sarà ora disponibile in Excel

In Excel 2007
Pulsante di Office
In basso a destra Opzioni di Excel
Nel menù a sinistra scegliere Componenti Aggiuntivi quindi per gestire i componenti pulsante Vai
Caricare il componente aggiuntivo tramite il pulsante Sfoglia
Il nome del componente aggiuntivo sarà ora disponibile in Excel

Per disattivare un componente aggiuntivo in modo tale che non venga più caricato all'avvio, togliere il segno di spunta vicino alla voce da disattivare.

Tags:
, , , ,

Etichette: ,

posted by Andrea Perotti @ 08.41 Permalink , ,




Sommare o contare celle colorate in Excel

Prendiamo un intervallo di celle in Excel e immaginiamo di voler contare o ottenere la somma solo di quelle celle che presentano o nello sfondo o nel carattere, un particolare colore.

Con la procedura seguente vediamo come sia possibile.

Prima di tutto si deve lavorare tramite codice VBA quindi apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)
Copiare il codice riportato sotto relativo alla funzione desiderata:

Per contare le celle di un intervallo in base al colore dello sfondo o del carattere

Function CountByColor(InRange As Range, _
WhatColorIndex As Integer, _
Optional OfText As Boolean = False) As Long
'
' This function return the number of cells in InRange with
' a background color, or if OfText is True a font color,
' equal to WhatColorIndex.
'
Dim Rng As Range
Application.Volatile True

For Each Rng In InRange.Cells
If OfText = True Then
CountByColor = CountByColor - _
(Rng.Font.ColorIndex = WhatColorIndex)
Else
CountByColor = CountByColor - _
(Rng.Interior.ColorIndex = WhatColorIndex)
End If
Next Rng

End Function


Chiudere la finestra e ritornare in Excel. La funzione che deve essere inserita per contare le celle secondo un colore è la seguente:

=COUNTBYCOLOR(INTERVALLO,COLORE,TIPO COLORE)

In cui:
INTERVALLO: L'intervallo delle celle che verranno analizzate
COLORE: Il numero del colore relativo alle effettive celle da contare
TIPO COLORE: VERO per indicare che il colore è riferito al testo - FALSO per indicare che il colore è riferito allo sfondo

Esempio:
=COUNTBYCOLOR(A10:B30,3,FALSO)
Conta, nell'intervallo A10:B30, le celle che hanno lo sfondo rosso

Il numero da inserire nella formula, relativo al colore da analizzare, lo si può dedurre dalla tabella in fondo (numeri da 1 a 56)


Per sommare le celle di un intervallo in base al colore dello sfondo o del carattere

Function SumByColor(InRange As Range, WhatColorIndex As Integer, _
Optional OfText As Boolean = False) As Double
'
' This function return the SUM of the values of cells in
' InRange with a background color, or if OfText is True a
' font color, equal to WhatColorIndex.
'
Dim Rng As Range
Dim OK As Boolean

Application.Volatile True
For Each Rng In InRange.Cells
If OfText = True Then
OK = (Rng.Font.ColorIndex = WhatColorIndex)
Else
OK = (Rng.Interior.ColorIndex = WhatColorIndex)
End If
If OK And IsNumeric(Rng.Value) Then
SumByColor = SumByColor + Rng.Value
End If
Next Rng

End Function


Chiudere la finestra e ritornare in Excel. La funzione che deve essere inserita per sommare le celle secondo un colore è la seguente:


=SUMBYCOLOR(INTERVALLO,COLORE,TIPO COLORE)

In cui:
INTERVALLO: L'intervallo delle celle che verranno analizzate
COLORE: Il numero del colore relativo alle effettive celle da sommare
TIPO COLORE: VERO per indicare che il colore è riferito al testo - FALSO per indicare che il colore è riferito allo sfondo

Esempio:
=SUMBYCOLOR(A10:B30,3,FALSO)
Somma, nell'intervallo A10:B30, le celle che hanno lo sfondo rosso

Il numero da inserire nella formula, relativo al colore da analizzare, lo si può dedurre dalla tabella in fondo (numeri da 1 a 56)

Da tener presente, per entrambi i casi, che se il colore nelle celle viene cambiato il calcolo non si aggiorna automaticamente ma sarà necessario aggiornarlo manualmente ad esempio tramite il tasto F9.

P.S.
Nelle funzioni, per delimitare gli argomenti, andrà utilizzato il separatore appropriato a seconda della lingua di Excel, ossia la virgola nel caso che Excel sia in Inglese o il punto e virgola nel caso in cui Excel sia in Italiano.

Tabella Colori

Black[Color 1] #000000#000000 000 [Black]
White[Color 2] #FFFFFF#FFFFFF 255255255 [White]
Red [Color 3] #FF0000#FF0000 25500 [Red]
Green [Color 4] #00FF00#00FF00 02550 [Green]
Blue [Color 5] #0000FF#0000FF 00255 [Blue]
Yellow [Color 6] #FFFF00#FFFF00 2552550 [Yellow]
Magenta [Color 7] #FF00FF#FF00FF 2550255 [Magenta]
Cyan [Color 8] #00FFFF#00FFFF 0255255 [Cyan]
[Color 9] [Color 9] #800000#800000 12800 [Color 9]
[Color 10] [Color 10] #008000#008000 01280 [Color 10]
[Color 11] [Color 11] #000080#000080 00128 [Color 11]
[Color 12] [Color 12] #808000#808000 1281280 [Color 12]
[Color 13] [Color 13] #800080#800080 1280128 [Color 13]
[Color 14] [Color 14] #008080#008080 0128128 [Color 14]
[Color 15] [Color 15] #C0C0C0#C0C0C0 192192192 [Color 15]
[Color 16] [Color 16] #808080#808080 128128128 [Color 16]
[Color 17] [Color 17] #9999FF#9999FF 153153255 [Color 17]
[Color 18] [Color 18] #993366#993366 15351102 [Color 18]
[Color 19] [Color 19] #FFFFCC#FFFFCC 255255204 [Color 19]
[Color 20] [Color 20] #CCFFFF#CCFFFF 204255255 [Color 20]
[Color 21] [Color 21] #660066#660066 1020102 [Color 21]
[Color 22] [Color 22] #FF8080#FF8080 255128128 [Color 22]
[Color 23] [Color 23] #0066CC#0066CC 0102204 [Color 23]
[Color 24] [Color 24] #CCCCFF#CCCCFF 204204255 [Color 24]
[Color 25] [Color 25] #000080#000080 00128 [Color 25]
[Color 26] [Color 26] #FF00FF#FF00FF 2550255 [Color 26]
[Color 27] [Color 27] #FFFF00#FFFF00 2552550 [Color 27]
[Color 28] [Color 28] #00FFFF#00FFFF 0255255 [Color 28]
[Color 29] [Color 29] #800080#800080 1280128 [Color 29]
[Color 30] [Color 30] #800000#800000 12800 [Color 30]
[Color 31] [Color 31] #008080#008080 0128128 [Color 31]
[Color 32] [Color 32] #0000FF#0000FF 00255 [Color 32]
[Color 33] [Color 33] #00CCFF#00CCFF 0204255 [Color 33]
[Color 34] [Color 34] #CCFFFF#CCFFFF 204255255 [Color 34]
[Color 35] [Color 35] #CCFFCC#CCFFCC 204255204 [Color 35]
[Color 36] [Color 36] #FFFF99#FFFF99 255255153 [Color 36]
[Color 37] [Color 37] #99CCFF#99CCFF 153204255 [Color 37]
[Color 38] [Color 38] #FF99CC#FF99CC 255153204 [Color 38]
[Color 39] [Color 39] #CC99FF#CC99FF 204153255 [Color 39]
[Color 40] [Color 40] #FFCC99#FFCC99 255204153 [Color 40]
[Color 41] [Color 41] #3366FF#3366FF 51102255 [Color 41]
[Color 42] [Color 42] #33CCCC#33CCCC 51204204 [Color 42]
[Color 43] [Color 43] #99CC00#99CC00 1532040 [Color 43]
[Color 44] [Color 44] #FFCC00#FFCC00 2552040 [Color 44]
[Color 45] [Color 45] #FF9900#FF9900 2551530 [Color 45]
[Color 46] [Color 46] #FF6600#FF6600 2551020 [Color 46]
[Color 47] [Color 47] #666699#666699 102102153 [Color 47]
[Color 48] [Color 48] #969696#969696 150150150 [Color 48]
[Color 49] [Color 49] #003366#003366 051102 [Color 49]
[Color 50] [Color 50] #339966#339966 51153102 [Color 50]
[Color 51] [Color 51] #003300#003300 0510 [Color 51]
[Color 52] [Color 52] #333300#333300 51510 [Color 52]
[Color 53] [Color 53] #993300#993300 153510 [Color 53]
[Color 54] [Color 54] #993366#993366 15351102 [Color 54]
[Color 55] [Color 55] #333399#333399 5151153 [Color 55]
[Color 56] [Color 56] #333333#333333 515151 [Color 56]

Tags: , , , , ,

Etichette: ,

posted by Andrea Perotti @ 19.26 Permalink , ,