Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Unione celle corrispondenti ad elenco nomi e calcolo valori (bis)

Ultimo Aggiornamento: 18/02/2024 17:16
Post: 160
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
17/02/2024 10:33

Buongiorno a tutti gli utenti del Forum
Spero di poter riproporre una nuova discussione ad integrazione di una trattata in passato e risolta.
In caso contrario, provvederò subito a cancellare la presente.

La presente discussione fa seguito a quella delle h. 22:18 del 7 Dicembre scorso, dal titolo: - “Unione celle corrispondenti ad elenco nomi e calcolo valori” risolta grazie al cortese supporto fornito da bysal e Federico460, che saluto.

Alla fine ho scelto la soluzione di bysal, che ho utilizzato con successo fino ad oggi.

Tuttavia si è determinata una mia ulteriore esigenza che formulerò in evidenza alla fine dell’esposizione

Il tema della discussione era:

Ho un foglio di lavoro con
in colonna 'H' dei nomi;
in colonna 'AA' delle cifre
in colonna 'AB' delle celle vuote da riempire sommando le cifre in ‘AA’ come da istruzioni a seguire

Esempio:

H6....Antonio AA6....€ 5,00 AB6....(vuota)
H7....Antonio AA7....€ 8,00 AB7....(vuota)
H8....Antonio AA8....€ 5,00 AB8....(vuota)
H9....Paolo AA9....€12,00 AB9....(vuota)
H10..Paolo AA10..€13,00 AB10..(vuota)
H11..Lello AA11..€ 2,00 AB11..(vuota)
H12..Lello AA12..€ 6,00 AB12..(vuota)
H13..Lello AA13...€ 4,00 AB13..(vuota)
H14..Lello AA14...€ 8,00 AB14..(vuota)
e così via fino ad H20000:AB20000

Vorrei una macro che:

A PARTIRE DALLA RIGA DA ME SELEZIONATA A SCENDERE (nell'esempio Riga 6, ma ogni volta sarà diversa) -
mi unisca - in COLONNA 'AB' - le celle corrispondenti a ciascuna sequenza di nomi presenti in colonna 'H'

esempio: il nome 'Antonio' è presente nelle celle H6,H7,H8
allora la macro mi unisce ed allinea al centro le celle AB6,AB7,AB8
e nella cella così unita mi sommi i valori presenti in AA6,AA7,AA8

successivamente: il nome 'Paolo' è presente nelle celle H9 e H10
allora la macro mi unisce ed allinea al centro le celle AB9 e AB10
e nella cella così unita mi sommi i valori presenti in AA9 e AA10

successivamente: il nome 'Lello' è presente nelle celle H11,H12,H13,H14
allora la macro mi unisce ed allinea al centro le celle AB11,AB12,AB13,AB14
e nella cella così unita mi sommi i valori presenti in AA11,AA12,AA13,AA14


La macro di bysal soddisfa appieno la mia richiesta (come da immagine allegata)

Il punto è che le cifre in colonna ‘AB’ risultano (ovviamente) definitive, anche se interviene un cambiamento delle cifre in colonna ‘AA’.
Ciò mi ha causato qualche problema

Vorrei sapere se è possibile modificare la macro (presente nel file in allegato e che copio/incollo a seguire) in modo che le cifre che restituisce si aggiornino al mutare dei dati che le hanno determinate (come se nella cella di riferimento ci fosse una formula)

Esempio: se in ‘AA12’ il valore dovesse cambiare da 2 a 4, il totale in ‘AB’ cambi automaticamente da 23 a 25

Spero di essere stato chiaro
Grazie
[Modificato da Anthony D'Acunto 17/02/2024 11:00]
Windows 10 - Excel LTSC
Post: 160
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
17/02/2024 10:35

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [h3:h20000]) Is Nothing Then
Rk = Target.Row
End If
End Sub




Option Explicit
Public Rk As Integer

Sub AB_Unisci_Celle_e_Calcola_Totali_Nomi()
'
' Scelta rapida da tastiera: NO
' Comando rapido           : YES ('TOTALI')
'
' Foglio di lavoro: SIMULATORE
' Descrizione_funzione: Unisci Celle e Calcola Valori dei dati relativi a ciascuna serie di Nomi
'
Dim Msg, Style, Title, Response
Msg = "Conferma Esecuzione Macro"
Style = vbYesNo + vbQuestion + vbDefaultButton2
Title = "Attenzione"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
Application.Run "PERSONAL.XLSB!AC_Rimozione"
Dim r, c, d, x, k, n

Application.DisplayAlerts = False
r = Cells(Rows.Count, 8).End(xlUp).Row
k = Cells(Rk, 8)
n = Cells(Rk, 27)
Range("AB" & Rk & ":AB" & r).UnMerge
Range("AB" & Rk & ":AB" & r).ClearContents
Range("AB" & Rk & ":AB" & r).Borders.LineStyle = xlNone
For x = Rk + 1 To r
  If Cells(x, 8) = k Then
    n = n + Cells(x, 27)
    Cells(x, 28) = ""
  Else
    Cells(x - 1, 28) = n
    n = Cells(x, 27)
    With Range("AB" & Rk & ":AB" & x - 1)
      .Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Borders(xlEdgeRight).LineStyle = xlContinuous
      .Borders(xlEdgeTop).LineStyle = xlContinuous
      .Borders(xlEdgeBottom).LineStyle = xlContinuous
      .Merge
      .VerticalAlignment = xlCenter
      .HorizontalAlignment = xlCenter
    End With
    Rk = x
    k = Cells(x, 8)
  End If
Next x
Cells(x - 1, 28) = n
With Range("AB" & Rk & ":AB" & x - 1)
  .Borders(xlEdgeLeft).LineStyle = xlContinuous
  .Borders(xlEdgeRight).LineStyle = xlContinuous
  .Borders(xlEdgeTop).LineStyle = xlContinuous
  .Borders(xlEdgeBottom).LineStyle = xlContinuous
  .Merge
  .VerticalAlignment = xlCenter
  .HorizontalAlignment = xlCenter
End With
Application.DisplayAlerts = True
End If
End Sub

[Modificato da by sal 17/02/2024 12:31]
Windows 10 - Excel LTSC
Post: 7.536
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
17/02/2024 12:37

Ciao, puoi intervenire rendendo sensibile alle modifiche la colonna "AA", in questo modo ogni volta che cambi un valore nella colonna "AA" viene lanciata la macro che aggiorna tutti i totali.
la prossima volta che inserisci del codice VBA inseriscilo selezionando tutto il codice poi usare il tag "</>" ed inserire "vb" al posto di "txt", ho provveduto io adesso.

Ciao By Sal (8-D
[Modificato da by sal 17/02/2024 12:39]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 162
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
17/02/2024 13:27

Re:

Ciao bysal, grazie per la risposta.


Scusami, ma non so come intervenire sulla colonna "AA" in modo che risulti sensibile alle modifiche come mi hai suggerito.


Inoltre, se come dici: - "ogni volta che cambio un valore nella colomma 'AA', viene lanciata la macro che aggiorna TUTTI i totali", potrebbe essere un problema, essendo il file originale di 20.000 righe e i totali svariate migliaia. 


Spero che esista la possibilità di una soluzione più 'localizzata' 😀







by sal, 17/02/2024 12:37:

Ciao, puoi intervenire rendendo sensibile alle modifiche la colonna "AA", in questo modo ogni volta che cambi un valore nella colonna "AA" viene lanciata la macro che aggiorna tutti i totali.
la prossima volta che inserisci del codice VBA inseriscilo selezionando tutto il codice poi usare il tag "</>" ed inserire "vb" al posto di "txt", ho provveduto io adesso.

Windows 10 - Excel LTSC
Post: 7.537
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
17/02/2024 16:32

Ciao considera queste 2 cose,

1° quante volte può succedere che cambi un valore
2° quando tempo occorre al lancio della macro per 20.000 righe

se le volte che cambi un valore sono poche, ed il tempo del lancio è poco, allora conviene usare il mio suggerimento.

altrimenti bisogna trovare un altro metodo.

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 163
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
17/02/2024 17:03

Re:
Quando operavo manualmente - inserendo in colonna 'AB' le formule di sommatoria valori - restavano, nelle celle, le formule che avevo inserito.
Ciò determinava, ovviamente, l'aggiornamento automatico dei totali riferito agli intervalli in cui andavo ad apportare modifiche (cambio cifre e, addirittura, eliminazione o aggiunta di righe nell'ambito degli stessi).
Questi i vantaggi dell'operatività manuale.

Gli svantaggi, ovviamente, consistevano nel dover procedere, ogni volta, ad una cinquantina di inserimenti di formule di sommatoria valori; da effettuare uno ad uno, essendo gli intervalli diversi tra loro per numero di righe.
Inserimenti manuali che la tua macro mi ha risparmiato 🙏

Se il VBA non comprende la possibilità che la macro lasci nella cella, in luogo del valore frutto della somma, la formula che restituisce quel valore, è preferibile lasciare le cose invariate.
Dovrò ricordarmi ad ogni modifica (in sostanza era questo il problema) di lanciare io la macro da un punto di partenza specifico (cosa che limita la sua esecuzione a poche centinaia di righe)

Pur ignorante totale di VBA, immaginavo di stare a chiedere qualcosa di non realizzabile, ma ci ho provato.
Non si sa mai.

Grazie sempre, bysal, del tuo supporto.



by sal, 17/02/2024 16:32:

Ciao considera queste 2 cose,

1° quante volte può succedere che cambi un valore
2° quando tempo occorre al lancio della macro per 20.000 righe

se le volte che cambi un valore sono poche, ed il tempo del lancio è poco, allora conviene usare il mio suggerimento.

altrimenti bisogna trovare un altro metodo.

Ciao By Sal (8-D




[Modificato da Anthony D'Acunto 17/02/2024 17:05]
Windows 10 - Excel LTSC
Post: 7.538
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
17/02/2024 17:07

Ciao Non hai risposto alle mie due domande,
niente è impossibile vi è sempre qualche soluzione, se mi indichi cosa vuoi fare esattamente, vediamo di trovare una soluzione.

Ciao By sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 164
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
17/02/2024 17:47

Re:
Ok, pardon

Domanda 1: quante volte può succedere che cambi un valore?

Risposta: Capita abbastanza spesso che io debba cambiare un valore.


Domanda 2: quando tempo occorre al lancio della macro per 20.000 righe?

Risposta: Almeno un paio di minuti!
Troppi, soprattutto in relazione alla frequenza con cui capitano le modifiche.


Domanda 3: se mi indichi cosa vuoi fare esattamente...

Vorrei che la macro che creasti per me e che ho allegato oggi e inserito nel file di esempio, continui a restituirmi, in colonna 'AB', la sommatoria dei valori in colonna 'AA' associati a ciascuna serie di nomi in colonna 'H'
Con la differenza che, invece del valore immodificabile, restituisca nella cella di riferimento sempre quel valore, ma con la formula che ha restituito quel valore
Come da immagine

Grazie

by sal, 17/02/2024 17:07:

Ciao Non hai risposto alle mie due domande,
niente è impossibile vi è sempre qualche soluzione, se mi indichi cosa vuoi fare esattamente, vediamo di trovare una soluzione.

Ciao By sal (8-D




Windows 10 - Excel LTSC
Post: 7.539
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
18/02/2024 09:58

Ciao Antony, eccoti la macro che fa il lavoro

Sub Nuova()
Dim Msg, Style, Title, Response
Dim r, c, d, x, k, n
Msg = "Conferma Esecuzione Macro"
Style = vbYesNo + vbQuestion + vbDefaultButton2
Title = "Attenzione"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
If Rk = 0 Then Rk = InputBox("Inserire la riga di partenza", "Partenza della Macro")
Application.DisplayAlerts = False
r = Cells(Rows.Count, 8).End(xlUp).Row
Range("AB" & Rk & ":AB" & r).UnMerge
Range("AB" & Rk & ":AB" & r).ClearContents
Range("AB" & Rk & ":AB" & r).Borders.LineStyle = xlNone
For x = 6 To r
  n = n + 1
  k = Cells(x, 8)
  If k <> Cells(x + 1, 8) Then
    Cells(x, 28).FormulaR1C1 = "=SUM(R[-" & (n - 1) & "]C[-1]:RC[-1])"
    With Range("AB" & x - (n - 1) & ":AB" & x)
      .Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Borders(xlEdgeRight).LineStyle = xlContinuous
      .Borders(xlEdgeTop).LineStyle = xlContinuous
      .Borders(xlEdgeBottom).LineStyle = xlContinuous
      .Merge
      .VerticalAlignment = xlCenter
      .HorizontalAlignment = xlCenter
    End With
    n = 0
  End If
Next x
Rk = 0
Application.DisplayAlerts = True
End If
End Sub


allora ho fatto in modo che inserisca la formula "SOMMA()" nella cella della colonna "AB" facendo riferimento allo stesso nominativo, a questo punto cambiando il valore nella colonna "AA" avrai sempre la somma aggiornata.

non ricordo l'altra volta perche doveva partire da un nominativo specifico, forse perche aggiungevi qualche riga? falsando tutti i valori successivi, ti ho messo un inputBox in cui inserire la riga di partenza in questo modo aggiorni solamente dalla riga indicata in basso, mi raccomando la riga e del primo nominativo uguale.

ma adesso che è la prima volta, ti chiederà la riga di partenza e devi dargli la riga del primo nominativo, nel tuo esempio la 6 cosi ti inserirà la formula Somma() per tutta la colonna "AB" cosi potrei cambiare a piacere i valori della colonna "AA" ed avere i totali aggiornati.

Ciao By Sal (8-D
[Modificato da by sal 18/02/2024 10:01]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 165
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
18/02/2024 11:16

Re:
Più che da un nominativo specifico, la macro partiva l'altra volta da una riga specifica (una riga da me selezionata).
Ciò per evitare che effettuasse la somma ogni volta dall'inizio (quindi - inutilmente e impiegando molto tempo - su celle ove erano già presenti i totali calcolati in precedenza).

L'ideale è che la macro effettui l'operazione di somma sempre e solo a partire da una riga a mia scelta.
Quindi che l'input box della riga da cui partire compaia ogni volta che lancio la macro e che questa effettui le operazioni di somma a partire da quella riga a scendere giù.

In tal modo l'operazione avviene di volta in volta solo sulle righe di nuova compilazione (poche centinaia), velocemente.

Per favore me la aggiusti così?🙏
Sarebbe perfetta
Grazie


by sal, 18/02/2024 09:58:

Ciao Antony, eccoti la macro che fa il lavoro

non ricordo l'altra volta perche doveva partire da un nominativo specifico, forse perche aggiungevi qualche riga? falsando tutti i valori successivi, ti ho messo un inputBox in cui inserire la riga di partenza in questo modo aggiorni solamente dalla riga indicata in basso, mi raccomando la riga e del primo nominativo uguale.

ma adesso che è la prima volta, ti chiederà la riga di partenza e devi dargli la riga del primo nominativo, nel tuo esempio la 6 cosi ti inserirà la formula Somma() per tutta la colonna "AB" cosi potrei cambiare a piacere i valori della colonna "AA" ed avere i totali aggiornati.

Ciao By Sal (8-D




[Modificato da Anthony D'Acunto 18/02/2024 11:17]
Windows 10 - Excel LTSC
Post: 7.540
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
18/02/2024 16:02

Ciao Antony basta eliminare o mettere un apostrofo all'inizio della riga 9 del codice sopra inserito, questa

If Rk = 0 Then Rk = InputBox("Inserire la riga di partenza", "Partenza della Macro")


quindi non funziona più l'inputbox
MA attenzione la riga che scegli deve essere l'inizio del nome, esempio

PAOLO
ANTONIO
ANTONIO
ANTONIO

devi scegliere il primo ANTONIO come partenza se parti dal secondo non lo inserisce nella formula della somma

Ciao By Sal (8-D
[Modificato da by sal 18/02/2024 16:08]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 166
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
18/02/2024 16:54

Re:
Ok, alla scelta della riga corrispondente al primo nome di una serie ci ero arrivato (era il criterio con cui utilizzavo con successo la macro precedente da mesi)
Grazie comunque della precisazione

Il problema è che la macro effettua il calcolo comunque dalla riga 6 e non dovrebbe farlo

Ti allego il file con 2315 righe compilate e con la riga 2294 evidenziata (corrispondente, in tal caso, al primo 'LELLO' della serie)

La macro dovrebbe iniziare il calcolo dalla riga 2294, giusto?

Invece comincia comunque dalla riga 6!

Nella macro precedente - quella che ho inviato ieri alle h.10:35 - non avveniva.


by sal, 18/02/2024 16:02:

Ciao Antony basta eliminare o mettere un apostrofo all'inizio della riga 9 del codice sopra inserito, questa

If Rk = 0 Then Rk = InputBox("Inserire la riga di partenza", "Partenza della Macro")


quindi non funziona più l'inputbox
MA attenzione la riga che scegli deve essere l'inizio del nome, esempio

PAOLO
ANTONIO
ANTONIO
ANTONIO

devi scegliere il primo ANTONIO come partenza se parti dal secondo non lo inserisce nella formula della somma

Ciao By Sal (8-D




Windows 10 - Excel LTSC
Post: 7.541
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
18/02/2024 17:04

Ciao Scusami colpa mia non ti ho fatto modificare anche la riga di partenza questa

For x = 6 To r

diventa

For x = RK to r


partiva sempre dalla riga 6

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 167
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
18/02/2024 17:16

Re:
Di colpe non ne hai, solo tanti meriti; non ultimo la pazienza.
Funziona perfettamente!
(Come sempre)
Grazie di tutto🙏
Un abbraccio



by sal, 18/02/2024 17:04:

Ciao Scusami colpa mia non ti ho fatto modificare anche la riga di partenza questa

For x = 6 To r

diventa

For x = RK to r


partiva sempre dalla riga 6

Ciao By Sal (8-D




Windows 10 - Excel LTSC
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
calcolo differenziato su 2 o più celle (6 messaggi, agg.: 24/08/2018 11:56)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:20. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com