Recuperare coordinate di 2 celle per costruire Range

Anonimo
2009-10-09T14:12:56+00:00

Ciao a tutti.

Supponendo di avere dei dati come quelli contenuti nella matrice colorata.... e supponendo che la matrice colorata  

  • possa assumere posizioni diverse
  • possa avere un numero di righe non definito   a priori e cmque non conosciuto a priori

cortesemente chiedo quale formula posso applicare per

-- recuperare le coordinate della cella che contiene AA                      ( in questo esempio  è la cella B3 )

-- recuperare le cordinate dell' ULTIMA CELLA in BASSO a DESTRA    ( in questo esempio  è la cella D11) 

ciao e grazie da patrini

A B C D E F
1
2
3 AA BB CC
4 11 3 7
5 1 3 1
6 1 3 1
7 1 3 1
8 1 3 177
9 1 55 4
10 7 3 1
11 1 4 1
12
13
Microsoft 365 e Office | Installare, riscattare, attivare | Per la casa | Altro

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-09-17T03:59:14+00:00

Con questa macro nidificata creo automaticamente i confini di qualunque tabella.

In questo esempio ho presupposto che tutte le colonne siano contigue e che tutte le righe della tabella siano popolate.

Inizio a dichiarre delle variabili di tipo "Public" che  normalmente inserisco in un modulo a parte e che sono utilizzate per tutti i programmi

 

 Dichiarazione di variabili

Public iMyR, iMyR1, iMyE, iMyE1 As Long 'variabili che indicano il numero di riga

Public iMyC, iMyC1 As Integer 'variabili che indicano il numero di colonna

Routine

Sub Delimita_tabella()  

'mi posiziono sulla prima cella del foglio attivo

  Application.Goto Reference:="R1C1"

'cerco la cella che contiene AA (se voglio la certezza che nel foglio esista AA devo  utilizzare la funzione                                                                                                          COUNTIF legata all'intero foglio)

   Cells.Find(What:="AA", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _

   xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _

   , SearchFormat:=False).Activate

  iMyC = ActiveCell.Column      

'determino il numero di colonna della cella che contiene AA

  iMyR = ActiveCell.Row                       'determino il numero di riga della cella che contiene AA

  Selection.End(xlToRight).Select         'mi sposto sull'ultimo titolo della tabella

  iMyC1 = ActiveCell.Column              'determino il numero dell'ultima colonna 'determina il numero di colonna della cella che contiene AA

'mi posiziono sull'ultima riga della colonna il cui titolo e' AA

  Application.Goto Reference:="R1048576C" & iMyC

'salgo per intercettare l'ultima riga utile della tabella

   Selection.End(xlUp).Select

  iMyE = ActiveCell.Row                'determino il numero dell'ultima riga

'ora ho tutti gli stumenti per costruirmi il RANGE

'seleziono per verifica l'intera tabella

   Range(Cells(iMyR, iMyC), Cells(iMyE, iMyC1)).Select

'assegno automaticamente il nome di zona ORIGINE_TABELLA

   Range(Cells(iMyR, iMyC), Cells(iMyE, iMyC1)).Name = "Origine_tabella"

                                                   'assegno automaticamente il nome di zona VUOTA_TABELLA

   Range(Cells(iMyR, iMyC), Cells(iMyE, iMyC1)).Name = "Vuota_tabella"

                                                  'seleziono la cella attiva

   ActiveCell.Select

End Sub

 

Commento:

Con queste macro nidificate ho la possibilita' di crearmi la "tabella su misura"

Se le colonne non sono contigue o tutte le celle non sono popolate e' necessario creare un LOOP di analisi e selezionare i valori massimi trovati.

 

Salutoni

Marexe46

Per favore, non rispondere a post così vecchi. Grazie. Crea solo confusione.

Inoltre, se la tabella ha righe/colonne contigue e vuoi trovare i suoi riferimenti(qui lo faccio in una MsgBox) e/o posizionarti sulla prima riga vuota per fare un nuovo inserimento, utilizzando vb e Find:

Public Sub m()

    Dim rng As Range

    With ActiveSheet

        Set rng = .Cells.Find(What:="AA", _

            After:=ActiveCell, _

            LookIn:=xlFormulas, _

            LookAt:=xlWhole, _

            SearchOrder:=xlByRows, _

            SearchDirection:=xlNext, _

            MatchCase:=True _

            , SearchFormat:=False)

        If rng Is Nothing Then 'se non trovo il valore

            MsgBox "Non trovata nessuna corispondenza."

            Set rng = Nothing

            Exit Sub

        End If

        Set rng = rng.CurrentRegion

        MsgBox rng.Address '<<==riferimenti tabella

        rng.Cells(rng.Rows.Count + 1, 1).Select '<<==selezione riga vuota

    End With

    Set rng = Nothing

End Sub

Guida del vb di Excel, CurrentRegion.

Diciamo anche che la combinazione: Find/ActiveSheet è qualcosa di molto, molto brutto. Non ho nessun controllo di *dove* la routine venga eseguita e della riga selezionata. Sarebbe sempre meglio sapere cosa si sta cercando e dove lo si cerca.

 Ancora nel tuo codice, il parametro LookAt settato a xlPart trova sì AA, ma anche aaaAA, aabb, bbaabb, ecc. Meglio: xlWhole. Se poi settiamo MatchCase:=True, aumentiamo la sicurezza della nostra ricerca e siamo sicuri che troveremo la cella che contiene AA(se presente).


,--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2009-11-02T01:17:20+00:00

La matrice ha

--  la CELLA PIU in ALTO  SINISTRA CHE CONTIENE "AA" 

--  la CELLA PIU in ALTO  DESTRA    CHE CONTIENE "CC" 

..  l'ULTIMA RIGA della MATRICE è   quella che precede la prima riga vuota

    nel ns esempio la prima riga vuota è la riga 12,  pertanto l'ultima riga della matrice è la riga 11 

Sto cercando come si fa sia in VBA che non 

Ipotizziamo che l'area all'interno della quale ci aspettiamo di trovare la matrice sia A1:L50.

La prima riga viene indiicata dalla formula: =MIN(SE(A1:L50<>"";RIF.RIGA(A1:L50)))

L'ultima riga da:  =MAX(SE(A1:L50<>"";RIF.RIGA(A1:L50)))

La prima colonna da: =MIN(SE(A1:L50<>"";RIF.COLONNA(A1:L50)))

L'ultima colonna da:  =MAX(SE(A1:L50<>"";RIF.RIGA(A1:L50)))

La matrice é indicata da: =SCARTO(A1;MIN(SE(A1:L50<>"";RIF.RIGA(A1:L50)))-1;MIN(SE(A1:L50<>"";RIF.COLONNA(A1:L50)))

-1;1+MAX(SE(A1:L50<>"";RIF.RIGA(A1:L50)))-MIN(SE(A1:L50<>"";RIF.RIGA(A1:L50)));1+MAX(SE(A1:L50<>"";RIF.COLONNA(A1:L50)))

-MIN(SE(A1:L50<>"";RIF.COLONNA(A1:L50))))

N.B. Tutte e queste cinque sono formule in forma di matrice: dopo averla digitate anziché premere invio devi usare la combinazione di tasti

CTRL+MAIUSC+INVIO.

Se avrai effettuato l'operazione correttamente le formula, nella barra della formula, apparirà fra parentesi graffe. In caso contrario restituiranno #VALORE!

Facci sapere se e come hai risolto, grazie.


Tiziano Marmiroli Microsoft MVP - Office System http://www.riolab.org

La risposta è stata utile?

0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2009-10-12T11:14:59+00:00

    Non hai risposto alla domanda...

    Come identifichi la matrice? Si tratta di una zona contigua (delimitata da righe e colonne vuote, in questo caso le righe 2 e 12 e le colonne A ed E), oppure le condizioni sono differenti?

    Se la zona è identificata da righe e colonne vuote si possono sfruttare le capacità native di Excel per individuarne i confini, ma se i criteri sono differenti allora tutto cambia.

    Ciao

    Roberto

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2009-10-10T18:07:01+00:00

    Ciao Roberto..

    La matrice ha

    --  la CELLA PIU in ALTO  SINISTRA CHE CONTIENE "AA" 

    --  la CELLA PIU in ALTO  DESTRA    CHE CONTIENE "CC" 

    ..  l'ULTIMA RIGA della MATRICE è   quella che precede la prima riga vuota

        nel ns esempio la prima riga vuota è la riga 12,  pertanto l'ultima riga della matrice è la riga 11 

    Sto cercando come si fa sia in VBA che non 

    grazie e ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2009-10-10T15:19:46+00:00

    La matrice colora come è individuata? Hai per esempio un Nome associato a quell'area?

    Stai cercando una funzione da usare in un a cella del foglio, oppure in VBA?

    Ciao

    Roberto

    La risposta è stata utile?

    0 commenti Nessun commento