JavascriptProva

martedì 18 marzo 2014

Disunire celle in Excel mettendo in ognuna il testo precedentemente appartenuto all'unione.

Separare una cella "unita" in Excel e mettere in tutte le celle ex facenti parte dell'unione il testo contenuto originariamente nell'unione.

Scrivo nella prima cella della colonna A una parola qualunque, "ciao".
Unisco le celle fino a A15.

...e ci lavoro...

L'unica soluzione che mi è venuta in mente è questa:
Sub azione()
Dim testo As String
Dim numero As Integer
numero = Range("A1").MergeArea.Count
For n = 1 To numero
If Range("A1").MergeArea(n).Formula <> "" Then testo = Range("A1").MergeArea(n).Formula
Next n
Range("A1").UnMerge
For n = 1 To numero
Range("A" & n).Formula = testo
Next n
End Sub
Questa è necessaria per individuare l'unica cella in cui c'è un testo:
For n = 1 To numero
If Range("A1").MergeArea(n).Formula <> "" Then testo = Range("A1").MergeArea(n).Formula
Next n


Memorizzando prima il numero delle celle facenti parte dell'unione:
numero = Range("A1").MergeArea.Count
si usa successivamente quando le celle sono state disunite, per metterci il testo precedentemente rilevato
For n = 1 To numero
Range("A" & n).Formula = testo
Next n


Può essere che esista qualche funzione di VBA che permetta una soluzione più breve, ma al momento non sono riuscito a individuarne nessuna.

martedì 11 marzo 2014

Questi grafici mi stanno facendo dannare...
    Charts.Add
    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets("Foglio7").range("C1,C3"), PlotBy _
        :=xlColumns
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).Values = "=(Foglio7!R1C8,Foglio7!R3C8)"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio7"
Adesso tolgo il riferimento al Foglio.
    Charts.Add
    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets("Foglio7").range("C1,C3"), PlotBy _
        :=xlColumns
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).Values = "=(R1C8,R3C8)"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio7"
E vediamo se va...

No, non va.

Ecco, sono arrivato alla conclusione che le celle per impostare SeriesCollection.Values devono essere espresse in questo modo:
"=(Foglio7!R1C8,Foglio7!R3C8)"
Questo quando sono discontinue.
Quando sono continue, invece, la macro registrata le esprime in questo modo:
"=Foglio7!R1C8:R4C8"
Ma credo che anche esprimendole con la notazione usata automaticamente per le selezioni di celle discontinue non cambi niente.
Proviamo.
ActiveChart.SeriesCollection(2).Values = "=(Foglio7!R1C8,Foglio7!R2C8,Foglio7!R3C8,Foglio7!R4C8,Foglio7!R5C8)"
Vediamo se funziona...

Sì... dopo qualche improprietà commessa, devo dire di sì!

domenica 9 marzo 2014

Studio dei grafici in Excel VBA

Analizziamo tutti i passaggi della creazione di un grafico in Excel.

La prima riga è questa:
Charts.Add
Che dovrebbe significare "Aggiungi un elemento all'insieme dei grafici.
E sta bene.

La seconda riga è questa:
ActiveChart.ChartType = xlColumnStacked
E sta a significare il tipo di grafico.

Ed ecco una cosa più succosa:
ActiveChart.SetSourceData Source:=Sheets("Foglio7").range("C2:C16"), PlotBy _
        :=xlColumns
Sarebbe la sorgente dei dati e il tipo di organizzazione di questi dati, ossia ciò che si sceglie con questo form:



Ora provo a fare un grafico fino a qua e vediamo cosa viene fuori.
    Charts.Add
    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets("Foglio7").range("C1:C3"), PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio7"
Ecco:



Ecco, un grafico in cui in ordinate ci sono i valori espressi nel range C1:C3 del foglio di lavoro, mentre in ascisse ci sono semplicemente dei numeri.
Ora rifaccio un grafico usando la scheda "Serie".
Ecco come mi si presenta la scheda all'inizio:



e io proseguo dando i valori:



Ecco il codice:
    Charts.Add
    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets("Foglio7").range("C1:C3"), PlotBy _
        :=xlColumns
    ActiveChart.SeriesCollection(1).XValues = "=Foglio7!R1C1:R3C1"
    ActiveChart.SeriesCollection(1).Name = "=Foglio7!R1C2"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio7"
Quindi
ActiveChart.SetSourceData Source:=Sheets("Foglio7").range("C1:C3"), PlotBy _
        :=xlColumns
esprime i valori espressi sull'asse delle ordinate;
 ActiveChart.SeriesCollection(1).XValues = "=Foglio7!R1C1:R3C1"
esprime i nomi espressi sull'asse delle ascisse;
 ActiveChart.SeriesCollection(1).Name = "=Foglio7!R1C2"
esprime il nome della serie.

Così, se io voglio sapere quanti ROSSI sono stati fatti dal 118 di Roccasecca, Pizzobello e Casaminchiola, ho come SetSourceData i numeri dei rossi fatti dalle tre sedi, come XValues i nomi dei tre paesi e come Name il nome ROSSI, appunto.
Isoliamo le prestazioni svolte dalle postazioni medicalizzate, sempre partendo dal foglio bianco.

Ah, dobbiamo fare un pulsante che cancelli tutto.

Fatto.
Sub DeleteAll()
    Cells.Select
    Selection.Delete Shift:=xlUp
    Sheets("Foglio5").Select
End Sub
Facilissimo.
Ora studiamo un pulsante per eliminare i grafici.
Sub deleteCharts()
For Each elemento In Charts
    Sheets(elemento.Name).Select
    ActiveWindow.SelectedSheets.Delete
Next
End Sub

sabato 1 marzo 2014

Grafici in Excel

La prima finestra della costruzione del grafico mi dice di selezionare un intervallo dati, e poi di selezionare Righe e Colonne.
Seleziono un intervallo dati 3, 1 e 2. L'opzione "Righe-Colonne" è selezionata su "Colonne".



Adesso la seleziono su "Righe".



Ecco.
Adesso voglio dare un colore alle righe... Come fare?