Condividi:        

invece mi da falso

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

invece mi da falso

Postdi giorgioa » 08/10/23 16:14

Salve

For i = 1 To i
For j = 1 To 90 '
Cells(3 + i, 79 + j).Value = Application.WorksheetFunction.Count(Range(Cells(3 + i, 54), Cells(i + 79))) = Cells(1, 80).Value
Next j
Next i

in rigo 3 da colonna bc:ca se ci sono numeri uguali del rigo 1 80 da colonna cb fanne la somma
cells(1,80).value i numeri da cercare e contare

però mi accorgo ora che si deve stabilire min quanti lo dico io adesso (>=3)

qualcuno disposto ad aiutarmi
ripeto bc:ca se numeri >=3 uguali che corrisondono al numero di cb1
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Sponsor
 

Re: invece mi da falso

Postdi Anthony47 » 08/10/23 16:49

Ci sono almeno 3 errori nella riga che contiene WorksheetFunction.Count, ma per capire cosa rispondere servirebbe sapere che look hanno i tuoi dati e che cosa vuoi calcolare e dove vuoi scriverlo

Per i dati basterebbe anche una immagine
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: invece mi da falso

Postdi giorgioa » 08/10/23 17:01

Salve,

il risultato se il numero è presente almeno 3 volte va nella cella cb4 e per 90 celle,
il numero da contare sta nella riga cb1:fm1
e deve essere presente nella riga da bc4:ca4
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: invece mi da falso

Postdi giorgioa » 08/10/23 19:54

un'ultima osservazione: non è quanti numeri di quel numero, ma quel numero nella riga 1.

Sotto il link per accedere all'immagine excel

https://1drv.ms/i/s!AoUgxEWS5dZ8gyGHsxn ... 8?e=fBbdPw
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: invece mi da falso

Postdi Anthony47 » 08/10/23 23:20

Visto il look dei dati, la mia proposta:
Codice: Seleziona tutto
Sub Baam()
Dim I As Long, J As Long, ValMin As Long
Dim oArr(), ValIn As Long, oInd As Long
'
ValMin = Range("CB2").Value                 '<<< Dove trovo scritto il Min valore
'
ReDim oArr(1 To Cells(Rows.Count, "BC").End(xlUp).Row - 3, 1 To 90)
For I = 4 To Cells(Rows.Count, "BC").End(xlUp).Row
    oInd = oInd + 1
    For J = 1 To 90
        ValIn = Application.WorksheetFunction.CountIf(Cells(I, "BC").Resize(1, 25), J)
        If ValIn >= ValMin Then
            oArr(oInd, J) = J
        End If
    Next J
Next I
Cells(4, "CB").Resize(UBound(oArr), 90).Value = oArr
MsgBox ("Completato")
End Sub
Nella riga marcata <<< devi scrivere la cella da cui viene preso il numero minimo di occorrenze da verificarsi per avere il risultato in colonna CB:FM
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: invece mi da falso

Postdi giorgioa » 10/10/23 08:32

Salve Anthony,

come sempre ti ringrazio degli aiuti che mi dai
solo che avrei preferito mi consigliassi su quanto postato da me.
Forse non avevi tempo da dedicarmi.
Per esempio pare che avessi incluso un array ,
non so dove sta di casa
absalut(romagna)
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: invece mi da falso

Postdi Anthony47 » 10/10/23 11:32

Hai ragione, era meglio non complicarti la vita con l'array (che ha senso solo se hai tanti risultati da scrivere)

Questa versione e' piu' simile alla tua
Codice: Seleziona tutto
Sub Baam2()
Dim I As Long, J As Long, ValMin As Long
Dim ValIn As Long
'
ValMin = Range("CB2").Value                 '<<< Dove trovo scritto il Min valore
'
Range("CB4").Resize(Cells(Rows.Count, "BC").End(xlUp).Row - 3, 90).ClearContents
For I = 4 To Cells(Rows.Count, "BC").End(xlUp).Row
    For J = 1 To 90
        ValIn = Application.WorksheetFunction.CountIf(Cells(I, "BC").Resize(1, 25), J)
        If ValIn >= ValMin Then
            Range("CB1").Cells(I, J) = J
        End If
    Next J
Next I
MsgBox ("Completato")
End Sub


Seguono i commenti nel confronto tra le tue istruzioni e le mie:
Codice: Seleziona tutto
For i = 1 To i
Vs
For I = 4 To Cells(Rows.Count, "BC").End(xlUp).Row

La tua istruzione esegue un solo ciclo; la mia esegue tanti cicli quante sono le righe di dati disponibili


Codice: Seleziona tutto
Cells(3 + i, 79 + j).Value = Application.WorksheetFunction.Count(Range(Cells(3 + i, 54), Cells(i + 79))) = Cells(1, 80).Value
Vs
        ValIn = Application.WorksheetFunction.CountIf(Cells(I, "BC").Resize(1, 25), J)
        If ValIn >= ValMin Then
            Range("CB1").Cells(I, J) = J
        End If

La tua istruzione vorrebbe compilare una cella se un certo numero (dei 90 sondati) e' presente almeno un tot di volte nella riga in esame; in realta' COUNT conta i numeri presenti nella riga, e il risultato che verra' scritto e' comunque il risultato del confronto (Vero /Falso). Siccome COUNT restituisce sempre "25" il risultato sara' sempre Falso
Le mie istruzioni fanno le cose per gradi: contano usando COUNTIF, poi confrontano col valore minimo desiderato, poi eventualmente scrive il numero nella sua casella.
Inoltre, non volendo sbattermi a controllare se 54 e 79 sono proprio la colonna di inizio e di fine dei dati da esaminare uso "BC" come colonna di partenza (come si vede dall'immagine da te allegata) e poi uso Resize per allargare di 25 colonne visto che i dati da esaminare sono larghi 25 colonne
Insomma ho usato Cells(I, "BC").Resize(1, 25) invece che Range(Cells(3 + i, 54), Cells(i + 79)) perche' mi sembra piu' semplice da scrivere e piu' semplice da capire
Per lo stesso motivo ho usato Range("CB1").Cells(I, J) invece che Cells(3 + i, 79 + j) per indirizzare la cella in cui scrivere

Le altre istruzioni sono di contorno a questo nucleo
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "invece mi da falso":


Chi c’è in linea

Visitano il forum: Nessuno e 95 ospiti