Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

vba Excel sostituire funzione

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba Excel sostituire funzione

Postdi Francesco53 » 11/12/18 19:01

Un saluto a tutto il Forum, avrei la necessità di sostituire in una macro excel la seguente funzione:

Codice: Seleziona tutto
Application.WorksheetFunction.Count(ColW())

Come potrei fare per ottenere il valore ColW() senza l'uso della suddetta funzione?
Ringrazio chi può darmi un aiuto,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: vba Excel sostituire funzione

Postdi Anthony47 » 11/12/18 19:48

Come potrei fare per ottenere il valore ColW() senza l'uso della suddetta funzione?
ColW(), nell'istruzione, e' il parametro passato alla funzione Count; insomma ColW deve essere gia' stato compilato prima, e probabilmente non contiene un "valore".
Insomma non capisco bene la questione che poni.
Puoi pubblicare l'intero codice di cui parli e spiegare cosa vorresti ottenere o variare?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba Excel sostituire funzione

Postdi Francesco53 » 12/12/18 15:22

Ciao Anthony, è una funzione che avevi creato tu, io volevo tramite altra forma di codice evitare due righe
che non riesco a realizzare:

Codice: Seleziona tutto
Function comb3(k)
'Variante che lavora con Col2() e Col3
'Sviluppo Ridotto
'non richiede COL2() alla dimensione max teorica, perche' usa redim preserve a step di 100

col(k) = col(k - 1)
While col(k) < n - r + k
    col(k) = col(k) + 1
    If k < r Then
        comb3 (k + 1)
    Else
        nr = nr + 1
       
       For I = 1 To 100      'Azzera Col3()    >1<
            Col3(I - 1) = ""
        Next I
        For I = 1 To r        'riposiziona Col in Col3
'            Col2(nr - 1, I - 1) = col(I)
            Col3(col(I) - 1) = col(I)
        Next I
        FlEx = False
        For I = 1 To nr - 1 'N° righe in Col2
            If nr < 2 Then Exit For
            ColW() = Col3()        'copia Col3 in ColW
            For J = 1 To r   'Aggiungi in ColW la seq presente con Col2(riga 1 to nr)
                ColW(Col2(J - 1, I - 1) - 1) = Col2(J - 1, I - 1)
            Next J
'ColW() = Range("Z1:Z100")  '>>>
'Range("I5:R5") = Col3()    '>>>
'Range("I6:R6") = ColW()    '>>>
'[h6] = Application.WorksheetFunction.Count(ColW())   '>>>
            If Application.WorksheetFunction.Count(ColW()) < kRid Then
                FlEx = True: nr = nr - 1: Exit For
            End If
        Next I
        If FlEx = False Then
            J = 0
            For I = 1 To 100  'trasferisci da Col3 a Col2(riga nr)
                If Val(Col3(I - 1)) > 0 Then
                Col2(J, nr - 1) = Col3(I - 1): J = J + 1
                End If
                If J >= r Then Exit For
            Next I
If nr >= RedStep - 5 Then
    RedStep = RedStep + 100
    ReDim Preserve Col2([B2], RedStep)
End If
[N1] = nr
DoEvents
        End If
    End If
'DoEvents
Wend

End Function


le parti che vorrei modificare sono le seguenti:

Codice: Seleziona tutto
ColW() = Col3()        'copia Col3 in ColW


io pensavo di sostituire con un ciclo di lettura e scrittura tra le due matrici, ma non riesco.

Il secondo è come leggere il valore di:

Codice: Seleziona tutto
Application.WorksheetFunction.Count(ColW()


senza utilizzare Application.WorksheetFunction.Count

Grazie per l'interessamento
francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Re: vba Excel sostituire funzione

Postdi Anthony47 » 13/12/18 01:19

La Function comb3(k) e' una recursiva, cioe' richiama se stessa fino al completamento di una specifica operazione; in genere si tratta di combinazione di valori, con o senza ripetizioni.
Se una macro fa un compito specifico, una recursiva e' la radice N-esima del compito specifico, cioe' una cosa esattamente tarata sul compito.
Insomma se si cambia un ingranaggio difficilmente si ottiene lo stesso risultato.

Non ricordo l'intero codice che hai postato, dovrebbe far parte di uno sviluppo di combinazioni con riduzione; magari se spieghi l'intero problema riesco a farmi un'idea…

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba Excel sostituire funzione

Postdi Francesco53 » 13/12/18 12:13

Buongiorno Anthony,
si la funzione far parte di uno sviluppo di combinazioni con riduzione.
Quello che chiedevo e se si può realizzare la Function comb3(k)
sostituendo un linguaggio vb senza la funzione Application.WorksheetFunction.Count.
Esempio ho risolto la riga ColW() = Col3() con questo codice:
Codice: Seleziona tutto
For rr = 0 To UBound(Col3())
    m = Col3(rr)
    ColW(rr) = m
Next rr

e funziona, ma non so come superare l'altro ostacolo:
la WorksheetFunction.Count.
Spero di essere riuscito a far capire la mia richiesta,
grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Re: vba Excel sostituire funzione

Postdi Anthony47 » 13/12/18 17:47

Ok, quindi il problema e' che non hai la classe WorksheetFunction perche' non lavori in Excel…

Allora devi fare anche qui un loop, del tipo:
Codice: Seleziona tutto
For I = LBound(ColW) To UBound(ColW)
    If ColW(I) <> "" Then
        CWCnt = CWCnt + 1
    End If
Next I

La variabile CWCnt, che e' bene diciararla "as Long", alla fine conterra' il numero di celle non vuote della matrice ColW

In funzione di come viene comppilata ColW e di come e' dichiarata si potrebbe accorciare il ciclo, ad esempio uscendo dal loop alla prima cella vuota, se la compilazione e' sempre dall'inizio a crescere:
Codice: Seleziona tutto
    If ColW(I) <> "" Then
        CWCnt = CWCnt + 1
    Else
        Exit For
    End If


Quanto alla istruzione ColW()=Col3(), ma e' proprio necessario risolverlo con il loop? Se Si, allora ricorda che potresti semplificarlo in
Codice: Seleziona tutto
For rr = 0 To UBound(Col3())
    ColW(rr) = Col3(rr)
Next rr

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 16453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba Excel sostituire funzione

Postdi Francesco53 » 14/12/18 12:51

Ciao Anthony, ti ringrazio per le tue indicazioni, sono sempre perfette.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45


Torna a Applicazioni Office Windows


Topic correlati a "vba Excel sostituire funzione":


Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti