Risultati da 1 a 30 di 30

Discussione: Copiare valore da una cella e incolla nelle celle vuote sopra



  1. #1
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Copiare valore da una cella e incolla nelle celle vuote sopra

    salve a tutti, o creato questa macro che inserisce una riga vuote se nella colonna c mi trova la "X"

    Codice: 
    Sub InserisciRighe()
    
        Dim rng As Range
        Dim cella As Range
        Dim j As Long
    
        'imposto il range dove controllare, ovvero a partire dalla riga 8
        'fino all'ultima cella occupata della colonna C (3)
        Set rng = Range(Cells(8, 3), Cells(Rows.Count, 3).End(xlUp))
    
        'parte il ciclo dall'ultima cella piena della colonna Z
        'e torno a ritroso (step -1)
        For j = rng.Rows.Count To 1 Step -1
    
            'seleziono il valore di ogni cella della colonna
            Set cella = rng.Cells(j, 1)
    
            'con la cella in questione...
            With cella
                'controllo se contiene X o x
                If .Text = "X" Or .Text = "x" Then
                    'se vero inserisco una riga vuota sotto (con Offset)
                    .Offset(1, 0).EntireRow.Insert
                End If
            End With
        'passo alla successiva cella
        Next j
    
    End Sub
    volevo modificarla in modo che dopo aver inserito le righe vuote in questo caso 2,
    mi prenda il tutti i valori sotto alle celle vuote e me li copia nelle celle vuote diminuendo il valore di 1, vi allego il file forse si capisce meglio che a spiegarlo, nel file ho messo il risultato voluto, grazie
    File Allegati File Allegati

  2. #2
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    anche se nel tuo codice c'è qualcosa che mi "sfugge"......

    non so se ho capito,
    ma credo basti ordinare crescente la colonna "A"

    inserisci questo codice prima del tuo
    End Sub


    Codice: 
    Range("A1:A20").Select
        ActiveWorkbook.Worksheets("Test").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Test").Sort.SortFields.Add Key:=Range("A1"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Test").Sort
            .SetRange Range("A1:C20") ' adatta il range alle tue necessità
            .Orientation = xlTopToBottom
            .Apply
        End With
    Range("A1").Select
    Poi vedi tu come gestire le righe vuote in testa alla colonna "A"

    Ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  3. #3
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao tanimon, non devo ordinare i dati a me serve una macro che quando trova la cella vuota in questo caso 2 deve copiare la prima cella piena sotto le due celle vuote e incollarla nelle due celle vuote diminuendo il valore di 1.
    Riallego il file con qualche commento in piu

    File Allegati File Allegati

  4. #4
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    le celle vuote, tra le piene, sono sempre 2?

    se no, con quale criterio è 1 o più di 2?

    la sequenza di valori dalla cella piena a salire, deve essere sempre, a scendere, - 2 per la prima cella e -1 per la seconda?

    I valori in colonna "A" sono degli orari? Quindi è -2 secondi.... -1 secondo....?

    Perchè, se quelli in colonna "A" sono degli orari, il formato celle è Testo o Generale e non Ora?


    Troppe cose non sono state considerate/comunicate...................

    Ciao
    Frank

    ----------Post unito in automatico----------

    vediamo se ho capito adesso:

    Codice: 
    Sub prova()
    Dim valore As String
    Dim ini_valore As String
    
    
    For R = 1 To 20
        If Cells(R, 1).Value = "" Then
        
            valore = Right(Cells(R + 2, 1).Value, 2)
            ini_valore = Mid(Cells(R + 2, 1).Value, 1, 6)
            valore = Val(valore) - 2
            valore = CStr(valore)
            
            Cells(R, 1).Value = ini_valore & valore
            valore = Val(valore) + 1
            valore = CStr(valore)
            Cells(R + 1, 1).Value = ini_valore & valore
        End If
    Next R
    End Sub
    Naturalmente il Range("A1:A20") ha formato celle = Testo

    ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  5. I seguenti utenti hanno dato un "Like"


  6. #5
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao tanimon, grazie per la risposta, per quando riguarda le tuo domande:
    le celle vuote tra le piene le inserisco io con la macro inserisci righe e possono essere 1,2,3 in questo caso 2,
    i vaolri di colonna A sono orari e le ultime due cifre sono millisecondi, quindi dovrebbe sottrarre -1 millisecondo
    per quando riguarda il formato celle ho lasciato quello di defoult che cera nel foglio e i dati li importo da un file txt.

    la tua macro funziona in parte, praticamente quando trova le ultime duve cifre tipo 00:31.09 o 00 mi sbaglia il calcolo invece di uscire 00:31.08 e 00:31.07 mi esce 00:31.8 e 00:31.7 senza lo zero davanti grazie intando del tuo tempo speso e scusami se non ho spegato bene il problema.

  7. #6
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Citazione Originariamente Scritto da robynud Visualizza Messaggio
    ciao tanimon, grazie per la risposta, per quando riguarda le tuo domande:
    le celle vuote tra le piene le inserisco io con la macro inserisci righe e possono essere 1,2,3 in questo caso 2,
    Per questo,
    diventa un pò complicato:
    ora non ho tempo per vedere la tua macro e bisognerebbe conoscere i criteri per i quali le righe possono essere di numero variabile......

    Citazione Originariamente Scritto da robynud Visualizza Messaggio
    la tua macro funziona in parte, praticamente quando trova le ultime duve cifre tipo 00:31.09 o 00 mi sbaglia il calcolo invece di uscire 00:31.08 e 00:31.07 mi esce 00:31.8 e 00:31.7 senza lo zero davanti grazie intando del tuo tempo speso e scusami se non ho spegato bene il problema.
    Questo invece è più semplice:
    dovrebbe bastare inserire la riga in rosso tra le due riportate,
    ovviamente sia per riga -2 che riga -1

    Codice: 
    valore = CStr(valore)
    if len(valore) = 1 then valore = "0" & valore
    Cells(R, 1).Value = ini_valore & valore
    ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  8. I seguenti utenti hanno dato un "Like"


  9. #7
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    grazie intanto tanimon, allora aggiungento il tuo codice funziona solo nel primo caso 00:31.09,
    nel caso in cui ci dovrebbero essere gli 00:30.00 finali non funziona mi esce questo:



    invece che uscire 00:29.99 e 00:29.98
    per quando riguarda l'inserimento delle righe vuote la macro inserisce una riga vuota sotto ogni X che trova in colonna C.
    se per te non e un problema mi protesti commentare il codice da capire cosa fa la tua macro
    grazie intanto.

  10. #8
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    purtroppo oggi e domani sono un pò indaffarato.
    Se non lo fa qualcuno prima di me, spero di riuscire a risponderti nella serata di domani,
    altrimenti ti tocca portare pazienza.

    In base a quanto hai detto, devo effettuare alcune piccole modifiche al codice.

    Conferma se la tua macro inserisce UNA SOLA riga, sotto quella in cui è presente la X in colonna "C",

    o se ci sono altri criteri che non hai ancora detto,

    per cui le righe vuote sono di numero variabile.

    Ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  11. #9
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao, si inserisce una solo riga quando trova la X in colonna C, aspettero con pazienza

  12. #10

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Ciao a tutti,

    in attesa della modifica al codice di tanimon ( ), ti propongo questo:

    Codice: 
    Sub prova_2()
    Dim uriga As Long, i As Long, x, y, z
    Dim min As Double, sec As Double, cent As Double, Tempo1, Tempo2
    
    
    'uriga = Range("A" & Rows.Count).End(xlUp).Row
    uriga = 20  'visto che ci sono altri dati sotto quelli "utili"
    
    
    For i = 1 To uriga
        If Cells(i, 1) = "" And Cells(i, 1).Offset(2, 0) <> "" Then
            min = Mid(Cells(i, 1).Offset(2, 0), 1, 2) * (60 * 100)
            sec = Mid(Cells(i, 1).Offset(2, 0), 4, 2) * 100
            cent = Mid(Cells(i, 1).Offset(2, 0), 7, 2) * 1
            Tempo1 = (min + sec + cent) - 1
            Tempo2 = (min + sec + cent) - 2
            x = Tempo1 / (60 * 100)
            y = (x - Int(x)) * 60
            z = (y - Int(y)) * 100
            x = Format(Int(x), "00")
            y = Format(Int(y), "00")
            z = Format(z, "00")
            Cells(i + 1, 1).NumberFormat = "@"
            Cells(i + 1, 1).Value = x & ":" & y & "." & z
            
            x = Tempo2 / (60 * 100)
            y = (x - Int(x)) * 60
            z = (y - Int(y)) * 100
            x = Format(Int(x), "00")
            y = Format(Int(y), "00")
            z = Format(z, "00")
            Cells(i, 1).NumberFormat = "@"
            Cells(i, 1).Value = x & ":" & y & "." & z
            i = i + 2
        End If
    Next i
    
    
    
    
    End Sub
    mi ha fatto un pò dannare la formattazione...forse qualche passaggio si può eliminare.

    P.S.
    La macro ("prova_2") si trova nel "modulo 3".
    File Allegati File Allegati

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  13. I seguenti 2 utenti hanno dato un "Like" a cromagno per questo post:


  14. #11
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    grazie cromagno funziona per la formattazione puoi cambiarla come vuoi l'importante che esce il risultato, anche perche dopo aver fatto tutte le aggiunte devo esportarlo in un file di testo

  15. #12
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Ciao,

    purtroppo non ho avuto il tempo di analizzare la macro di Cromagno ( ciao ) che sarà sicuramente più efficiente,
    ma l'ho fatta ed allego il file.

    Si potrebbe implementare con un select case per aumentare il numero di righe da verificare.....
    ma ora..... devo dedicarmi ad altro

    di seguito il codice

    Fai sapere.

    Frank
    Codice: 
    Sub prova()
    
    Dim valore As String
    Dim ini_valore As String
    Dim num_righe As Integer
    Dim ur As Long
    Dim start As Long
    Dim fine As Long
    
    
    'la macro contempla la sola casistica in cui le righe vuote
    ' sono 2 oppure 3
    
    'ciclo le celle delle colonna A riga per riga fino alla 20 e verifico se vuota
    For r = 1 To 20
    
    'se vuota
        If Cells(r, 1).Value = "" Then
        
    'il numero di righe da riempire è = 0
        num_righe = 0
        
    'la prima riga da riempire è la corrente
        start = Cells(r, 1).Row
        
    'determina qual'è l'ultima riga da riempire
            Do While Cells(r, 1).Value = ""
                r = r + 1
                fine = Cells(r, 1).Row
            Loop
    ' e determina quante sono le righe da riempire
        num_righe = (fine - start)
        
    'cicla dalla prima riga da riempire all'ultima
          For n = start To fine
          
    'spezzo gli orari in colonna A, come se fossero un nome_file.estensione
    
                    valore = Right(Cells(r, 1).Value, 2)
                    ini_valore = Mid(Cells(r, 1).Value, 1, 6)
                    If Len(valore) = 1 Then valore = "0" & valore
                    If valore = "00" Then valore = "1" & valore
                    valore = Val(valore) - 2
                    valore = CStr(valore)
    
    'se le righe da riempire sono 2
    
                    'valore prima riga
                    Cells(start, 1).Value = ini_valore & valore
                    
                                  
                    valore = Val(valore) + 1
                    valore = CStr(valore)
                    If Len(valore) = 1 Then valore = "0" & valore
                    If valore = "00" Then valore = "1" & valore
                    ''valore seconda riga
                    Cells(fine - 1, 1).Value = ini_valore & valore
                    
    'se le righe da riempire sono 3
                    If num_righe = 3 Then
                        valore = Val(valore)
                        valore = CStr(valore)
                        If Len(valore) = 1 Then valore = "0" & valore
                        If valore = "00" Then valore = "1" & valore
                        Cells(fine - 3, 1).Value = ini_valore & valore - 2
                        Cells(fine - 2, 1).Value = ini_valore & valore - 1
                        Cells(fine - 1, 1).Value = ini_valore & valore
                    End If
           Next n
        End If
        
    ' passo alla riga successiva
    Next r
    End Sub
    File Allegati File Allegati
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  16. I seguenti utenti hanno dato un "Like"


  17. #13

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Citazione Originariamente Scritto da tanimon Visualizza Messaggio
    purtroppo non ho avuto il tempo di analizzare la macro di Cromagno ( ciao ) che sarà sicuramente più efficiente...
    Ciao tanimon,
    a dire il vero, ho dato per scontato che le righe vuote (da riempire) siano sempre 2
    Quindi direi che il tuo codice è già un passo avanti

    @robynud
    Se le righe vuote non hanno un numero preciso, si dovrebbe modificare il codice che ti ho proposto.... facci sapere.

    P.S.
    Hai detto:
    i vaolri di colonna A sono orari e le ultime due cifre sono millisecondi, quindi dovrebbe sottrarre -1 millisecondo
    ma nel formato in cui si presentano, quelli sono centesimi di secondo, infatti nel codice ho usato 100 anzichè 1000 come moltiplicatore/divisore e formattato i valori come "00" anzichè "000".
    Quindi, se sono realmente millisecondi, si dovrebbero correggere queste cose.

    P.P.S.
    con questa frase:
    mi ha fatto un pò dannare la formattazione...
    non mi riferivo al colore o al carattere del risultato, ma proprio al tipo di formattazione del valore....
    in pratica, mi restituiva sempre la virgola al posto del punto:

    così
    Codice: 
    00:16,74
    invece di
    Codice: 
    00:16.74

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  18. #14
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao Cromagno
    che ne dici di un select case num_righe
    nel ciclo for start to fine?

    O fare solamente il select case senza ciclo for?
    in fin dei conti sarebbero solo 3 casi...... sempre che Robynud non cambi di punto in bianco le regole del giochetto


    Citazione Originariamente Scritto da robynud Visualizza Messaggio
    ciao tanimon, grazie per la risposta, per quando riguarda le tuo domande:
    le celle vuote tra le piene le inserisco io con la macro inserisci righe e possono essere 1,2,3 in questo caso 2,
    i vaolri di colonna A sono orari e le ultime due cifre sono millisecondi, quindi dovrebbe sottrarre -1 millisecondo
    per quando riguarda il formato celle ho lasciato quello di defoult che cera nel foglio e i dati li importo da un file txt.
    ho considerato fino a tre righe, per questo messaggio al post #5


    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    in pratica, mi restituiva sempre la virgola al posto del punto:

    così
    Codice: 
    00:16,74
    invece di
    Codice: 
    00:16.74
    lo faceva anche a me probabilmente dipende dal txt dal quale vengono importati i dati
    ho risolto assegnando lato celle, il formato testo a tutta la colonna A

    ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  19. #15

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Citazione Originariamente Scritto da tanimon Visualizza Messaggio
    ciao Cromagno
    che ne dici di un select case num_righe
    nel ciclo for start to fine?
    in fin dei conti sarebbero solo 3 casi...... sempre che Robynud non cambi di punto in bianco le regole del giochetto
    Ciao Frank,
    mi era sfuggito il post dove specificava il numero di righe vuote
    Si, se sono al massimo 3 righe per volte, il "Select Case" andrà benissimo, altrimenti ci inventeremo qualcosa

    Ciao
    Tore

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  20. #16
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    aggiornamento senza ciclo for start to fine, ma con select case
    corretto codice per il caso in cui le righe da riempire siano 3
    funziona solo se le righe da riempire sono 2 oppure 3


    Allego file aggiornato ed ecco la macro:

    Codice: 
    Sub prova()
    
    Dim valore As String
    Dim ini_valore As String
    Dim num_righe As Integer
    Dim start As Long
    Dim fine As Long
    
    
    'la macro contempla la sola casistica in cui le righe vuote
    ' sono 2 oppure 3
    
    'ciclo le celle delle colonna A riga per riga fino alla 22 e verifico se vuota
    For r = 1 To 22 'ultima cella piena della colonna A
    
    'se vuota
        If Cells(r, 1).Value = "" Then
        
    'il numero di righe da riempire è = 0
        num_righe = 0
        
    'la prima riga da riempire è la corrente
        start = Cells(r, 1).Row
        
    'determina qual'è l'ultima riga da riempire
            Do While Cells(r, 1).Value = ""
                r = r + 1
                fine = Cells(r, 1).Row
            Loop
    ' e determina quante sono le righe da riempire
        num_righe = (fine - start)
        
    'cicla dalla prima riga da riempire all'ultima
          'For n = start To fine
          
          Select Case num_righe
    'spezzo gli orari in colonna A, come se fossero un nome_file.estensione
          Case 2
                    valore = Right(Cells(r, 1).Value, 2)
                    ini_valore = Mid(Cells(r, 1).Value, 1, 6)
                    If Len(valore) = 1 Then valore = "0" & valore
                    If valore = "00" Then valore = "1" & valore
                    valore = Val(valore) - 2
                    valore = CStr(valore)
    
    'se le righe da riempire sono 2
    
                    'valore prima riga
                    Cells(start, 1).Value = ini_valore & valore
                    
                                  
                    valore = Val(valore) + 1
                    valore = CStr(valore)
                    If Len(valore) = 1 Then valore = "0" & valore
                    If valore = "00" Then valore = "1" & valore
                    ''valore seconda riga
                    Cells(fine - 1, 1).Value = ini_valore & valore
                    
    'se le righe da riempire sono 3
          Case 3
                    If num_righe = 3 Then
                        valore = Right(Cells(r, 1).Value, 2)
                        ini_valore = Mid(Cells(r, 1).Value, 1, 6)
                        valore = Val(valore)
                        valore = CStr(valore)
                        If Len(valore) = 1 Then valore = "0" & valore
                        If valore = "00" Then valore = "1" & valore
                        Cells(fine - 3, 1).Value = ini_valore & valore - 3
                        Cells(fine - 2, 1).Value = ini_valore & valore - 2
                        Cells(fine - 1, 1).Value = ini_valore & valore - 1
                    End If
           
          End Select
           'Next n
        End If
        
    ' passo alla riga successiva
    Next r
    End Sub

    Spero non mi sia scappato qualcosa........

    ciao
    Frank
    File Allegati File Allegati
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  21. #17
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    questa porzione di codice
    Codice: 
    'determina qual'è l'ultima riga da riempire
            Do While Cells(r, 1).Value = ""
                r = r + 1
                fine = Cells(r, 1).Row
            Loop
    la preferisco così:

    Codice: 
    'determina qual'è l'ultima riga da riempire
            While Cells(r, 1).Value = ""
                r = r + 1
            Wend
    fine = Cells(r, 1).Row
    ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  22. #18
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ops, basta non leggervi un attimo che andate come un treno oggi pomerigio o stasera provo tutto e vi faccio sapere
    intanto vi ringrazio entrambi

  23. #19
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    bisogna fare, credo un'ultima modifica:
    mi sono accorto aadesso che se l'ultima coppia di cifre è compresa tra "01" e "02",
    sballa il conteggio.
    Bisogna correggere la riga per imputare il valore alla cella da riempire a seconda se le righe vuote sono 2 oppure 3
    ed esprimerlo in centinaia.
    Esempio se valore = "01" farlo = "101". Stessa cosa per "02".
    Se = "03" fino a "09", dovrebbe essere OK.

    Ci guardo appena trovo un pò di tempo.

    ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  24. #20
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao,
    allora provando la macro di cromagno effettivamente se ce una sola riga vuota non me la riempie, a funziona solo con 2 righe vuote,
    per quando riguarda la macro di tanimon funziona sia con due o tre e non con una sola, e ha lo stesso problema che aveva risolto cromagno con la sua macro, ossia al prima del valore 00:21.00 mi scrve 00:21.99 00:21.98 invece che 00:20.99 e 00:20.98, in piu se trova in numeri finali da 01 a 09 mi scala correttamente ma non mi mette lo 0 davanti, resto in attesa perche non saprei neanche da dove cominciare per mescolare le due macro

  25. #21

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Ciao,

    questo dovrebbe funzionare con qualsiasi numero di righe vuote:

    Codice: 
    Sub Orari_intermedi()
    Dim uRiga As Long, i As Long, x, y, z, Riga_Piena As Long, Righe As Long
    Dim min As Double, sec As Double, cent As Double, Tempo, j As Long
    
    
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    'uriga = 20  'visto che ci sono altri dati sotto quelli "utili"
    
    
    For i = 1 To uRiga
        If Cells(i, 1) = "" Then
            'cerco dove si trova la prossima cella con un valore
            For j = i To uRiga
                If Cells(j, 1) <> "" Then
                    Riga_Piena = j
                    Righe = j - i
                    Exit For
                End If
            Next j
            
            min = Mid(Cells(Riga_Piena, 1), 1, 2) * (60 * 100)
            sec = Mid(Cells(Riga_Piena, 1), 4, 2) * 100
            cent = Mid(Cells(Riga_Piena, 1), 7, 2) * 1
            
            For j = i To Riga_Piena - 1
                Tempo = (min + sec + cent) - Righe
                x = Tempo / (60 * 100)
                y = (x - Int(x)) * 60
                z = (y - Int(y)) * 100
                x = Format(Int(x), "00")
                y = Format(Int(y), "00")
                z = Format(z, "00")
                Cells(j, 1).Font.ColorIndex = 3
                Cells(j, 1).NumberFormat = "@"
                Cells(j, 1).Value = x & ":" & y & "." & z
                Righe = Righe - 1
            Next j
            i = Riga_Piena
        End If
    Next i
    
    
    End Sub
    La macro si trova nel Modulo4.
    File Allegati File Allegati

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  26. I seguenti utenti hanno dato un "Like"


  27. #22

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Citazione Originariamente Scritto da tanimon Visualizza Messaggio
    sicuramente più leggibile del mio
    Dici ???
    non ne son tanto sicuro... almeno tu hai messo le note.

    Comunque, alla fine era una questione di principio; ti eri intestardito con il "Select Case" ed il risultato è comunque quello voluto

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  28. #23
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    45
    Messaggi
    739
    Versione Office
    Excel 2010
    Likes ricevuti
    257
    Likes dati
    215

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ...ma se ti chiedessi di inserire il codice nel post?
    ...bah mi sa che l'hai aggiunto o non l"ho visto prima ;-)
    un saluto a tutti, in questi giorni faccio più da spettatore ;-)

    Saluti
    GG

    Inviato dal mio GT-I9105P utilizzando Tapatalk

  29. #24
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    e del tempo di esecuzione,
    che ne dici?

    Grande il Select Case

    il Tuo comunque funziona con il numero di righe variabili,
    il mio solo se le righe sono 2 oppure 3
    Frank

    ----------Post unito in automatico----------

    Citazione Originariamente Scritto da ggratis Visualizza Messaggio
    ...ma se ti chiedessi di inserire il codice nel post?
    Saluti
    GG

    Inviato dal mio GT-I9105P utilizzando Tapatalk
    ciao GG,
    eccolo:
    Codice: 
    Sub prova()
    
    Dim num_righe As Integer
    Dim start As Long
    Dim fine As Long, ur As Long
    Dim minuti As String, secondi As String, centesimi As String
    
    Application.ScreenUpdating = False
    
    ur = Range("a" & Rows.Count).End(xlUp).Row
    
    'la macro contempla la sola casistica in cui le righe vuote
    ' sono 2 oppure 3
    
    inizio = Timer
    
    
    'ciclo le celle delle colonna A riga per riga fino alla ultima e verifico se vuota
    
    For r = 1 To ur 'ultima cella piena della colonna A
    
    'se vuota
    If Cells(r, 1).Value = "" Then
        
    'il numero di righe da riempire è = 0
        num_righe = 0
        
    'la prima riga da riempire è la corrente
        start = Cells(r, 1).Row
        
    'determina qual'è l'ultima riga da riempire
            'Do While Cells(r, 1).Value = ""
            While Cells(r, 1).Value = ""
                r = r + 1
                
            'Loop
            Wend
            
    fine = Cells(r, 1).Row
    
    ' e determina quante sono le righe da riempire
        num_righe = fine - start
        
    'cicla dalla prima riga da riempire all'ultima
          'For n = start To fine
          
          Select Case num_righe
    
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''INIZIO CASE 2
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
          Case 2
                    
                    'spezzo gli orari in colonna A, come se fossero un nome_file.estensione
                    
                    minuti = Left(Cells(r, 1).Value, 2)
                    secondi = CStr(Mid(Cells(r, 1).Value, 4, 2))
                    centesimi = CStr(Right(Cells(r, 1).Value, 2))
                    
                    If Len(centesimi) = 1 Then centesimi = "0" & centesimi
                    
                        If centesimi = "00" _
                            Or centesimi = "01" _
                            Or centesimi = "02" Then
                            centesimi = "1" & centesimi
                                                   
                            ' numerizzo le stringhe
                            
                            secondi = Val(secondi)
                            centesimi = Val(centesimi)
                          
                        End If
                    
    
    'se le righe da riempire sono 2
    
                    'valore prima riga
                    
                    If centesimi = 100 _
                        Or centesimi = 101 _
                        And num_righe = 2 Then
                             centesimi = centesimi - (num_righe)
                             secondi = secondi - 1
                    ElseIf centesimi = 102 Then centesimi = centesimi - 2
                           centesimi = Right(centesimi, 2)
                    
                    Else
                             centesimi = centesimi - 2
                             If Len(centesimi) = 1 Then centesimi = "0" & centesimi
                    End If
                             secondi = CStr(secondi)
                             centesimi = CStr(centesimi)
                    Cells(start, 1).Value = minuti & "." & secondi & "." & centesimi
                    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''FINE CASE 2
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                                  
                    ''valore seconda riga
                    
                    centesimi = Val(centesimi) + 1
                    
                    If Len(centesimi) = 3 Then
                         centesimi = Right(centesimi, 2)
                         secondi = secondi + 1
                    Else
                         'centesimi = centesimi + 1
                    End If
                    
                    secondi = CStr(secondi)
                    centesimi = CStr(centesimi)
                    If Len(centesimi) = 1 Then centesimi = "0" & centesimi
                        
                    
                    Cells(fine - 1, 1).Value = minuti & "." & secondi & "." & centesimi
                    
    'se le righe da riempire sono 3
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''INIZIO CASE 3
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
          Case 3
                    
                    minuti = Left(Cells(r, 1).Value, 2)
                    secondi = CStr(Mid(Cells(r, 1).Value, 4, 2))
                    centesimi = CStr(Right(Cells(r, 1).Value, 2))
                                                    
    
    If Len(centesimi) = 1 Then centesimi = "0" & centesimi
                    
    If centesimi = "00" _
    Or centesimi = "01" _
    Or centesimi = "02" _
    Or centesimi = "03" Then
       centesimi = "1" & centesimi
                                                   
          ' numerizzo le stringhe
          secondi = Val(secondi)
          centesimi = Val(centesimi)
                          
    End If
            
      'valore prima riga
            If centesimi = 100 _
            Or centesimi = 101 _
            Or centesimi = 102 _
            And num_righe = 3 Then
          
                    centesimi = centesimi - (num_righe)
                    secondi = secondi - 1
            ElseIf centesimi = 103 Then centesimi = centesimi - 3
                   centesimi = Right(centesimi, 2)
                    
            Else
                centesimi = centesimi - 3
                If Len(centesimi) = 1 Then centesimi = "0" & centesimi
            End If
                             
                    secondi = CStr(secondi)
                    centesimi = CStr(centesimi)
                    Cells(start, 1).Value = minuti & "." & secondi & "." & centesimi
        
         ''valore seconda riga
                    
                    centesimi = Val(centesimi) + 1
                    
                    If Len(centesimi) = 3 Then
                         centesimi = Right(centesimi, 2)
                         secondi = secondi + 1
                    Else
                         'centesimi = centesimi + 1
                    End If
                    
                    secondi = CStr(secondi)
                    centesimi = CStr(centesimi)
                    If Len(centesimi) = 1 Then centesimi = "0" & centesimi
                    Cells(fine - 2, 1).Value = minuti & "." & secondi & "." & centesimi
                    
           ''valore terza riga
                    centesimi = centesimi + 1
                    
                    If Len(centesimi) = 3 Then
                         centesimi = Right(centesimi, 2)
                         secondi = secondi + 1
                    Else
                         'centesimi = centesimi + 1
                    End If
                    
                    secondi = CStr(secondi)
                    centesimi = CStr(centesimi)
                    If Len(centesimi) = 1 Then centesimi = "0" & centesimi
                    Cells(fine - 1, 1).Value = minuti & "." & secondi & "." & centesimi
                                             
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''FINE CASE 3
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
           
          End Select
           'Next n
        End If
        
    ' passo alla riga successiva
    Next r
    
    
    
    Application.ScreenUpdating = False
    alt = Timer
    MsgBox "secondi: " & " " & " " & alt - inizio
    
    End Sub
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  30. I seguenti utenti hanno dato un "Like"


  31. #25

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Ciao Frank,
    scusa ma il tuo post si era "sdoppiato" ed adesso non ne è rimasto nemmeno uno...

    Potresti riallegare il tuo file.

    Grazie e scusa.
    Tore

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  32. #26
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Ciao Tore,

    ecco di nuovo il file,
    nel modulo 2 c'è la tua macro con la quale ho fatto il test sul tempo di esecuzione rispetto alla mia nel modulo 1


    Frank
    File Allegati File Allegati
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  33. #27

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Forse, il mio codice si potrebbe velocizzare utilizzando delle matrici sulle quali fare i calcoli ed infine ricopiare solo i risultati.

    Purtroppo i "cicli su cicli" rallentano sempre un pò, e l'uso delle matrici è il metodo che uso più spesso per "tamponare".

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  34. #28
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Purtroppo i "cicli su cicli" rallentano sempre un pò, e l'uso delle matrici è il metodo che uso più spesso per "tamponare".
    Vero,
    ma come dicevo nel post che si è cancellato, l'importante è realizzare l'obiettivo

    Se non ho sbagliato qualcosa,
    sulle 47 righe del mio file la differenza di esecuzione tra le due macro è di circa 6 secondi e su 47 righe....... ci sta alla grande.
    Ma se Robynud ne avesse qualche migliaio?

    Comunque abbiamo fatto ed è cosa buona e giusta

    Buona notte
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  35. #29
    L'avatar di robynud
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Gardone Val Trompia
    Età
    45
    Messaggi
    155
    Versione Office
    Office 2016
    Likes ricevuti
    24
    Likes dati
    65

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao, rigrazio tutte e due per le due soluzioni, ho fatto un po di prove e quella di cromagno funziona in tutte le situazioni sia a 1 o piu celle vuote, l'ultima di tanimon non funziona con una cella vuota e ha un problema quando il tempo supera il minuto esatto, tipo se nella cella ho 01:00.00 mi mette sopra 01.-1.99 e 01.-1.98 e se ho 01:00.01 mi mette 01.0.00 e 01.-1.99.

  36. #30
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    258
    Versione Office
    Excel 2007
    Likes ricevuti
    36
    Likes dati
    4

    Re: Copiare valore da una cella e incolla nelle celle vuote sopra

    ciao
    ad inizio macro e' espressamente indicato che funziona solo se le righe sono due oppure tre.
    per l'altro problema, bisogna implementare il codice.....
    ma quella di Cromagno funziona.
    Quindi.....
    Ciao
    Frank
    Excel 2007 win7 - Ogni Progetto è composto da Micro Progetti: PRIMA risolvi quelli, e PRIMA raggiungi il completamento del Progetto!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

Discussioni Simili

  1. [Risolto] Se cella occupata, incolla valore nella cella sotto (da ripetersi per molte volte)
    Di Gatt88 nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 02/03/17, 13:49
  2. Risposte: 7
    Ultimo Messaggio: 03/01/17, 20:15
  3. [Risolto] Inserimento di una formula vlookup solo nelle celle vuote di in una colonna
    Di WANNABE nel forum Domande su Excel VBA e MACRO
    Risposte: 6
    Ultimo Messaggio: 20/10/16, 18:19
  4. Dati nelle celle vuote
    Di nick0573 nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 02/08/15, 16:01
  5. Celle vuote se valore cella = 0
    Di Ste nel forum Domande su Excel in generale
    Risposte: 8
    Ultimo Messaggio: 19/07/15, 20:37

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
  •