| | 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 | |
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,
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... |
|
|