È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Calcoli senza colonne di supporto,

Ultimo Aggiornamento: 26/02/2024 12:18
Post: 203
Registrato il: 03/09/2018
Città: GROTTAGLIE
Età: 25
Utente Junior
Microsoft Office Professional Plus 2019 64 bit
OFFLINE
24/02/2024 19:16

Buonasera a tutto il forum!
In allegato, un file esempio dove in base a come variano i parametri F2, G2, H2 e I2 ottengo dei risultati nelle celle K2, L2 e M2.
Questi risultati li ho ottenuti percorrendo due vie:
quella delle formule (foglio "CON FORMULE");
quella del VBA (foglio "CON VBA").
A me interessa capire come percorrere la strada del VBA ma senza dover realizzare colonne di supporto I, K, L e M come per il codice che ho scritto.
Io e gli array, nonostante me li abbia fatti conoscere Domenico tempo fa, non andiamo ancora d'accordo. 😭
Avrei bisogno di qualche altro esempio...
Grazie


[Modificato da Melissa2018 24/02/2024 19:24]
Post: 7.548
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
25/02/2024 08:24

Cieo Melissa in effetti tu vorresti eliminare le colonne I-K-M-L ma vorresti solamente i risultati "K2:L2", la prima cosa potresti anche tenerle le colonne ma dislocate in un altra posizione ad esempio incominciando da "AA".

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 3.751
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
25/02/2024 11:47

Thò...chi si sente!!! Come stai??

Una tiratina d'orecchie per l'indentatura del tuo codice!!!😁😂

Questo il codice da testare......Fossi in te cambierei il nome alla sub; excel in alcuni casi non apprezza l'uso di parole riservate alla programmazione

un caro saluto...byby
Sub VBA()
Dim I As Integer, K As Integer, ArrIKLM() As Double, arrAppo() As Double
Dim lr As Long, Idx As Integer, T As Double, T1 As Double, mMax As Double
Range("K2:M2").ClearContents
Range("I6:I39").ClearContents
Range("K6:M39").ClearContents
lr = Range("B" & Rows.Count).End(xlUp).Row
ReDim ArrIKLM(1 To lr - 5, 1 To 4) 'colonna I-K-L-M
ReDim arrAppo(1 To 1) ' serve per simulare dati formula colonna L
Idx = 1
For I = 6 To lr
    If Cells(I, 3) >= Cells(2, 7) And Application.WorksheetFunction.Sum(Range(Cells(I, 3), Cells(I, 6))) <= Cells(2, 8) Then
        If Cells(I, 6) - Cells(I, 4) <= Cells(2, 9) Then
            ArrIKLM(Idx, 1) = Cells(I, 2)
        Else
            ArrIKLM(Idx, 1) = 0
        End If
    End If

    If ArrIKLM(Idx, 1) = 1 Then
        ArrIKLM(Idx, 2) = Cells(2, 6) * (Cells(I, 10) - 1)
    ElseIf ArrIKLM(Idx, 1) = 0 Then 'Cells(I, 9) = 0 Then
        ArrIKLM(Idx, 2) = -Cells(2, 6)
    End If
    T = T + ArrIKLM(Idx, 2)
    ArrIKLM(Idx, 3) = T
    If I = 6 Then
        ArrIKLM(Idx, 4) = 0
        arrAppo(Idx) = ArrIKLM(Idx, 3)
    Else
        If mMax - ArrIKLM(Idx, 3) < 0 Then
            ArrIKLM(Idx, 4) = 0
            arrAppo(Idx) = ArrIKLM(Idx, 3)
        Else
            ArrIKLM(Idx, 4) = mMax - ArrIKLM(Idx, 3)
            arrAppo(Idx) = ArrIKLM(Idx, 3)
        End If
    End If
    Idx = Idx + 1
    mMax = Application.WorksheetFunction.Max(arrAppo())
    ReDim Preserve arrAppo(1 To Idx)
Next I
'Range("W6").Resize(UBound(ArrIKLM), 4) = ArrIKLM se togli l'apice verrà stampato da W in poi l'array contenente i valori delle tue IKLM ormai soppresse

With Application.WorksheetFunction
    Cells(2, 11) = .Sum(.Index(ArrIKLM, 0, 2))
    Cells(2, 12) = .Max(.Index(ArrIKLM, 0, 4))
    Cells(2, 13) = Cells(2, 11) / Cells(2, 12)
End With
End Sub
[Modificato da dodo47 25/02/2024 13:21]
Domenico
Win 10 - Excel 2016
Post: 203
Registrato il: 03/09/2018
Città: GROTTAGLIE
Età: 25
Utente Junior
Microsoft Office Professional Plus 2019 64 bit
OFFLINE
25/02/2024 21:06

Buonasera ragazzi!

Ciao Salvatore, in realtà volevo proprio non averle quelle colonne. Non per questione di "estetica" ma perché, siccome analizzo tantissimi dati,
queste me lo appesantiscono troppo oltre che farmi perdere molto tempo sia nell'attesa del calcolo automatico delle formule che per l'esecuzione del codice.

Caro Domenico, sull'indentazione hai proprio ragione, scusa!!! Aiuta moltissimo a leggere i codici, soprattutto quelli scritti da altri.
Purtroppo a volte, oltre che per pigrizia, copio ed incollo parti di codici e dimentico di sistemare tutto (sempre che abbia compreso davvero le regole dell'indentazione 😜). Scoprii però che ci sono anche add-in che possono farlo al posto mio
Circa l'uso delle parole riservate alla programmazione lo avevo notato perché mi era capitato in passato. Dovrò farci in futuro più attenzione.


Ti ringrazio per il tuo sempre preziosissimo contributo risolutore, sei il solito fenomeno! Il tuo codice ovviamente è perfetto, da studiare per carpire quelle chicche da custodire! Grazie!!!

Sai, in queste ore sono proprio entrata in fissa sugli array e ci ho sbattuto la testa, sebbene molto ancora non mi sia chiaro, sono riuscita a confezionare un codice (rozzo) grazie a cui realizzare ciò che volevo.💪
Te lo metto in allegato, se hai tempo, fammi sapere che ne pensi
Post: 3.753
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
26/02/2024 10:06

ciao
che dire....benissimo.
Tra l'altro è più conciso ovviamente perchè tu conosci il sottostante.
Inoltre hai fatto bene ad utilizzare array diversi, mentre io ne ho utilizzato solo 1 + 1 d'appoggio.

Piccola informazione: sei stata fortunata!!

Con questa riga:
Dim FATTORE(6 To 39), PUNTATA(6 To 39), sumpunt(6 To 39), dd(6 To 39) As Double

tu credi di aver dichiarato i 4 Array tutti Double....MA non è così. Solo l'ultimo è Double, i primi tre sono variant in quanto le variabili vanno dichiarate una per una.

E, come dicevo, sei stata fortunata perchè se li dichiari tutti double, il codice ti avrebbe creato problemi sia di tipo non corrispondente, sia soprattutto di calcoli.

Se il tuo sumpunt() fosse stato double avresti penato un bel po' a trovare il max, in quanto excel lo avrebbe inizialmente riempito di zeri e poichè ci vanno a finire numeri negativi, capisci bene che il max tra zero ed un numero negativo è zero.

Questo il motivo per il quale sono ricorso al mio arrAppo() che alimento di volta in volta.

Se hai dubbi...siamo qui

cari saluti e ancora complimenti



Domenico
Win 10 - Excel 2016
Post: 204
Registrato il: 03/09/2018
Città: GROTTAGLIE
Età: 25
Utente Junior
Microsoft Office Professional Plus 2019 64 bit
OFFLINE
26/02/2024 12:18

Buongiorno Domenico e grazie mille!🎁
Quando ti leggo imparo sempre tantissime cose, sei davvero una preziosissima fonte di conoscenza. 🙇‍♀️
Vota: 15MediaObject5,0026 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 18:56. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com