Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao tango48,
Salve, ho un file excel dove sono presenti 1000 codici e per ogni codice sono presenti diverse quantità, dovrei modificare il file in modo che una casella dove è presente un certo valori riporti sempre 1 e dove la casella è vuota venga riportato lo 0.
Oltre all'ottimo suggerimento di Gianfranco, se vuoi modificare i dati esistenti in situ o vuoi creare una nuova tabella statica senza formule, puoi fare come segue:
- 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 [1]:
'========>>
Option Explicit
'-------->>
Public Sub Tester()
Dim WB As Workbook
Dim srcSH As Worksheet, destSH As Worksheet
Dim srcRng As Range, destRng As Range
Dim arrIn As Variant
Dim i As Long, j As Long
Dim LRow As Long
Const sFoglio\_Sorgente As String = **"Foglio1" '<<=== Modifica**
Const sFoglio\_Destinazione As String = **"Foglio2" '<<=== Modifica**
Const sColonne\_Tabella As String = **"A:F" '<<=== Modifica**
Const iPrima\_Riga\_Tabella As Long = **5 '<<=== Modifica**
Const sDestinazione As String = **"A2" '<<=== Modifica**
Set WB = ThisWorkbook
With WB
Set srcSH = .Sheets(sFoglio\_Sorgente)
Set destSH = .Sheets(sFoglio\_Destinazione)
End With
With srcSH
LRow = LastRow(srcSH, .Columns("A:A"))
Set srcRng = .Range(sColonne\_Tabella).Resize(LRow - iPrima\_Riga\_Tabella + 1).Offset(iPrima\_Riga\_Tabella - 1)
End With
Set destRng = destSH.Range(sDestinazione)
arrIn = srcRng.Value
For i = 1 To UBound(arrIn)
For j = 3 To UBound(arrIn, 2)
If IsNumeric(arrIn(i, j)) Then
arrIn(i, j) = IIf(arrIn(i, j) > 0, 1, 0)
End If
Next j
Next i
With destRng
.CurrentRegion.ClearContents
.Resize(UBound(arrIn), UBound(arrIn, 2)).Value = arrIn
End With
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, \_
Optional minRow As Long = 1)
If Rng Is Nothing Then
Set Rng = SH.Cells
End If
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
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
**[1]**A causa di un problema con l'attuale editor del forum, che inserisce righe vuote indesiderate nel codice copiato dal forum, suggerirei di copiare il mio codice direttamente dal mio file di prova Tango20220615.xlsm
===
Regards,
Norman