Riferimenti assoluti vba



  • Riferimenti assoluti vba
    di andrea (utente non iscritto) data: 06/12/2013 13:25:17

    Buongiorno a tutti,
    ho un semplice problema che putroppo mi sta facendo perdere molto tempo.
    Vorrei inserire in una cella una formula che consista nel dividere il valore di un'altra cella per se stessa in riferimento assoluto.
    Con il codice che ho scritto, i valori della cella contenente la formula risultano bloccati, ma solo con riferimento alla colonna. Es: =$F6/$F6
    Vorrei modificare la macro in modo che trasformi ad esempio =$F6/$F6 in =$F6/$F$6,
    quindi in generale che in RC6/RC6 il denominatore sia il riferimento assoluto.
    Potete aiutarmi?
    Grazie!
     
    Dim i As Integer
    For i = 1 To 2
    ActiveCell.FormulaR1C1 = "=RC6/RC6"
    ActiveCell.Offset(1, 1).Select
    Next
    End sub
    



  • di scossa data: 06/12/2013 14:06:02

    Ciao,
    sarebbe facile aiutarti se dicessi in quali celle vuoi inserire quella formula, e se spiegassi a cosa serve quel ciclo for che fa spostare in diagonale la cella attiva.......



  • di andrea (utente non iscritto) data: 06/12/2013 14:21:27

    Ciao,
    grazie per esserti interessato al mio problema,
    ti allego un file per farti capire quale risultato voglio raggiungere.
    Nel primo foglio vedi come ho "risolto" il problema manualmente,
    nel secondo ho fatto partire la macro posizionandomi sulla cella B1.
    quel ciclo serve perché dovrei replicare la stessa operazione per circa 4000 volte,
    (il file è solo una semplificazione)
    e vorrei evitare di farlo manualmente.

    Secondo me il mio problema potrebbe essere risolto "aggirandolo"
    Mi spiego: se anzichè scrivere RC6, scrivessi ad esempio R1C6, il valore restituito sarebbe già bloccato (nel mio caso: $F$6).
    Però dovendo ripetere l'operazione cambiando riga, dovrei far sì che il numero di fianco alla riga aumenti di 1 ogni volta.
    I passaggi logici potrebbero essere:
    - trova il numero di riga nella quale sei adesso e ponilo uguale a n
    - fai il calcolo con la formula R[n]C6
    - ad ogni ciclo aumenta n di 1
    ma purtroppo non riesco a farlo nemmeno in questo modo.

    Comunque se tu trovassi una qualsiasi soluzione, anche in un altro modo, te ne sarei davvero riconoscente :)
    Grazie




  • di Vecchio Frac data: 06/12/2013 14:30:20

    Il codice che hai scritto all'inizio si corregge come segue, se non ho capito male.
    Nel frattempo vedo hai continuato la discussione. Se trovo un attimo do un'occhiata più attenta.
     
    Sub test()
        'inserisce la formula appresso specificata a partire dalla
        'riga 6, colonna 6 (cella F6) fino a riga 8, colonna 6 (cella F8)
        Range(Cells(6, 6), Cells(8, 6)) = "=$F6/$F$6"
    End Sub
    






  • di Vecchio Frac data: 06/12/2013 14:32:46

    Ho dato una letta veloce alla tua spiegazione e credo che la mia soluzione sia per te la più semplice e veloce. Ti basta specificare l'intero range da riempire con la formula indicata (con il denominatore munito dei segni dollaro) e al resto (cioè riempire il range con la formula adattandola riga per riga) pensa Excel stesso.





  • di Vecchio Frac data: 06/12/2013 14:37:11

    In ogni caso non serve preselezionare una cella per inserirvi una formula.
    Il file è completo? o manca qualcosa? lo scopo è solo dividere una cella per se stessa? ^_^ o piuttosto proseguire poi trascinando le formule verso il basso, colonna per colonna, dalla riga che inizia per 1?





  • di andrea (utente non iscritto) data: 06/12/2013 14:47:51

    Ciao Vecchio Frac,
    grazie per la tua risposta, purtroppo non risolve esattamente il mio problema.
    Infatti con la tua prima soluzione riempirei un range di valori, ma tutti a partire dalla stessa cella.
    Invece come puoi vedere dal file, dovrei partire ogni volta dalla cella sotto a quella precedente, mantendendo la stessa colonna.
    Come hai notato esattamente, dovrei proprio proseguire trascinandole, ma quello è un problema che avrei risolto poi tranquillamente.
    il mio problema consiste appunto nel raggiungere il risultato che vedi nel primo foglio del file allegato.
    Grazie per la tua gentilezza e attenzione




  • di scossa data: 06/12/2013 14:49:59

    Ciao,

    il modo più "leggibile" è di utilizzare la proprietà Formula anziché FormulaR1C1.

    Comunque metto sotto entrambi i codici
     
    Sub Macro()
    Dim i As Long
      With ActiveSheet
         For i = 1 To 10
           .Cells(i, i + 1).Formula = "=$A" & i & "/$A$" & i
         Next
      End With
    End Sub
    
    
    Sub Macro1()
    Dim i As Long
      With ActiveSheet
        For i = 1 To 10
          .Cells(i, i + 1).FormulaR1C1 = "=RC1/R" & i & "C" & 1
        Next
      End With
    End Sub
    
    
    



  • di Vecchio Frac data: 06/12/2013 14:52:03

    Avevo capito bene ^_^
    La mia proposta è questa.
     
    Sub test()
    Dim i As Integer
        For i = 1 To 10
            Cells(i, i + 1) = "=$A" & i & "/$A$" & i
            Range(Cells(i, i + 1), Cells(10, i + 1)) = "=$A" & i & "/$A$" & i
        Next
    End Sub
    






  • di Vecchio Frac data: 06/12/2013 14:53:30

    Battuto sul tempo da scossa ^_^
    ora, la mia soluzione risponde completamente alla domanda, come integrata poi, o no?





  • di andrea (utente non iscritto) data: 06/12/2013 14:59:03

    Grazie scossa!!!
    Il tuo codice ha risolto il mio problema iniziale! :)
    E grazie a te Vecchio Frac!
    Il tuo ha addirittura risolto anche il problema successivo!
    Grazie veramente infinite!