Inserimento dati su...
 
Notifiche
Cancella tutti

La consultazione del forum è libera per tutti.

Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).

Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.

[Risolto] Inserimento dati su intervallo

12 Post
4 Utenti
4 Reactions
334 Visualizzazioni
Forum 1
(@vrestu)
Post: 16
Eminent Member
Avviatore di Topic
 

Buongiorno a tutti, vi volevo chiedere un aiuto su un problema che non riesco a risolvere. Ho una tabella che allego in forma ridotta come esempio, e dove devo andare ad inserire un valore (tipo 0) per tutti i soggetti alla prima cella libera. Nel mio caso 0 dovrebbe essere inserito nell'intervallo F1:F5.

Grazie 

 

 

Versione di Excel
Sistema operativo
 
Postato : 18/09/2025 08:55
Alexps81
(@alexps81)
Post: 36
Eminent Member
 

Ciao @vrestu non è che sia molto chiaro ciò che chiedi. Da quel poco che ho capito (vedendo l'allegato però) sembra che tu voglia un "0" di fianco ad ogni prima cella libera. Ad esempio:

in riga 1 deve comparire in "E1"

in riga 2 deve comparire in "F2"

in riga 3 deve comparire in "C3"

in riga 4 deve comparire in "D4"

in riga 5 deve comparire in "E5"

chiaramente questo ragionamento va applicato per ogni riga compilata...giusto così?

Se così fosse prova questo codice e fammi sapere.

Option Explicit

Sub Riempi_cella()
    Dim i As Long

    For i = 1 To Foglio1.Cells(Rows.Count, "A").End(xlUp).Row
        Foglio1.Cells(i, (Foglio1.Cells(i, 1).End(xlToRight).Column) + 1) = 0
    Next i
End Sub

 

Questo post è stato modificato 3 settimane fa da Alexps81
 
Postato : 19/09/2025 21:07
Forum 1
(@vrestu)
Post: 16
Eminent Member
Avviatore di Topic
 

@alexps81 

Ciao, grazie per l'interessamento. Lo zero deve essere inserito nelle celle F1, F2, F3, F4, F5 perché nel mio intervallo l'ultima cella piena è E2. Probabilmente riflettendo sarebbe il caso di fare un ordine decrescente delle celle in base al numero di valori che porterebbe Antonio nella riga 1 e copiare magari il valore nelle celle sottostanti.

Questo post è stato modificato 3 settimane fa da vrestu
 
Postato : 20/09/2025 09:16
tanimon
(@tanimon)
Post: 46
Eminent Member
 

prova

Sub Riempi_cella()
    Dim i As Long, ucol As Long
    ucol = Foglio1.UsedRange.Columns.Count
        
    For i = 1 To Foglio1.Cells(Rows.Count, "A").End(xlUp).Row
        Foglio1.Cells(i, ucol + 1).Value = 0
    Next i
End Sub
 
Postato : 20/09/2025 09:37
Forum 1
(@vrestu)
Post: 16
Eminent Member
Avviatore di Topic
 

@tanimon 

Nel file allegato che è una versione ridotta con pochi nomi funziona benissimo. Lo testerò nel foglio completo e ti farò sapere.

Grazie

 
Postato : 20/09/2025 09:45
Forum 4
(@lukereds)
Post: 35
Eminent Member
 

ciao,

l'ho capita così con i dati che iniziano da A1

Sub zeri()
Dim rng As Range, c As Integer, i As Integer, r As Integer
Set rng = Range("A1").CurrentRegion
c = rng.Columns.Count + 1: r = rng.Rows.Count
Range(Cells(1, c), Cells(r, c)) = 0
End Sub
Questo post è stato modificato 3 settimane fa 4 tempo da LukeReds
 
Postato : 20/09/2025 09:54
Alexps81 and tanimon reacted
tanimon
(@tanimon)
Post: 46
Eminent Member
 

@Alexps81

ammesso e non concesso data la precisazione di Vestru che la tua interpretazione fosse corretta, la tua proposta a me va in Debug alla tua riga

Postato da: @alexps81

Foglio1.Cells(i, (Foglio1.Cells(i, 1).End(xlToRight).Column) + 1) = 0

 
Postato : 20/09/2025 10:00
Alexps81
(@alexps81)
Post: 36
Eminent Member
 

Ciao @vrestu, una volta che hai dichiarato che la soluzione offerta da @tanimon funziona come hai richiesto, tutto mi è tornato più chiaro. In realtà avresti dovuto chiedere di "ricavare l'ultima colonna in cui è presente un valore nell'intervallo indicato nel Foglio1 per poi scrivere uno "0" di fianco a quella colonna ad ogni rigo dell'intervallo stesso."

Per quanto riguarda la soluzione, quella di @tanimon svolge egregiamente quanto richiesto ma fai attenzione che se la struttura reale è identica a quella proposta da te in allegato allora continuerà a funzionare bene. Se invece, per ragioni che non conosciamo, ti ritrovi dei dati sparsi in altre colonne e che non centrano nulla con l'intervallo (ad esempio in colonna "R" hai altri dati ed è l'ultima colonna in cui ci sia un dato sul Foglio1), questa macro scriverà lo "0" in colonna "S", non so se mi sono spiegato?

In quel caso hai bisogno di una macro strutturata in modo diverso. Qualcosa del genere:

Sub Riempi_cella()
    Dim i As Long, uc As Long, uc2 As Long, ur As Long
    
    ur = Foglio1.Cells(Rows.Count, "A").End(xlUp).Row
    uc = Foglio1.Cells(1, "A").End(xlToRight).Column
    
    For i = 1 To ur
        uc2 = Foglio1.Cells(i, "A").End(xlToRight).Column
        If uc2 > uc Then uc = uc2
    Next i
    Foglio1.Range(Cells(1, uc + 1), Foglio1.Cells(ur, uc + 1)).Value = 0
End Sub

Qui andiamo a considerare la colonna "A" come punto di partenza. Scansioniamo ogni cella dal rigo 1 a scendere e preleviamo l'ultima colonna non vuota del rigo scansionato partendo dalla colonna "A" fintanto che le celle di fianco sono piene. Per intenderci se il rigo 1 ha "A1:D1" con valori e "G1" con un valore, il prelievo dell'ultima colonna si fermerà in "D1" perché tra "D1" e "G1" ci sono celle vuote e quindi non le considera.

Quindi per ogni rigo preleva l'ultima colonna come su descritto e la confronta con quella precedente. Se quella successiva è superiore alla precedente allora la prendiamo come riferimento come ultima colonna.

Alla fine applichiamo in un sol colpo gli "0" alla colonna interessata.

Per @tanimon (buongiorno anche a te), non so come mai la mia prima macro ti va in Debug al rigo segnalato. A me funziona e mette gli "0" di fianco a l'ultimo numero di ogni rigo. Poi va be'...non è quello che cercava l'utente ma questo è un altro discorso.

Ciao a tutti.

EDIT: non avevo notato la macro di @LukeReds, ecco onestamente tra le 2 preferisco la sua

Questo post è stato modificato 2 settimane fa da Alexps81
Questo post è stato modificato 2 settimane fa da gianfranco55
 
Postato : 20/09/2025 15:31
LukeReds reacted
Forum 1
(@vrestu)
Post: 16
Eminent Member
Avviatore di Topic
 

Ciao ragazzi, vi ringrazio tutti. Testerò le vostre soluzioni nel file completo al più presto e vi aggiornerò

 
Postato : 20/09/2025 17:13
Forum 1
(@vrestu)
Post: 16
Eminent Member
Avviatore di Topic
 

Buongiorno a tutti. Ho testato le soluzioni proposte e devo dire che funzionano tutte egregiamente. Avrei una domanda per @alexps81 che probabilmente ti sembrerà banale, ma non ho una conoscenza del VBA così approfondita: in base a quale parte del codice la ricerca si basa solo nella tabella di mio interesse senza andare a cercare in altre colonne come tu avevi fatto notare? "Se invece, per ragioni che non conosciamo, ti ritrovi dei dati sparsi in altre colonne e che non centrano nulla con l'intervallo (ad esempio in colonna "R" hai altri dati ed è l'ultima colonna in cui ci sia un dato sul Foglio1), questa macro scriverà lo "0" in colonna "S",". 

Grazie

Questo post è stato modificato 2 settimane fa 2 tempo da vrestu
 
Postato : 21/09/2025 11:48
Alexps81
(@alexps81)
Post: 36
Eminent Member
 

Ciao @vestru

nel codice:

Sub Riempi_cella()
    Dim i As Long, ucol As Long
    ucol = Foglio1.UsedRange.Columns.Count
        
    For i = 1 To Foglio1.Cells(Rows.Count, "A").End(xlUp).Row
        Foglio1.Cells(i, ucol + 1).Value = 0
    Next i
End Sub

succede che utilizzando Foglio1.UsedRange.Columns.Count stai chiedendo di restituire il numero di colonne utilizzate nel Foglio1. Perciò se ad esempio il tuo intervallo di celle che a te interessa inserire gli "0" può andare da "A1:G20" ma per qualsiasi motivo in "M1:P20" hai altri dati in quelle celle, allora Foglio1.UsedRange.Columns.Count restituirà 16 perché troverà in colonna "P" qualche dato in qualche cella.

In questo codice:

Sub zeri()
Dim rng As Range, c As Integer, i As Integer, r As Integer
Set rng = Range("A1").CurrentRegion
c = rng.Columns.Count + 1: r = rng.Rows.Count
Range(Cells(1, c), Cells(r, c)) = 0
End Sub

con Range("A1").CurrentRegion si va a definire un range che comprende tutte quelle celle che a partire da "A1" sono collegate tra loro. Ad esempio se in "A1", "B1", "C1", "D2", "F3" hai dei valori, allora grazie a Range("A1").CurrentRegion ti verrà restituito un range va comprende tutte quelle su descritte tranne "F3" perché non ha alcun collegamento con le altre celle, mentre "A1", "B1", "C1", "D2" sono confinanti tra loro.

A questo punto con c = rng.Columns.Count +1 si chiede di ricavare la somma (+ 1) delle colonne presenti appunto nel range definito con CurrentRagion

In questo codice:

Sub Riempi_cella()
    Dim i As Long, uc As Long, uc2 As Long, ur As Long
    
    ur = Foglio1.Cells(Rows.Count, "A").End(xlUp).Row
    uc = Foglio1.Cells(1, "A").End(xlToRight).Column
    
    For i = 1 To ur
        uc2 = Foglio1.Cells(i, "A").End(xlToRight).Column
        If uc2 > uc Then uc = uc2
    Next i
    Foglio1.Range(Cells(1, uc + 1), Foglio1.Cells(ur, uc + 1)).Value = 0
End Sub

C'è un ciclo che scorre dalla prima riga fino all'ultima compilata in colonna "A" e per ogni riga preleva l'ultima colonna compilata e la confronta con l'ultima colonna compilata nella riga precedente. Se è superiore allora considera quella come ultima colonna compilata. Esegue questo confronto fino alla fine e poi applica gli "0" nella colonna giusta.

 
Postato : 21/09/2025 21:30
vrestu reacted
Forum 1
(@vrestu)
Post: 16
Eminent Member
Avviatore di Topic
 

@alexps81 

Grazie

 
Postato : 22/09/2025 09:18
Condividi:
My Agile Privacy
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.
Attenzione: alcune funzionalità di questa pagina potrebbero essere bloccate a seguito delle tue scelte privacy
     Scarica il nostro ebook gratuito     

Unisciti a oltre 35.000 professionisti
che hanno già scelto di semplificare il proprio lavoro
e aumentare la produttività con la nostra newsletter!

Scarica l’ebook con i
migliori trucchi e suggerimenti per Excel
selezionati per te da Excel Academy

Download