Ciao Bigigio,
dovrei risolvere un problema di questo tipo:
Ho creato un file excel con due fogli.
Nel secondo ho un range di 10 stagioni sportive. In ogni stagione sportiva si svolgono dei corsi che non sono uguali per tutti gli anni. In ogni corso inserisco dei dati.
Nel foglio1 si sceglie l'anno sportivo ed in base alla scelta si visualizzano le cifre relative ai corsi svolti in quell'anno.
Arrivo ora al problema che vorrei risolvere.
Come ho scritto prima, nelle diverse stagioni sportive ci sono dei corsi che si ripetono, altri che non vengono svolti sempre, altri ancora che sono presenti una sola volta.
Nel foglio uno io ho inserito l'elenco di tutti i corsi svolti nelle diverse stagioni sportive, per cui, a seconda dell'anno scelto, ci saranno delle righe che risulta senza nessun dato al loro interno.
Come faccio a nascondere le righe relative ai corsi non effettuati in quell'anno in modo tale da visualizzare solo quelli che presentano dei dati?
Spero di essere riuscito a spiegarmi correttamente.
Come faccio a caricarvi il file di esempio?
Per caricare un file di esempio, utilizza Microsoft OneDrive o DropBox e pubblica un link al file in una risposta qui.
Per caricare il file su DropBox, vedi:
https://www.dropbox.com/it/help/topics/sharing_files_and_folders
Per caricare il file su Microsoft OneDrive, vedi:
https://support.office.com/it-it/article/Condividere-file-e-cartelle-di-OneDrive-9fcc2f7d-de0c-4cec-93b0-a82024800c07
Nel frattempo, forse prova qualcosa del genere :
- Alt+F11 per aprire l'editor di VBA
- Alt+IM per inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range, rRow As Range
Dim LRow As Long
Dim CalcMode As Long
Const sFoglio As String = "Foglio1" '<<=== Modifica
Const sColonne As String = "A:K" '<<=== Modifica
Const sRigaIntestazioni As Long = 3 '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With SH
LRow = LastRow(SH) ', .Columns(sColonne))
Set Rng = Intersect(.Columns(sColonne), _
Rows(sRigaIntestazioni & ":" & LRow))
End With
For Each rRow In Rng.Rows
rRow.Hidden = Application.CountA(rRow) = 0
Next rRow
XIT:
With Application
.Calculation = CalcMode
.ScreenUpdating = True
End With
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, _
Optional minRow As Long = 1, _
Optional sPassword As String)
Dim bProtected As Boolean
With SH
If Rng Is Nothing Then
Set Rng = .Cells
End If
bProtected = .ProtectContents = True
If bProtected Then
.Unprotect Password:=sPassword
End If
End With
On Error Resume Next
LastRow = Rng.Find(What:="*", _
after:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
If bProtected Then
SH.Protect Password:=sPassword, _
UserInterfaceOnly:=True
End If
End Function
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensione xlsm
- Alt+F8 per aprire la finestra di gestione delle macro
- Seleziona Tester
- Esegui
===
Regards,
Norman
