Corso VBA Excel ITA - 7 - Riferimenti assoluti e relativi

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ก.พ. 2025
  • Differenza tra riferimenti assoluti e riferimenti relativi; spiegazione della proprietà Offset.

ความคิดเห็น • 52

  • @edmondosestini3227
    @edmondosestini3227 6 ปีที่แล้ว +5

    Visto che non hai parlato della proprietà FormulaR1C1 ho scritto una semplicissima subroutine per illustrarne l'uso:
    Sub Prova_FormulaR1C1()
    Range("b2") = 1
    Range("c3") = 2
    'Uso della Proprietà FormulaR1C1 (R = Row e C = Column)
    'In B4 scrivi la formula =B2+C3
    Range("B4").FormulaR1C1 = "=R2C2+R3C3"

    End Sub
    Ciao e ancora grazie per questo utilissimo corso.
    Eddy

    • @NickTheGeek
      @NickTheGeek  6 ปีที่แล้ว +1

      Grazie Edmondo! Metto questo commento in primo piano

    • @edmondosestini3227
      @edmondosestini3227 6 ปีที่แล้ว +1

      Grazie! Che onore . . . !!!!

    • @NickTheGeek
      @NickTheGeek  6 ปีที่แล้ว +1

      eh addirittura :-D

  • @riccardoricky1335
    @riccardoricky1335 4 ปีที่แล้ว +1

    ciao Nicola, utilizzo excel ogni giorno ed ho cominciato a sviluppare delle macro. Questi corsi sono fantastici, chiarissimo il modo di spiegare, utilissimi. Complimenti. Sto imparando tantissime cose nuove, grazie.

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว

      Ciao Riccardo, grazie a te per il commento.

  • @francol1407
    @francol1407 4 ปีที่แล้ว +1

    Davvero complimenti per la chiarezza con cui spieghi gli argomenti. In questo momento di quarantena ho scoperto il tuo canale ed è davvero utile per "trascorrere" le giornate. Grazie

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว

      Mi fa piacere che i video siano utili, grazie a te per il commento

  • @njtv7278
    @njtv7278 5 ปีที่แล้ว +1

    Ho scoperto questo corso 3 giorni fa..,ringrazio in quanto sono molto chiari gli argomenti trattati. Ed grazie Edmondo che ha contribuito in commento ;)

    • @NickTheGeek
      @NickTheGeek  5 ปีที่แล้ว +1

      Grazie, spero che continuerai a seguirlo :)

    • @njtv7278
      @njtv7278 5 ปีที่แล้ว +1

      @@NickTheGeek sì sto continuando eh molto utile.

  • @enzodamico2967
    @enzodamico2967 6 ปีที่แล้ว +2

    Ho cominciato ieri e sto già alla lezione 7, prendendo appunti e seguendo passo passo sul mio Excel. E' tutto spiegato molto chiaramente, grazie per l'ottimo lavoro :)

    • @NickTheGeek
      @NickTheGeek  6 ปีที่แล้ว +2

      mi fa piacere, grazie a te per il commento :)

    • @njtv7278
      @njtv7278 5 ปีที่แล้ว

      Anch'io sto prendondo appunti; video non tanto lunghi quindi ci permette di capire piano piano. Grazie mille

  • @davidepaganelli7469
    @davidepaganelli7469 6 ปีที่แล้ว +2

    Tutto chiarissimo grazie! Video da non oltre 15 minuti sono perfetti. :)

    • @NickTheGeek
      @NickTheGeek  6 ปีที่แล้ว +1

      Ciao, grazie a te per il commento :) per la durata dei video ci provo, ma non sempre ci riesco e a volte i video diventano un po' troppo lunghi per non lasciare un argomento a metà

  • @corrado96
    @corrado96 7 ปีที่แล้ว +2

    Grazie, grande come sempre! E poi se il video dura di più meglio....più informazioni. Alla prossima

    • @NickTheGeek
      @NickTheGeek  7 ปีที่แล้ว +1

      grazie Corrado, hai ragione, più durata = più informazioni, ma preferisco spezzettarle per non mettere troppa carne al fuoco nello stesso video

    • @corrado96
      @corrado96 7 ปีที่แล้ว +2

      Come preferisci, sei top!

  • @robertobraicovick6867
    @robertobraicovick6867 4 ปีที่แล้ว +1

    Grazie!

  • @Nami95
    @Nami95 4 ปีที่แล้ว +1

    so che sono in ritardo al party,
    ma pasticciando un po' sono "riuscita" ad ottenere che un effetto uguale a quello dei riferimenti relativi ma senza utilizzare offset, ad esempio:
    sub prova ()
    activecell.cells(1,1)="x"
    end sub
    e quindi mi chiedevo se andasse ugualmente bene o facendo programmi più complessi potrebbe dare problemi maggiori?
    grazie mille per questo corso, sei molto bravo a spiegarti!

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว +1

      Ciao Nami, grazie per i complimenti e per il commento. Sinceramente non ho mai visto questa notazione, quindi non so dirti se ci possano essere problemi. Se vedi che funziona, allora non vedo controindicazioni nell'utilizzarla al posto di Offset. Personalmente però rimarrei sull'Offset, che mi sembra più intuitiva dato che parte da (0, 0) anziché da (1, 1)

    • @Nami95
      @Nami95 4 ปีที่แล้ว +1

      @@NickTheGeek io invece personalmente preferisco activecell.cells, così posso riferirmi direttamente alla cella di arrivo 😅
      Grazie per avermi risposto anche a questo vecchio video, gentilissimo:)

  • @Gasolik1
    @Gasolik1 6 ปีที่แล้ว

    Nicola scusa se ti scoccio ancora, ho scaricato Office 2016 per il mio mac, e ho fatto caso che non ha l'icona per i riferimenti assoluti delle macro, come e possibile?

    • @NickTheGeek
      @NickTheGeek  6 ปีที่แล้ว

      mi dispiace ma non saprei, non uso office per mac; se non c'è quella funzione, significa che devi registrare le macro sempre con riferimenti relativi, e poi eventualmente modificarle a mano per mettere i riferimenti assoluti

    • @Gasolik1
      @Gasolik1 6 ปีที่แล้ว

      @@NickTheGeek buongiorno e sapresti dirmi come si fa?

    • @NickTheGeek
      @NickTheGeek  6 ปีที่แล้ว

      Se funziona come su Windows, se vuoi selezionare ad esempio la cella C2 partendo dalla A1, con i riferimenti relativi dovresti scrivere:
      cells(1,1).select
      activecell.offset(1, 2).range("A1"). select
      perché la seconda linea indica uno spostamento di una riga e due colonne partendo dalla cella attiva in quel momento, quindi in base alla prima cella cambia anche la seconda.
      Quindi se la prima linea fosse cells(2,2).select allora la seconda linea selezionerebbe la cella D3.
      Un riferimento assoluto, invece, è solo l'indicazione diretta della cella da selezionare, quindi sempre secondo l'esempio sopra:
      cells(1,1).select
      cells(2,3).select
      in questo caso, la seconda linea seleziona sempre la cella C2, qualsiasi sia la cella selezionata nella prima linea.
      Quindi se la prima linea fosse cells(2,2).select allora la seconda linea seleziona ancora la cella C2.

  • @Max_sbk12
    @Max_sbk12 5 ปีที่แล้ว

    11:05 Salve, non capisco perché nello spiegare la posizione "D3" in cui scriverà vba ha fatto quello strano ragionamento di considerare ancora "A1"? Bastava dire che il conteggio celle/colonne dell'Offset parte dalla cella riportata in Range( ).

    • @NickTheGeek
      @NickTheGeek  5 ปีที่แล้ว +1

      Ciao, in effetti non so perché ho fatto tutto quel giro

    • @pincopanco131
      @pincopanco131 4 ปีที่แล้ว

      Infatti non riesco a capire il senso di range(). Adesso mi vengono dobbi su qualcosa che credevo di aver capito

  • @edmondosestini3227
    @edmondosestini3227 6 ปีที่แล้ว +1

    La macro che ho fatto per la proprietà FormulaR1C1 è con riferimenti assoluti, però è anche utile vedere come funziona con riferimenti relativi. Ho fatto un'altra sempice macro illustrativa. Se si parte con la cella A1 selezionata, in B3 si avrà la somma di A5 e C1. Da notare che, in questo caso, la formula va esplicitata con gli indici (anche negativi) compresi in parentesi quadre:
    Sub Riferimenti_Relativi()
    ActiveCell.Offset(0, 2).Select
    ActiveCell = 1
    ActiveCell.Offset(4, -2).Select
    ActiveCell = 2
    ActiveCell.Offset(-2, 1).Select
    ActiveCell.FormulaR1C1 = "=R[2]C[-1]+R[-2]C[1]"

    End Sub
    Saluti.

  • @linus1887
    @linus1887 4 ปีที่แล้ว

    Ciao, intanto complimenti e grazie per queste informazioni perché ritengo siano molto utili per chi si avvicina al mondo del linguaggio VBA. Avrei una domanda da farti. Come faccio a selezionare un intervallo di celle della colonna A rispetto alla riga specifica della cella attiva senza usare Offset? Nel mio caso mi serve attivare la macro in qualsiasi punto del foglio e se usassi Offset andrebbe sempre indietro del numero delle colonne che indico all'interno delle parentesi. Quindi se mi trovo nella colonna E e vado indietro di 4 arrivo alla colonna A ma se attivo la macro quando sono nella colonna O arriverò alla colonna L quando invece anche in questo caso mi servirebbe selezionare la corrispondente cella della colonna A.
    Grazie mille in anticipo :)

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว

      Ciao Mattia, grazie per i complimenti.
      La cella attiva in un certo momento è ActiveCell, e la sua riga e colonna sono rispettivamente ActiveCell.Row e ActiveCell.Column
      Per identificare una specifica cella puoi usare la notazione Cells(riga, colonna), quindi la cella che è sulla stessa riga della cella attiva, ma nella colonna A, è Cells(ActiveCell.Row, 1).
      Per selezionarla puoi usare il metodo Select, quindi Cells(ActiveCell.Row, 1).Select
      Non ho ben capito però se ti serve selezionare una sola cella oppure un intervallo.

  • @giovannicapuano9729
    @giovannicapuano9729 ปีที่แล้ว

    ciao nick! intanto grazie perche spieghi divinamente, peccato per la qualita video non ottimale
    al minuto 11.46 non capisco perche parli di c2
    a quanto ho capito
    Sub riferimento_relativo ()
    Cells.ClearContents
    Range(“a1”).activate
    ActiveCell.Offset(1,2).Range(“b2”).Select
    ‘spostati di 1 riga e 2 colonne rispetto all’ultima cella selezionata, e seleziona una sola cella: se la cella selezionata era a1, ora mi trovo in D3, perche per come ho scritto nel codice è come se la cella iniziale fosse la b2
    Selection = “vba”
    ‘scrivi vba in c2 .
    è corretto cio che ho scrito? grazie

    • @NickTheGeek
      @NickTheGeek  ปีที่แล้ว

      Ciao Giovanni, grazie a te per i complimenti.
      Riguardo il codice che hai scritto, ActiveCell.Offset(1,2) sposta la cella iniziale di una riga verso il basso e di due colonne verso destra; quindi dato che la cella iniziale è A1, quella nuova è C2; infatti poi come mostro nel video la selezione finisce su D3, in quanto la cella C2 viene identificata come se fosse la A1, quindi la "nuova" B2 (cioè una riga in basso e una colonna a destra rispetto alla A1) diventa la D3 (cioè una riga in basso e una colonna a destra rispetto alla C2).

  • @AchilleM
    @AchilleM 4 ปีที่แล้ว

    Come si possono attivare i riferimenti assoluti o relativi da codice VBA? Grazie

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว

      Non ho ben capito cosa intendi per "attivare" i riferimenti assoluti o relativi da VBA. Mi fai un esempio di cosa vorresti fare?

    • @AchilleM
      @AchilleM 4 ปีที่แล้ว

      @@NickTheGeek Invece di scegliere i "Usa riferimenti relativi" dal pulsante sulla barra superiore di Excel, attivare o disattivare tale funzione all'interno di una subroutin, tramite un funzione specifica se esiste.

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว

      Non saprei se si può fare da VBA, anche perché l'attivazione di quel pulsante riguarda l'utilizzo dei riferimenti relativi durante la registrazione della macro con scrittura automatica del codice VBA; mentre se stai scrivendo il codice VBA manualmente puoi usare riferimenti assoluti (ad esempio Range("A1")) oppure relativi con Offset, come mostrato nel video; quindi in questo caso non ti serve attivare o disattivare il tasto, perché scegli di volta in volta che tipo di riferimento vuoi utilizzare (assoluto o relativo).

    • @AchilleM
      @AchilleM 4 ปีที่แล้ว +1

      @@NickTheGeek Ok grazie, ho capito

  • @droitaucoeur1
    @droitaucoeur1 3 ปีที่แล้ว

    Attenzione con l'istruzione Select o Activate. Per test, inserisci 10 fogli. Nella macro scrivi così:
    Dim i as Long
    For i = 1 to Sheets.count
    Sheets(i).Select
    Next i
    E vedi cosa succede.

    • @NickTheGeek
      @NickTheGeek  3 ปีที่แล้ว

      Mi sfugge qualcosa. Non mi sembra che succeda niente di particolare, vengono selezionati uno alla volta tutti i fogli.

    • @droitaucoeur1
      @droitaucoeur1 3 ปีที่แล้ว

      @@NickTheGeek Normale se i fogli sono vuoti. Ma riempiti di molti dati, e con cellula.Select, l'effetto è orribile.

  • @frenksart8066
    @frenksart8066 7 ปีที่แล้ว +2

    È un po più difficile ma alla fine ho capito.

    • @NickTheGeek
      @NickTheGeek  7 ปีที่แล้ว +1

      bravo, se hai dei dubbi fai sempre prove o, naturalmente, chiedimi pure

  • @nicksan7263
    @nicksan7263 ปีที่แล้ว +1

    Ottimi video ma .. giuro .. non capisco l'utilità dei riferimenti relativi

    • @NickTheGeek
      @NickTheGeek  ปีที่แล้ว +1

      Magari potrebbero non sembrare utili ma non si sa mai se in qualche situazione potrebbero esserlo.

  • @pincopanco131
    @pincopanco131 4 ปีที่แล้ว

    Volevo farti i complimenti. Soprattutto per il fatto di non dare niente per scontato. Quindi a volte ripeti più volte anche i concetti "semplici". Ed è una buona cosa. Ma in questo video quando passi al .range("a1") non si capisce niente 😭

    • @NickTheGeek
      @NickTheGeek  4 ปีที่แล้ว

      Ciao, grazie per i complimenti; quello di offset con range è un concetto un po' astruso, puoi tranquillamente farne a meno se vuoi programmare con VBA.
      Ricordati solo (e questo è importante) che con Offset ti sposti di tante righe e tante colonne quante ne indichi tra le parentesi. Quindi se la cella attiva è A1 e scrivi:
      ActiveCell.Offset(1,2).Activate
      significa che vuoi selezionare la cella C2 (cioè una riga sotto e due colonne a destra di A1).

  • @leonardocrincoli6984
    @leonardocrincoli6984 2 ปีที่แล้ว +1

    Ma scrivere solamente >>activecell="vba" >>activecell.offset(1,0)="vba2" >>activecell.offset(2,0)="vba3" non andrebbe bene ?

    • @NickTheGeek
      @NickTheGeek  2 ปีที่แล้ว

      Sì direi che andrebbe bene