Condividi:        

vba conciliare diverse situazioni

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 conciliare diverse situazioni

Postdi giorgioa » 25/09/23 17:10

Salve,

cortesemente + che un aiutino +++ aiutini
spero di essere chiaro nella esposizione dei dati da mettere insieme in
codice VBA.
dim i as long, j as long
1) variabile i che conta le righe interessate: i= cells(rows.count,3).end(xlup).row
2) cella in cui si chiede il risultato cells(3+i,34+j).value
3) numeri da controllare: (cells(3+i, 31+j).value, cells(3+i,32+j).value, cells(3+i,33+j).value)
4) dove controllare i numeri: c : g
5) le righe di c : g prendono il valore di cella(3+i,44+j).value cioè as4
6) la condizione è che se uno o + numeri sono presenti nella riga c : g, la cells(3+i, 34+j).value
---deve riportare il valore della cella as4, oppure at4 ecc se manca la presenza di un numero in c : g
---la cella(3+i,34+j).value rimane vuota.
Io mi perdo, non so voi
Grazie cmq dell'interessamento
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Sponsor
 

Re: vba conciliare diverse situazioni

Postdi giorgioa » 25/09/23 18:15

aggiungo

FOR i = 1 TO i
FOR J=1 TO 10
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 25/09/23 21:57

Perdona, non impostare tu la macro; descrivi solo che aspetto hanno i tuoi dati (potrebbe bastare anche solo una immagine) e descrivere su questa base dati quali controlli vanno fatti per estrarre quali dati, in Italiano (non in vba).

Per le istruzioni su come allegare una immagine:
http://www.pc-facile.com/forum/viewtopi ... 88#p605488
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 25/09/23 23:27

[img]"C:\Users\Utente\Desktop\pip.png"[/img]
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 00:04

Immagine
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 00:11

Salve Anthony, ecco l'immagine
per maggiore chiarezza dovresti allargare l'immagine in modo frontale a destra ci sono altri dati.
ho colorato 2 esempi riportando per ognuno di essi lo stesso colore
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 00:32

Immagine

ho visto che l'immagine non è completa nei post precedenti mi auguro che questo lo sia
tieni presente che le celle in azzurro fanno riferimento alle colonne dell'archivio
che non sono in linea infatti il primo dato di rigo 4 cioè 87 devi andare a rigo 15 dell'archivio
come è indicato in cella AT4 va beh non ti do altri dati se no ti faccio confusione
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 26/09/23 09:01

Ok, ora abbiamo una immagine
Ma in questa immagine, quali sono i dati di partenza e quali sono quelli che invece vanno creati? E quali sono le regole?
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 09:40

salve Anthony,

se si ottiene il dato occupare la cella Ai4 ,e man mano fino a cella AR4;
i dati da controllare sono nelle colonne AF o AG o AH con presenza di almeno 1 di essi;
questi tre numeri se presenti nelle righe di C : G
le cui righe di c:g sono disposte in As4 e man mano fino ad AR
UNA NOTA da tenere presente che (af:ah)- (ai) e (as:ar) sono sullo stesso rigo mentre
le righe di c:g dipendono dai numeri di AS4 AT4 ecc
segui l'esempio dei 2 colori segnalati con GIALLO o VERDE
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 26/09/23 16:00

La mia interpretazione:
-hai l’elenco UNO da C4 a Gxx
-hai l’elenco DUE in AF4:AHxx
-hai l’elenco TRE in AS4:BBxx

-Partendo dalla riga 4, vuoi controllare se nell’elenco UNO, nella riga indicata da ognuna delle colonne di TRE se e’ presente uno dei numeri di elenco DUE.
Se presente, in AI:AR di quella riga si riporta lo stesso numero di elenco TRE che ha indicato una presenza.

Se e’ così, allora potrebbe funzionare la seguente macro:
Codice: Seleziona tutto
Sub Giorgiooo()
Dim sDb As Range, sDg As Range, sDy As Range
Dim lIn As Range, isIn As Long
Dim I As Long, J As Long, K As Long
'
Set sDb = Range("C4")           '<<< L'inizio dell'elenco UNO
Set sDg = Range("AF4")          '<<< L'inizio dell'elenco DUE
Set sDy = Range("AS4")          '<<< L'inizio dell'elenco TRE
'
Application.ScreenUpdating = False
For I = 1 To sDb.End(xlDown).Row - sDb.Row
    For J = 1 To 10
        For K = 1 To 3
            isIn = Application.WorksheetFunction.CountIf(sDb.Cells(sDy.Cells(I, J) - sDb.Row + 1, 1).Resize(1, 5), sDg.Cells(I, K))
            If isIn > 0 Then
                sDg.Cells(I, J + 3).Value = sDy.Cells(I, J).Value
            Else
                sDg.Cells(I, J + 3).ClearContents
            End If
        Next K
    Next J
   
Next I
Application.ScreenUpdating = True
End Sub

Mi sembra strano che l’elenco TRE indichi la riga Excel e non all’interno dell’elenco (cioe’, nella tua immagine, il “13” in AS4 indichera’ l’area C3:G13, che pero’ e’ la riga 10 dell’elenco in C:G; in assenza di descrizione in merito io ho copiato dal tuo esempio.

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 17:09

Else
sDg.Cells(I, J + 3).ClearContents
End If
che ci saresti riuscito non avevo dubbi
ma soprattutto che mi sia riuscito a spiegarmi a primo acchitto questo mi fa ancora +++ piacere.
forse un ritocchino alla macro.
quando ho incollato la macro nel modulo ho cominciato a pigiare il tasto f8 pigia e ripigia dopo una 30ntina mi è uscito il primo dato cioè cella at4 = 15 ma nel continuare me lo ha subito cancellato ti ho riportato la riga dopo appena cancellato il valore della cella at4.
ti volevo chiedere, non potevo farlo prima mentre ora si
abbiamo C:G dipendenti da una sola cella (AS:AR)
poniamo il caso volessi aggiungere un +1 alla g si può fare?
vedo di spiegarmi sulla prima riga (a prescindere che la riga 15 prima me la indica e poi me la cancella)
per avere il dato di af4 in at4 che = 15 cioè C15:G15 si potrebbe ottenere G15+1?
cioè invece di controllare solo la riga c15: G15 cioè una riga, controllare anche la seconda riga da avere c15:g16 e come risultato
riportare sempre il dato di AS nel mio esempio 15 e non 16 in at4

L'importanza dei numeri as:ar quei numeri sono il passato (estrazione già avvenuta) ed il futuro estrazione futura
ci crederai poco o niente ma è così nella percentuale dell'80% in sù che si è realizzato e realizzerà.
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 17:43

Salve,
sto effettuando un controllo a tappeto ed ho notato che i dati non me li da tutti
il controllo l'ho fatto su righe vuote ai:ar e anche su righe con dati e anche qui me ne salta
è importante che i dati li trascrive tutti
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 26/09/23 18:32

... infatti riporta correttamente solo le occorrenze legate alla colonna AH :(

Modifica questa parte di macro come segue:
Codice: Seleziona tutto
Application.ScreenUpdating = False
sDg.Offset(0, 3).Resize(sDb.End(xlDown).Row, 10).ClearContents   '+++
For I = 1 To sDb.End(xlDown).Row - sDb.Row
    For J = 1 To 10
        For K = 1 To 3
            isIn = Application.WorksheetFunction.CountIf(sDb.Cells(sDy.Cells(I, J) - sDb.Row + 1, 1).Resize(1, 5), sDg.Cells(I, K))
            If isIn > 0 Then
                sDg.Cells(I, J + 3).Value = sDy.Cells(I, J).Value
'            Else
'                sDg.Cells(I, J + 3).ClearContents
            End If
        Next K
    Next J
Next I
Application.ScreenUpdating = True
C'e' una riga aggiunta (+++) e due "commentate", quindi che possono essere eliminate.

Quanto al discorso di "fare +1 alla G" mi pare che la richiesta sia di controllare l'esistenza dei 3 numeri di AF:AH sulla riga puntata dalle colonne AS:BB PIU' LA RIGA SUCCESSIVA.
Se e' così, allora modifica questa riga come segue:
Codice: Seleziona tutto
            isIn = Application.WorksheetFunction.CountIf(sDb.Cells(sDy.Cells(I, J) - sDb.Row + 1, 1).Resize(2, 5), sDg.Cells(I, K))
In pratica il precedente Resize(1, 5) diventa Resize(2, 5)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 26/09/23 19:41

oltre a qualche altra controllata, cortesemente, essendo improntato sullo stesso argomento
potresti fare un altro sforzo?
praticamente l'unica cosa da cambiare sono i numeri da considerare che da af:ah passare a L:P
la condizione è che se in colonna h c'è un numero alla stessa riga L:P ci saranno 5 numeri
e nella stessa posizione ai:ar da riportare i dati appoggiandosi sempre come controllo archivio su as:bb.
sui 5 numeri c'è che se in riga dei 5 numeri si richiede la presenza di almeno 2 di essi
il size 2, 5 da portare a size 3,5
se possibile e se mi sono spiegato
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 27/09/23 14:08

praticamente l'unica cosa da cambiare sono i numeri da considerare che da af:ah passare a L:P

a condizione è che se in colonna h c'è un numero alla stessa riga L:P ci saranno 5 numeri

Quindi cambia la posizione, e la larghezza sarà 3 colonne (L:N) se col H è vuota oppure 5 (L:P) se col H contiene qualcosa?

sui 5 numeri c'è che se in riga dei 5 numeri si richiede la presenza di almeno 2 di essi
il size 2, 5 da portare a size 3,5
Stai dicendo che se in colonne C:G (su due righe) ci sono almeno 2 numeri tra quelli in colonna L:P (nuova posizione) allora la ricerca va fatta su 3 righe e non su due? Ma se fosse così, che senso ha la cosa, visto che in AI:AR la compilazione e’ fatta se si trova almeno 1 numero? (avendone già trovato 2, fare il controllo su tre righe non farebbe che rafforzare il risultato, ma non lo potrebbe cambiare)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 27/09/23 14:38

Salve,
mi dico sempre di parlare poco perchè parlare poco si dicono meno parole e meno fesserie
ritratto tutto:
se in colonna h è presente un numero sulla stessa riga ci saranno 5 numeri in L:P
dei 5 numeri di L:P si chiede la presenza di almeno 2 dei 5 per riga
poi stando al dato di as che comporta una sola riga in c:g poter controllarne 4 righe
preciso che dei 5 numeri se ce ne sono 2 per riga ma su 4 righe
Salve

il tutto sulle stesse posizioni
ai i dati finali
c:g di righe as

NB da capire dopo qual'è la colonna H e quai sono le colonne L:P dei 5 numeri
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 27/09/23 20:44

mi dico sempre di parlare poco perchè parlare poco si dicono meno parole e meno fesserie
Dissento: devi parlare, anzi “scrivere”, quanto serve a descrivere tutte le casistiche, non devo essere io a spiegarti cosa ho capito e tu ritratti tutto, ma tu a descrivere con completezza e io al massimo chiedere qualche chiarimento.

Allora, quello che ho capito e quello che non ho capito:
-i dati da cercare nelle colonne CG ora sono in L:P; saranno 3 se H e’ vuota oppure 5 se H non e’ vuota. Giusto? Se No allora descrivi tu.
-se ci sono 3 numeri (H vuota), essi vanno cercati in una o in due righe di C:G? Se su 2 righe, il risultato in AI:AR va scritto quando si trova almeno uno dei tre numeri in almeno 1 riga di C:G?
-se invece ci sono 5 numeri (H non vuota), essi vanno cercati su 4 righe di C:G, e il risultato va scritto in AI:AR solo se si trovano almeno 2 dei cinque numeri in almeno 1 delle 4 righe controllate. Giusto? Se no allora descrivi tu.

Se non ho dimenticato qualcosa, con queste informazioni dovrebbe essere possibile pensare alla NUOVA macro
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 29/09/23 06:49

Scusa, mi era sfuggito il tuo messaggio del 27 c.m.
forse non mi era giunto nella posta l'avviso e di una risposta

ricomincio daccapo:
si tratta di nuova macro
i dati vanno riportati in "ai" come prima
i dati da controllare: dipende dalla colonna H se c'è il dato sulla stessa riga ci saranno 5 numeri L:P
controllare in C:G su ogni riga delle 4 -5 se ci sono 2 numeri di L:P
se "si" riportare il dato di AS
le righe di C:G dipendono cella as
Tutto come nella macro "giorgioooooooo"
tranne posizione dei numeri da controllare L:P e se in H è presente un dato
invece di rilevare un numero dei 5 contarne almeno 2 per riga e nelle righe consecutive per 4-5 di esse
buona giornata e ancora scusa per il ritardo
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: vba conciliare diverse situazioni

Postdi Anthony47 » 29/09/23 15:18

ricomincio daccapo
Perdona, non dovresti ricominciare daccapo, ma da quelllo che ho capito io e relative domande.

Comunque dal riepilogo ho dedotto che potrebbe funzionare la seguente macro:
Codice: Seleziona tutto
Sub Giorgio35()
Dim sDb As Range, sDg As Range, sDy As Range, oRan As Range
Dim lIn As Range, isIn As Long
Dim I As Long, J As Long, K As Long, dFlag As Boolean
Dim L As Long, Vh As Long, Rv As Long, Thr As Long, LLoop As Long
Dim dBg As Boolean
'
Set sDb = Range("C4")           '<<< L'inizio dell'elenco UNO
Set sDg = Range("L4")           '<<< L'inizio dell'elenco DUE
Set sDy = Range("AS4")          '<<< L'inizio dell'elenco TRE
Set oRan = Range("AI4")         '<<< L'inizio dell'area di Output
'
dBg = False
oRan.Resize(sDb.End(xlDown).Row, 10).ClearContents
For I = 1 To sDb.End(xlDown).Row - sDb.Row
'If I = 12 Then Stop
    If Range("H4").Cells(I, 1) <> "" Then       '3 / 5
        Vh = 5: Rv = 1: Thr = 1: LLoop = 4      '<<< Rv=1+LLoop=4 significa 4 test su 1 riga
    Else
        Vh = 3: Rv = 2: Thr = 0: LLoop = 1      '<<< Rv=2+LLoop=1 significa 1 test su 2 righe
    End If
    For J = 1 To 10
        For L = 0 To LLoop - 1
            isIn = 0
            For K = 1 To Vh
                isIn = isIn + Application.WorksheetFunction.CountIf(sDb.Cells(sDy.Cells(I, J) + L - sDb.Row + 1, 1).Resize(Rv, 5), sDg.Cells(I, K))
                If isIn > Thr Then
                    If dBg Then
                        oRan.Cells(I, J).Value = "'" & sDy.Cells(I, J).Value & "/" & L
                    Else
                        oRan.Cells(I, J).Value = sDy.Cells(I, J).Value
                    End If
'                    isIn = 0
                    dFlag = True
                End If
                If dFlag Then Exit For
            Next K
            If dFlag Then dFlag = False: Exit For
        Next L
    Next J
Next I
Application.ScreenUpdating = True
End Sub

Questa a seconda del contenuto di H esamina 3 o 5 numeri di L:P secondo la tabella AS:BB e compila AI:AR se trova:
-con H vuota, almeno 1 dei tre numeri esaminati cercandoli in due righe di C:G
-con H non vuota, almeno 2 dei 5 numeri esaminati cercandoli separatamente in 4 righe di CG
Prova...

D:\DDownloads\[MULTI_C30923.xlsm]Foglio2 (2)
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba conciliare diverse situazioni

Postdi giorgioa » 30/09/23 00:04

Salve,
stavo aspettando la macro e me l'hai bella postata alle 15.16.
Controllavo continuamente la mia casella di posta.
Evidentemente sarà saltata la spunta aggiunta di avvisare per post successivi o nuovi.
Dagli esiti ottenuti devo dire bellissima macro e a prescindere.
Siccome sai che ho l'idea di moltiplicare i tuoi lavori ... vengo al dunque
quindi la macro funziona anche se devo fare qualche altra prova
ora dovrei replicare la macro 35 per altre 3
ho visto che il dato di colonna H è superfluo
mi è sufficiente cambiare il set l4 in o4 oppure in q4 o ancora v4
per controllare altre posizioni di 5 numeri?
Un'altra domanda a quante righe in C:G hai permesso il controllo?
vorrei sapere se correggendo
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "vba conciliare diverse situazioni":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti