| | Post: 11 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
21/07/2020 22:44 | |
Ciao a tutti,
chiedo il vostro aiuto per risolvere un mio problema.
Devo replicare dei valori su un foglio di lavoro prelevandoli da un altro foglio.
Esempio (con file in allegato)
nella colonna A del foglio 1 ci sono dei valori
nella colonna A del foglio 2 ci sono gli stessi valori del foglio 1 ma in ordine sparso e alcuni replicati.
nella colonna B del foglio 2 ci sono dei nomi.
Ho bisogno che all'aggiornamento dei fogli, i nomi della colonna b foglio 2 che corrispondono alla colonna A, vengano replicati nella colonna b del foglio 1. Se nel foglio 2 ci sono più valori uguali nella colonna A ma con nomi diversi, nella colonna B del foglio1 vengano scritti più nomi.
Lo so, è piuttosto complicato e probabilmente non sono molto chiaro; ho comunque fatto nel foglio3 il risultato che vorrei ottenere.
Grazie del vostro costante aiuto.
|
|
|
21/07/2020 23:31 | |
Prova Sub trova()
Dim ur, ur1, x, r, Rg As Object
ur = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
ur1 = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
For x = 2 To ur1
Set Rg = Sheets("Foglio1").Range("A1:A" & ur).Find(Sheets("Foglio2").Cells(x, 1), LookIn:=xlValues, LookAt:=xlWhole)
If Rg Is Nothing Then
MsgBox "nessuna corrispondenza"
Else
r = Rg.Row
If Sheets("Foglio1").Cells(r, 2) = "" Then
Sheets("Foglio1").Cells(r, 2) = Sheets("Foglio2").Cells(x, 2)
Else
Sheets("Foglio1").Cells(r, 2) = Sheets("Foglio1").Cells(r, 2) & ", " & Sheets("Foglio2").Cells(x, 2)
End If
End If
Next
MsgBox "Fatto"
End Sub
|
| | Post: 11 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
22/07/2020 10:04 | |
Ottimo, grazie mille!
Come faccio a renderlo automatico? Ad ogni inserimento di un valore nel foglio1 colonnaA, venga popolato la colonna B?
E come faccio a togliere la text box "Fatto"?
Grazie |
|
22/07/2020 11:14 | |
Sicuramente ho capito male il Tuo problema, "quel VBA" è solo una verifica sui dati presenti nei due fogli (da usare solo una ed unica volta). Premesso che Lui CERCA in foglio2 e scrive in Foglio1, cosa c'entra "Ad ogni inserimento di un valore nel foglio1 colonnaA"??? Intendi dire se inserisci un Numero in foglio1, Lui dovrebbe cercare se esiste già in foglio2??? Pure eventuali doppioni? ... e se non esiste?
Prova spiegare bene i passaggi del quesito, se riesco capirTi...
Ps. >>>Come faccio a renderlo automatico? Serve un Worksheet_Change
>>>E come faccio a togliere la text box "Fatto"? Basta togliere la riga |
| | Post: 12 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
22/07/2020 13:48 | |
Ciao,
sicuramente mi sono espresso male, ma hai comunque capito bene.
Quello che già mi hai dato fa al caso mio, ma mettendo worksheet change, ogni volta che sposto il cursore nel documento, le celle della colonna B del foglio 1 si incrementano con un nome: vorrei invece che una volta popolate le celle con i nomi, queste non vengano più modificate.
>>>>Intendi dire se inserisci un Numero in foglio1, Lui dovrebbe cercare se esiste già in foglio2??? Si
>>>>e se non esiste? Non deve scrivere nulla, lasciare la cella vuota
Grazie mille per il supporto |
|
22/07/2020 22:20 | |
Vai su foglio1, premi ALT+F11 ed incolla sulla destra.
Quando scrivi un numero cerca in foglio2 Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then Exit Sub
Dim ur, r, c As Object, Msg As String, val As Long, Tot As Long
ur = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then
val = Target.Offset(0, 0)
With Sheets("Foglio2").Range("A1:A" & ur)
Set c = .Find(val, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
r = c.Row
Msg = Msg & Sheets("Foglio2").Cells(r, 2) & ","
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End If
Application.EnableEvents = False
Target.Offset(0, 1) = Msg
Application.EnableEvents = True
End Sub |
| | Post: 13 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
23/07/2020 08:40 | |
Ottimo! Grazie!
Ma se, invece che scrivere, dovessi incollare nella colonna A diverse celle?
|
|
23/07/2020 13:37 | |
Il Worksheet_Change non funziona col copia/incolla |
| | Post: 14 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
23/07/2020 14:28 | |
Ah, non lo sapevo.
Ho provato allora a metterlo nel modulo ma da errore, come mai?
Grazie |
|
23/07/2020 14:39 | |
>>>Vai su foglio1, premi ALT+F11 ed incolla sulla destra<<< |
| | Post: 15 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
23/07/2020 15:42 | |
Se però non funziona il copia incolla con il worksheet change, non è molto adatto al mio scopo.
Forse è meglio la prima opzione che hai inviato.
Quindi vorrei chiederti un ultima cosa: come posso fare in modo che le celle già popolare non vengono scritte continuamente? Perchè altrimenti, ad ogni avvio del vba, le celle della colonna b vengono continuamente popolate.
Grazie mille! |
|
23/07/2020 20:33 | |
Nel Foglio3 c'è un bottone, ogni volta inizia da riga2
Nel Foglio1 (accetta il singolo e pure diversi valori), però se cancelli non azzera tutte le celle. Di più non saprei come fare |
| | Post: 2.906 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
24/07/2020 10:39 | |
Ciao a tutti
me permetto suggerire l'utilizzo dell'evento change (che comunque funziona anche con il copia incolla), nel seguente modo:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur, r, c As Object, Msg As String, val As Long, Tot As Long
Application.EnableEvents = False
ur = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then
For Each cell In Target
If Not cell.Value = "" Then
val = cell
With Sheets("Foglio2").Range("A1:A" & ur)
Set c = .Find(val, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
r = c.Row
Msg = Msg & Sheets("Foglio2").Cells(r, 2) & ","
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
cell.Offset(0, 1) = Msg
Msg = ""
End If
Next
End If
Application.EnableEvents = True
End Sub
(salvo errori di interpretazione)
Il tutto andrebbe integrato con una "sana" gestione di errori, cosa che è rara vedere......
saluti
[Modificato da dodo47 24/07/2020 10:40] Domenico
Win 10 - Excel 2016 |
|
24/07/2020 14:15 | |
Ciao dodo47
Molto snello in Tuo codice, a parte un IF IsNumeric(Val) quali altri errori ci potrebbero essere? Se per ex sono scritti A1:A50 e desidero cancellare, devo selezionare le celle A10:B30 e mi rimangono righe vuote. Esiste un modo che se cancello solo A10 mi cancella pure B10? Forse il massimo sarebbe un ciclo For con IsNumeric e poi chiedo se cella=vuota elimina riga. Grazie |
| | Post: 2.907 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
24/07/2020 17:21 | |
ciao
ABC....quel codice va sistemato, non ho la minima idea di che uso debba farne alesc.
Certamente se elimini righe va in errore (e la cosa deve essere gestita), se cancelli no etc etc.
se alesc lascia celle vuote potresti partire dal basso.
se cancelli i dati in A, l'evento stesso potrebbe cancellare i valori in B e viceversa.
saluti
[Modificato da dodo47 24/07/2020 17:23] Domenico
Win 10 - Excel 2016 |
| | Post: 16 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
26/07/2020 00:18 | |
Ciao a tutti,
innanzitutto mille grazie per il vostro aiuto, non mi stancherò mai di dirlo..
Gli ultimi codici sono entrambi molto validi ma non perfetti per il mio utilizzo.
Ogni giorno ricevo dei dati aziendali del giorno precedente: importo questi dati in un documento ma purtroppo i "nomi" vengono inseriti nel secondo foglio, mentre io ho bisogno di leggerli nel primo foglio insieme ad altri dati.
Se modifico il codice di dodo cambiando colonne, non funziona più; ho notato inoltre che se se inserisco prima un valore nel primo foglio e poi il suo corrispondente nel Foglio2, nel foglio 1 non si aggiorna.
Temo che sia un pò complesso..
|
| | Post: 2.909 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
26/07/2020 10:23 | |
alesc83, 26/07/2020 00:18:
Se modifico il codice di dodo cambiando colonne, non funziona più; ho notato inoltre che se se inserisco prima un valore nel primo foglio e poi il suo corrispondente nel Foglio2, nel foglio 1 non si aggiorna.
Temo che sia un pò complesso..
Ciao
vedi alesc83, se tu non fornisci tutte insieme le tue necessità, spiegando come gira il tutto (a partire da come viene alimentato il foglio2), quali sono le colonne realmente interessate etc etc.... tu non ne esci fuori.
Il fatto che tu cambi colonne e non funziona, vuol dire che non adatti il codice alle colonne interessate
Il fatto che metti prima il codice nel foglio1 e poi pretendi che si aggiorni inserendo i corrispondenti nel foglio2 è qualcosa che non hai detto e pertanto non prevista.
Solo tu sai l'effettiva operatività e l'effettiva struttura del tuo lavoro. Finchè non fornisci un esempio con tutti i dettagli e la struttura corretta, non si arriverà mai a conclusione.
Purtroppo lo sviluppo di un codice ha bisogno di chiarezza.
saluti
[Modificato da dodo47 26/07/2020 10:57] Domenico
Win 10 - Excel 2016 |
| | Post: 17 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
26/07/2020 16:25 | |
Ciao dodo47,
invio in allegato il report reale che tutti giorni viene aggiornato importando i dati sia nel foglio1 che nel foglio2.
Come puoi vedere ci sono alcuni dati nel foglio 1 e altri nel foglio 2.
Ciò che ho bisogno è che i nomi degli utenti vengano inseriti nella colonna K del foglio1; come puoi vedere la colonna "lavorazione" è popolata in entrambi i fogli, ma nel primo non c'è il nome dell'utente.
Spero di essere stato un pò più chiaro ora..
Grazie |
| | Post: 2.912 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
26/07/2020 16:45 | |
Ciao
ma i dati vengono sostituiti oppure accodati?
o meglio, qual è la tua operatività?
perchè per riportare un nome in base (mi sembra) al codice LAVORAZIONE, basterebbe un semplice cerca.vert (vedi esempio) [Modificato da dodo47 26/07/2020 16:55] Domenico
Win 10 - Excel 2016 |
| | Post: 18 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
26/07/2020 17:07 | |
I dati vengono accodati.
Il cerca.vert sarebbe perfetto ma la lavorazione spesso ha più utenti: nell'esempio che ti ho inviato la lavorazione 37829 ha due utenti: tortello e lavagna ma con il cerca.vert ti mostra solo il primo. |
| | Post: 2.914 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
26/07/2020 18:50 | |
Scusami, me ne ero completamente dimenticato, sai com'è...l'età.
Ora provvedo, devo trovare un mio vecchio lavoro
saluti
[Modificato da dodo47 26/07/2020 19:06] Domenico
Win 10 - Excel 2016 |
| | Post: 19 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
26/07/2020 20:08 | |
Ma và figurati!! Il vostro supporto é immenso! |
|
27/07/2020 05:04 | |
Mi sapresti spiegare le date in riga191 18/07/2020 e riga192 7/17/2020
Prima parlavi di numeri adesso di stringhe. Per me Worksheet_Change non va bene, se dodo47 non lo trova, farò una sub con bottone
Ps. Mi sembra strano che foglio1 trovi solo 3/4 stringhe? Tutte le altre non esistono?
|
| | Post: 2.915 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
27/07/2020 09:33 | |
ciao
come anticipato ti allego il file con una udf
In uno dei fogli troverai una piccola spiegazione dei parametri
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 20 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
27/07/2020 23:59 | |
Ciao,
ora funziona, ed è quello che cercavo, ottimo!!! Grazie mille!
Quindi ora, se importo il codice in un altro file e copio la formula della colonna k, dovrebbe funzionare, giusto?
x ABCDEF@Excel. Le date delle righe 191 e 192 sono diverse perche arrivano da due pc con formati diversi.
>>>>Ps. Mi sembra strano che foglio1 trovi solo 3/4 stringhe? Tutte le altre non esistono? Non vi ho inviato tutto il file perchè era troppo grande, ho estrapolato un parziale.
ciao |
| | Post: 2.918 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
28/07/2020 10:00 | |
alesc83, 27/07/2020 23:59:
Quindi ora, se importo il codice in un altro file e copio la formula della colonna k, dovrebbe funzionare, giusto?
Il codice di sicuro lo devi importare nel nuovo foglio. Fossi in te scriverei ex novo la formula sulla prima riga per poi trascinarla finchè serve. Non per altro, ma per capire come funziona.
Il copia/incolla non è mai un buon metodo.
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 21 | Registrato il: 07/05/2020
| Età: 40 | Utente Junior | excel 2013 | | OFFLINE | |
|
29/07/2020 21:36 | |
Ciao,
l'ultima soluzione funziona, ed è quello che fa per me ma purtroppo quando incollo la formula su tutte le cartelle, il programma excel si blocca, come se dovesse fare molti calcoli. Come mai? |
| | Post: 2.925 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
30/07/2020 11:25 | |
ciao
spiega un po' meglio, non mi è chiaro. Un esempio sarebbe meglio
saluti
[Modificato da dodo47 30/07/2020 11:26] Domenico
Win 10 - Excel 2016 |
|
30/07/2020 11:48 | |
Dipende da quante celle/righe contengono la formula della Function
Questo file (vuoto) lavora in modo diverso, contiene un Auto_Open (valido solo se il files che Ti inviono giornalmente ha la stessa struttura, potrei variarlo) All'apertura Ti chiede il files nuovo, esegue il controllo ed alla chiusura salva i dati su se stesso (anche qui si potrebbe scegliere quali dati).
Una volta fatto controlli i dati e alla chiusura scegli di salvarlo oppure no [Modificato da ABCDEF@Excel 30/07/2020 11:49] |
| | Post: 2.927 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
30/07/2020 12:27 | |
ABC...il fatto è che alesc non vuole usare pulsanti che eseguono macro (almeno così ho interpretato), in quanto la sua operatività è su entrambi i fogli. Lui vuole poter aggiornare man mano che aggiunge/modifica i dati in entrambi i fogli senza essere costretto ad eseguire la macro ogni volta che apporta modifiche.
saluti
Domenico
Win 10 - Excel 2016 |
|
|