Ciao Desirée,
In realtà le condizioni sono più di quelle che ho scritto..
E vorrei usare questa procedura per dei colleghi che non sanno usare excel. In questo modo, premendo un tasto hanno la possibilità di completare il file senza il mio aiuto
Se la tua intenzione fosse quella di semplificare la formula che i tuoi utenti dovevano immettere, potresti sfruttare la seguente UDF (funzione utente):
- 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 Function Mio_Se(rCella As Range) As Variant
Dim Rng As Range, rCell As Range
Dim arrSottratti As Variant, arrParoli As Variant
Dim Res As Variant, Res2 As Variant
Const sParoli As String = \_
**"Angelo,Benjamino,tovaglia,Claudia,runner,Davide,Elio,Frederica,Giorgio,strofinaccio" '<<=== Modifica**
Const sValori\_Sottratti As String = **"1,2,3,4,5,6,7,8,9,10" '<<=== Modifica**
Const dValore\_Iniziale As Double = **10 '<<=== Modifica**
Application.Volatile
arrParoli = Split(sParoli, ",")
arrSottratti = Split(sValori\_Sottratti, ",")
With rCella
Res = Application.Match(.Value, arrParoli, 0)
If Not IsError(Res) Then
Mio\_Se = CDbl(arrSottratti(Res - 1)) - rCella.Offset(1, 2).Value
Else
Mio\_Se = vbNullString
End If
End With
End Function
'<<========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel.
- Salva il file con l'estensione xlsm
Se, tuttavia, desideri che queste formule semplificate vengano inserite automaticamente in risposta al clic su un pulsante, prova 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:
'========>>
Option Explicit
Public Sub Tester()
Dim Rng As Range, rCell As Range
Dim Res As Variant
On Error Resume Next
Set Rng = Application.InputBox(Prompt:="Seleziona l'intervallo da compilare con formula", Title:="INTERVALLO FORMULE", Type:=8)
On Error GoTo 0
On Error Resume Next
Set Rng = Application.InputBox(Prompt:="Seleziona l'intervallo da compilare con formula", Title:="INTERVALLO FORMULE", Type:=8)
On Error GoTo 0
If Not Rng Is Nothing Then
Rng.Formula2R1C1 = "=Mio\_Se(RC[-4])"
Else
Call MsgBox(Prompt:="Non hai selezionato l'intervallo da riempire!", \_
Buttons:=vbCritical, \_
Title:="PROBLEMA!")
End If
End Sub
'-------->>
Public Function Mio_Se(rCella As Range) As Variant
Dim Rng As Range, rCell As Range
Dim arrSottratti As Variant, arrParoli As Variant
Dim Res As Variant, Res2 As Variant
Const sParoli As String = \_
**"Angelo,Benjamino,tovaglia,Claudia,runner,Davide,Elio,Frederica,Giorgio,strofinaccio" '<<=== Modifica**
Const sValori\_Sottratti As String = **"1,2,3,4,5,6,7,8,9,10" '<<=== Modifica**
Const dValore\_Iniziale As Double = **10 '<<=== Modifica**
Application.Volatile
arrParoli = Split(sParoli, ",")
arrSottratti = Split(sValori\_Sottratti, ",")
With rCella
Res = Application.Match(.Value, arrParoli, 0)
If Not IsError(Res) Then
Mio\_Se = CDbl(arrSottratti(Res - 1)) - rCella.Offset(1, 2).Value
Else
Mio\_Se = vbNullString
End If
End With
End Function
'<<========
- Assegna la procedura Tester al pulsante
- Alt+Q per chiudere l'editor di VBA e tornare a Excel.
- Salva il file con l'estensione xlsm
Potresti scaricare il mio file di prova Desiree20221208.xlsm
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.
===
Regards,
Norman
