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

Conta se la cella è in grassetto su varie colonne

Ultimo Aggiornamento: 16/08/2017 21:12
Post: 186
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
15/08/2017 18:10

Buon Ferragosto,
vorrei ottenere il conteggio delle celle in grassetto per singola colonna.
Per la sola colonna A ci sono arrivato cosi:
 Sub contaColonna() 
x = Range("A2").End(xlDown).Row 
y = Range("a2").End(xlDown).Column 
Uriga = Range("A2").End(xlDown).Row 
cf2 = Range("A1").Font.Bold 
cnt = 0 
For a = 2 To x 
For b = 1 To y Cells(a, b).Select 
df2 = Cells(a, b).Font.Bold 
If cf2 = df2 Then cnt = cnt + 1 
Next b 
Next a 
Range("A" & Uriga + 2) = "TOTALE  " & cnt 

End Sub

Ma se volessi avere il conteggio separato per colonna?

Grazie per l'aiuto.
[Modificato da BG66 15/08/2017 18:16]
BG66
Excel 2010
Post: 1.094
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
15/08/2017 20:34

ciao,
non riesco ad inserire il codice,
ti riallego il file ipotizzando che la riga 1 e la colonna A, siano le più compilate.


eccolo:
Sub contaPiùColonne()

'ipotizzando che la riga 1 e la colonna A, siano le più compilate:


Dim ur As Long, uc As Long
Dim cnt As Integer



ur = Cells(Rows.Count, "a").End(xlUp).Row
uc = Cells(1, Columns.Count).End(xlToLeft).Column

For colonna = 1 To uc
    cnt = 0
    For riga = 2 To ur
        
        If Cells(riga, colonna).Font.Bold = True Then
            cnt = cnt + 1
        End If
    
    Next riga
    Cells(ur + 2, colonna).Value = "TOTALE  " & cnt
Next colonna



End Sub



così secondo me è ancora meglio, non devi preoccuparti di
quale colonna è l'ultima e più compilata


Sub contaPiùColonne()

Dim ur As Long, uc As Long
Dim cnt As Integer

uc = ActiveSheet.UsedRange.Columns.Count

For colonna = 1 To uc
        ur = Cells(Rows.Count, colonna).End(xlUp).Row
        cnt = 0
        For riga = 2 To ur
        
                If Cells(riga, colonna).Font.Bold = True Then
                    cnt = cnt + 1
                End If
    
        Next riga
        Cells(ur + 2, colonna).Value = "TOTALE  " & cnt
Next colonna



End Sub

ciao
Frank
[Modificato da tanimon 15/08/2017 21:11]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 186
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
16/08/2017 06:35

[SM=g27811]
Ciao Frank,
grazie per l'aiuto.

Aggiunta post-test:
Ora voglio provare ad evitare che nel lanciare una seconda volta la macro mi venga scritto il totale anche nelle colonne dove è già presente.

Ci aggiorniamo presto.
[Modificato da BG66 16/08/2017 07:21]
BG66
Excel 2010
Post: 1.097
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
16/08/2017 07:59

ciao,
sto scrivendo da lavoro e non ho la possibilità di scaricare il file
per testarla ma devi inserire una condizione al posto della riga che valorizza il toltale.

se left(cells(ur,colonna),6) = "TOTALE" Poi
non fare niente
altrimenti
cells(ur + 2, colonna).value = "TOTALE " & cnt
fine se


ciao
Frank
[Modificato da tanimon 16/08/2017 09:11]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 187
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
16/08/2017 18:49

Ciao Frank,
l'aggiunta funziona solo per la colonna A, in pratica se cancelli la cella contenente il totale in questa colonna la macro la rimpiazza ma se cancelli nella colonna B -> non ri-scrive il valore.
 If Left(Cells(ur, colonna), 6) = "TOTALE" Then         
           Exit Sub         
         Else         
           Cells(ur + 2, colonna).Value = "TOTALE" & "   " & cnt  
       End If


Io, invece, stavo percorrendo una strada diversa.
Ossia cercare "TOTALE" nelle celle per poi cancellare l'intera cella ma mi sono scontrato con il fatto che la cella è composita e quindi non viene riconosciuta.
 Option Explicit  
Sub CancellaCella()  
Dim cella As Range  
For Each cella In [A2:B100]  
If cella.Value = "TOTALE" Then cella.ClearContents  
Next cella  
End Sub


Hai voglia di indicarmi come sistemare entrambe.
Ovviamente basterebbe sistemare solo la tua ma vorrei comunque capire come,immagino con LEFT, possa far funzionare anche il pezzettino sviluppato in autonomia.

Grazie in anticipo
[Modificato da BG66 16/08/2017 19:06]
BG66
Excel 2010
Post: 1.098
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
16/08/2017 20:17

ciao BG,

ti riallego il tuo file nel quale ti ho messo i commenti
che ho ritunuto opportuni.

Mi sembra faccia TUTTO quello che hai chiesto:
dacci un'occhiata e fai sapere.


Ciao
Frank

[Modificato da tanimon 16/08/2017 20:18]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 188
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
16/08/2017 21:02

Ciao Frank,
grazie mille.
Per rendere fruibile l'aiuto anche ad altri utenti interessati, allego le tue soluzioni
a) Script finale di Frank:
Sub contaPiùColonne()

Dim ur As Long, uc As Long
Dim cnt As Integer
uc = ActiveSheet.UsedRange.Columns.Count

For colonna = 1 To uc
        ur = Cells(Rows.Count, colonna).End(xlUp).Row
        
        'verifica se il totale è già presente
        
        If Left(Cells(ur, colonna), 6) = "TOTALE" Then
        
            'l'ultima riga ora è quella del TOTALE e la pulisce
            Cells(ur, colonna).ClearContents
            
            ' e cancellandolo per il lancio successivo della macro,
            'definisce la nuova ultima riga
            ur = Cells(Rows.Count, colonna).End(xlUp).Row
        End If
        
' e prosegue
        
        cnt = 0
        For riga = 2 To ur
        
                If Cells(riga, colonna).Font.Bold = True Then
                    cnt = cnt + 1
                End If
    
        Next riga
        
        ' qui ur è correttamente l'ultima piena e può
        'fare ur + 2 per il TOTALE
        
        If Left(Cells(ur, colonna), 6) = "TOTALE" Then
        ' se la condizione nella riga precedente è vera, non deve fare niente!
        'Quindi non scrivi NESSUNA ISTRUZIONE!!!
        'Se gli dici di uscire dalla Sub, nel caso la condizione sia vera,
        'non andrà MAI a fare il conteggio sulla colonna successiva
        'perchè non arriverà al Next colonna.
        
        Else
        Cells(ur + 2, colonna).Value = "TOTALE" & "   " & cnt
    End If

Next colonna

End Sub


b) Sistemazione CancellaCella
 Sub CancellaCella()

Dim cella As Range

For Each cella In [A2:B100]
    If Left(cella.Value, 6) = "TOTALE" Then cella.ClearContents
Next cella

End Sub


Alla prossima.
BG66
Excel 2010
Post: 1.099
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
16/08/2017 21:12

ciao BG,

[SM=x423028]


Ciao
Frank









Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Vota: 15MediaObject5,0028 2
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]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:07. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com