Risultati da 1 a 10 di 10

Discussione: Ciclare intervalli denominati



  1. #1

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6795
    Versione Office
    2013
    Likes ricevuti
    718
    Likes dati
    164

    Ciclare intervalli denominati

    Ciao a tutti

    Mi chiedevo se era possibile ciclare (e se si in che modo) i range denominati su un foglio di lavoro.

    Ad esempio supponiamo che su un foglio abbia quattro intervalli cui è stato assegnato un nome (pippo, pluto, paperino, minnie)

    Voglio colorare il range minnie di giallo quale potrebbe essere il codice?

    Poi se successivamente voglio colorare pippo come faccio a "decolorare" minnie?

    Insomma dei quattro range deve essere colorato sempre uno solo.

    In altre parole in VBA esiste un insieme dei nomi definiti sul foglio attivo?

    Grazie

    Alfredo

  2. #2

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979

    Re: Ciclare intervalli denominati

    I range si richiamano come le celle cioè con range("pippo").select
    Per il ciclo puoi provare l'equivalente di Scegli cioè Choice

    Inviato dal mio GT-I9301I utilizzando Tapatalk

  3. #3
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3209
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Ciclare intervalli denominati

    Ciao Alfredo e ciao Rubik
    Nella guida di VBA prova a cercare:
    - Oggetto Names
    - WorkBook.Names, proprietà
    - WorkSheet.Names, proprietà
    - Application.Names, propreità

    Ciao,
    Mario

  4. #4

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979

    Re: Ciclare intervalli denominati

    Per fare un esempio:
    Codice: 
    Sub Colora()
    Dim Matrix()
    Dim Rng As Variant
    
    
    Matrix = Array("Pippo", "Pluto", "Minni", "Paperino")
    
    
    For Each Rng In Matrix
        If Range(Rng).Interior.Color = vbRed Then
            Range(Rng).Interior.Color = vbGreen
        Else
            Range(Rng).Interior.Color = vbRed
        End If
    Next
    
    
    Erase Matrix()
    End Sub

  5. I seguenti utenti hanno dato un "Like"


  6. #5

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6795
    Versione Office
    2013
    Likes ricevuti
    718
    Likes dati
    164

    Re: Ciclare intervalli denominati

    Cia Enzo e ciao Mario

    Vi mostro quello che avevo fatto io ricorrendo ad un escamotage.

    Sul foglio1 ci sono due zone pippo (a1:c5) e pluto (c1:c5); in N4 c'è una convalida dati ed in base alla scelta fatta si colorano i relativi range.

    Questo il codice che credo inutile spiegarvi.

    Codice: 
    Option Explicit
    
    Public old As String
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("N4")) Is Nothing Then
        Range(Target.Value).Interior.ColorIndex = 6
        Range(old).Interior.ColorIndex = xlNone
    End If
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    old = Range("n4").Value
    End Sub
    Questa soluzione però obbliga, prima di effettuare la successiva scelta, a deselezionare N4 e poi riselezionarla in modo da poter memorizzare nella variabile "old" il valore del target prima della modifica.

    MI chiedevo se c'era un modo per evitare il deselezionamento/riselezionamento.

    Tutto qua.

    Alfredo
    File Allegati File Allegati

  7. #6

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979

    Re: Ciclare intervalli denominati

    Se ho capito bene, prova così:
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Name
    
    
    If Not Intersect(Target, Range("N4")) Is Nothing Then
        For Each Rng In ThisWorkbook.Names
            Range(Rng).Interior.Color = xlNone
        Next
        Range(Target.Value).Interior.ColorIndex = 6
    End If
    End Sub

  8. I seguenti utenti hanno dato un "Like"


  9. #7

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6795
    Versione Office
    2013
    Likes ricevuti
    718
    Likes dati
    164

    Re: Ciclare intervalli denominati

    Si Enzo domani la provo ma sono convinto che funzionerà.

    Il punto che mi mancava era la tipologia di variabile "Name"; devo approfondire questo argomento :262:

    Alfredo

  10. #8
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3209
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Ciclare intervalli denominati

    Ciao Alfredo
    vedi se può servirti una "nota" di qualche tempo fa che, credo, può darti un contributo.
    Come vedi non è farina del mio sacco ma mi è stata molto utile in svariate occasioni.
    di scossa (Utente non iscritto) data: 11/07/2015 21:47:54

    Sui "named ranges" ("intervalli nominati" o meglio "nomi definiti") ci sarebbe da scrivere un intero capitolo, quindi mi limiterò ad una sintesi superficiale.

    Lato celle penso che ognuno di noi abbia avuto occasione di creare un named range per semplificare le proprie formule.
    La cosa da tenere presente è che, a dispetto del termine, un named range non è un range, ma una formula, che non esiste in una cella ma nella memoria di Excel.

    Selezionate la cella A1 e nella finestrella degli indirizzi (in alto a sinistra, dove appare A1), scrivete importo per creare il nome importo.
    Ora se andate nel tab Formule -> Gestione nomi, troverete nell'elenco importo e potrete constatare che "Riferito a" riporta
    =Foglio1!$A$1
    cioè una formula (*).

    Quindi, in realtà in un "nome" si memorizza una formula, formula che può essere il riferimento ad una cella od intervallo di celle, può essere una formula complessa, una costante, una matrice ......

    Lato VBA, si può accedere in modo più completo all'oggetto name.
    Con l'istruzione
    ActiveWorkbook.Names.Add Name:="conto", RefersToR1C1:="=0", visible:=hidden
    abbiamo creato il nome conto che fa riferimento ad una costante. Inoltre con visible:=hidden l'abbiamo reso nascosto.

    Con l'istruzione [conto] = 0 contenuta nella riga
    If .Name = "Novità" And [conto] = 0 Then
    "valuto" (*) la formula a cui fa riferimento il nome conto e la confronto con il valore 0.
    (*) questo spiega perché, al contrario delle celle, riferirsi ad un named range con la notazione [] è corretto: essendo una formula deve essere "valutata".

    La differenza fondamentale tra un nome che faccia riferimento ad una cella (come il nome importo dell'esempio sopra) ed uno che faccia riferimento ad una costante come il nome conto è che per il primo avremo valorizzata la proprietà .RefersToRange che permetterà di accedere a tutte le proprietà dell'oggetto range a cui fa riferimento, mentre per il secondo tale proprietà non è disponibile.

    L'uso dei nomi in VBA è particolarmente importante perché svincola il codice dalla cella a cui fa riferimento.
    Un'istruzione come range("B2").value non sarebbe più "coerente" se venisse aggiunta una riga prima della riga B.
    Mentre se si usa un nome (importo, riferito a: "=B2"), range("importo") resterebbe "coerente".

    Tutto questo in estrema sintesi, e ben lungi dall'essere esaustivo.
    Quello che mi sembra opportuno sottolineare è "La cosa da tenere presente è che, a dispetto del termine, un named range non è un range, ma una formula, che non esiste in una cella ma nella memoria di Excel."

    Ciao,
    Mario

  11. I seguenti 2 utenti hanno dato un "Like" a Marius44 per questo post:


  12. #9

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6795
    Versione Office
    2013
    Likes ricevuti
    718
    Likes dati
    164

    Re: Ciclare intervalli denominati

    Come detto ho provato la macro di Rubik (ciao Enzo) e funziona perfettamente.

    Ringrazio anche Mario per la nota "didattica" di scossa (peccato che è un po' di tempo che non si veda da queste parti) anche se, devo ammettere, che per capirla appieno ho dovuto rileggerla più volte.....

    Alfredo

  13. #10
    L'avatar di dracoscrigno
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    ferrara
    Età
    41
    Messaggi
    2074
    Versione Office
    office pro 2010
    Likes ricevuti
    440
    Likes dati
    241

    Re: Ciclare intervalli denominati

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    ... supponiamo che su un foglio abbia quattro intervalli cui è stato assegnato un nome (pippo, pluto, paperino, minnie)

    Voglio colorare il range minnie di giallo quale potrebbe essere il codice?
    Codice: 
    range("minnie").interior.Color=vbyellow
    range("minnie").Font.Color= vbred

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    Poi se successivamente voglio colorare pippo come faccio a "decolorare" minnie?
    Codice: 
        With range("minnie")..Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    Insomma dei quattro range deve essere colorato sempre uno solo.
    Credo che per risolvere questo problema ci sia bisogno di più informazioni.
    Comunque, per fare quello che chiedi, puoi usare i nomi come le coordinate e quindi usi i Range allo stesso modo che quando li richiami con esse.

    Se devi cambiare la proprietà di tutte le celle del range interessato con uno stsso identico valore, come vedi, non serve ciclarlo.

Discussioni Simili

  1. SCanbio tra Intervalli di celle
    Di marchesoft nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 03/04/17, 16:20
  2. media.se con più intervalli
    Di stefanofusco nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 15/03/17, 19:31
  3. =Casuale.tra() riferita ad intervalli
    Di ProgrammD69 nel forum Domande su Excel in generale
    Risposte: 20
    Ultimo Messaggio: 03/07/16, 19:58
  4. Far ciclare una macro per confronto dati tra fogli diversi
    Di Celeno nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 26/10/15, 23:19
  5. Somma di intervalli dinamici
    Di Gerardo Zuccalà nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 18/06/15, 01:54

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •