Condividi tramite

Copia valore di una cella nella prima cella vuota precedente

Anonimo
2015-08-13T14:17:42+00:00

Salve mi trovo in un folgio xls una tbl con 3 colonne e n righe di questo tipo:

Bianchi 150 150
Rossi 100
Rossi 100
Rossi 100 300

il valore della terza colonna riporta il subtotale, ad ogni cambio di quanto contenuto nella colonna 1, dei volori riportati nella B (quindi per Bianchi 150 e per Rosso 300).

Il mio problema è che dovrei copiare il valore del subtotale riportato nella colonna 3 su ogni riga "precedente" e vuota (nella tbl sopra il 300 deve essere copiato anche nelle due celle superiori vuote).

Ho provato:

    For Each cella In rng

      With cella

        If .Value = "" Then

          .NumberFormat = .Offset(-1).NumberFormat

          .Value = .Offset(-1).Value

        End If

      End With

      Next

in questo modo mi copia il 150 nelle righe sotto... Esiste la possibilità di eseguire il ciclo for partendo dal fondo del range? o una soluzione alternativa?

Grazie

Nixio

Microsoft 365 e Office | Excel | Per la casa | Windows

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
2015-08-13T14:53:29+00:00

Ciao Nixio,

Prova qualcosa del genere:

'=========>>

Option Explicit

'--------->>

Public Sub Tester()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim Rng As Range, Rng2 As Range, rCell As Range

    Dim i As Long

    Set WB = ActiveWorkbook '<<==== Modifica

    Set SH = WB.Sheets("Foglio1")                        '<<==== Modifica

    Set Rng = SH.Range("A1:C20")                   '<<==== Modifica

    Set Rng2 = Rng.Columns(3).Cells

    For i = Rng2.Cells.Count To 1 Step -1

        With Rng2.Cells(i)

            If IsEmpty(.Value) Then

                .Value = .Offset(1).Value

                .NumberFormat = .Offset(1).NumberFormat

            End If

        End With

    Next i

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-08-14T10:05:37+00:00

    Ciao Nixio,

    Buongiorno Norman e grazie per il prezioso consiglio

    Grazie a te, Nixio, del cortese riscontro.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-08-14T07:48:51+00:00

    Buongiorno Norman e grazie per il prezioso consiglio

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-08-13T21:52:36+00:00

    Ciao Nixio,

    Grazie molto ultile!

    Mi fa piacere!

    Ho modificato 

    Set Rng = SH.Range("A1:C20")

    in quanto non conosco l'ultima riga del mio foglio.

    Ho inserito

    ultimariga = Sheets("Foglio1").Range("A65000").End(xlUp).Row

    e modificato Set Rng con:

    Set Rng = SH.Range("A1:C" & ultimariga)

    Complimenti, hai fatto molto bene! Comunque, dato che, da Excel 2007 in poi, il numero di righe disponibili equivale a 2 ^ 20, per rendere il codice più flessibile potresti provare qualcosa del genere:

        With SH

            UltimaRiga = .Cells(Rows.Count, "A").End(xlUp).Row

            Set Rng = .Range("A1:C" & UltimaRiga)

        End With

    In alternativa,  se le celle accanto alla tabella, nella colonna successiva, fossero vuote e ci fosse almeno  una riga vuota al fondo della tabella, potresti definire l'intervallo della tabella così:

            Set Rng = SH.Range("A1").CurrentRegion

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-08-13T15:42:03+00:00

    Grazie molto ultile!

    Ho modificato

    Set Rng = SH.Range("A1:C20")

    in quanto non conosco l'ultima riga del mio foglio.

    Ho inserito

    ultimariga = Sheets("Foglio1").Range("A65000").End(xlUp).Row

    e modificato Set Rng con:

    Set Rng = SH.Range("A1:C" & ultimariga)

    Grazie ancora Norman!

    Nixio

    La risposta è stata utile?

    0 commenti Nessun commento