Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Copia se soddisfatta Condizione

Ultimo Aggiornamento: 28/01/2018 12:40
Post: 61
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
25/01/2018 09:03

Ciao a tutti, avrei un'esigenza di copiare dei dati dal foglio1 al foglio2 se rispettate determinate condizioni

Allego un esempio in cui descrivo a seconda dei casi cosa vorrei ottenere

Ho fatto delle prove con la formula "=SE(VAL.ERRORE(TROVA("illuminazione";C1));"NO";"SI")"
ma non ne vengo a capo

nel foglio 2 dovrebbe essere creato un elenco contenente le varie condizioni una per ogni riga

Grazie
[Modificato da Chiara-ExcelForum 25/01/2018 09:08]
Post: 2.608
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
25/01/2018 09:27

Buona giornata, Chiara;
personalmente proverei a risolvere con VBA ma non so se questo approccio sia conforme alle Tue necessità.


Buon Lavoro.

A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 61
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
25/01/2018 09:44

Buongiorno, la soluzione del VBA per me andrebbe benissimo... il problema è che non so come scrivere il codice [SM=x423039]

se gentilmente potesse aiutarmi, mi farebbe una grande cortesia
Post: 2.610
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
25/01/2018 10:07

Buona giornata, Chiara;
ora sto uscendo, nel pomeriggio, appena rientro provo a sviluppare un Codice VBA che soddisfi la Tua richiesta.

Ad ogni buon conto vedrai che ci saranno altri Utenti perfettamente in grado di proporti soluzioni alternative; ti lascio in buone mani.


A disposizione.

Buon lavoro.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 62
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
25/01/2018 10:17

Ti ringrazio.... ho già in effetti "testato" la professionalità e disponibilità degli altri utenti

[SM=x423063]

Grazie
Buona giornata
Post: 2.611
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
25/01/2018 16:01

Rieccomi!
Buon pomeriggio, Chiara;
sono finalmente riuscito a dedicare un pò di tempo alla tua richiesta.
Sarò sincero, ho tribolato un pò a gestire le "Celle unite" ma forse ho trovato la quadra.

Prova ad eseguire qualche prova con il File in allegato poi se hai problemi, assieme, possiamo cercare di risolvere.



A disposizione.

Buon Lavoro e buona serata

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 63
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
25/01/2018 16:24

E' semplicemente perfetto!!!!

Grazie

Ti chiederei solamente una cortesia: potresti commentare il codice?
Vorrei adattarlo per ottenere che se aggiungo una colonna F faccia le stesse cose
Grazie moltissimo
Post: 2.617
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
25/01/2018 17:36

Buona sera, Chiara;
ovviamente posso commentare il Codice VBA, devi solo avere un pò di pazienza; oggi è una giornataccia!  


Buona serata.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 67
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
25/01/2018 18:00

tutto il tempo che serve....... ci mancherebbe!!!!!
Post: 2.619
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
25/01/2018 21:03

Buona sera, Chiara;
ecco il Codice con i commenti.

Option Explicit '   Obbliga a definire tutte le Variabili e le Costanti

Sub Trasferisci()                                       '   Nome del Codice VBA
Application.ScreenUpdating = False                      '   Impedisce il refresh durante l'esecuzione
Dim URc As Long, URp As Long, x As Long, Rgx As Long    '   Definisce le Variabili Long
Const Dts As String = "DataSet"                         '   Definisce la Costante Dts
Const Rpr As String = "Report"                          '   Definisce la Costante Rpr

    Sheets(Rpr).Select          '   Seleziona il Foglio di lavoro Report
        With Worksheets(Dts)    '   With si riferisce ad un oggetto, in questo caso al Foglio di lavoro DataSet
            Cells.Clear         '   Cancella tutto, Record e Formati, nel Foglio di lavoro attivo
    URc = .Range("A" & Rows.Count).End(xlUp).Row    '   Rende la riga nella quale riside l'ultimo Record nel Foglio di lavoro DataSet
        For x = 1 To URc							'	Definisce un Ciclo partendo dalla Riga 1 all'ultima Riga nel Foglio di lavoro DataSet 
            Rgx = 1									'	Ho utilizzato Rgx come variabile di comodo
            If .Cells(x, 1) <> "" Then				'	Controlla che nella Colonna "A" della Riga "x" del Foglio di lavoro DataSet contenga un Valore
                If .Cells(x, 3) = "Illuminazione" Then	'	Se nella Cella "C" della riga controllata da "x" ci sia la descrizione Illuminazione
                    URp = Range("B" & Rows.Count).End(xlUp).Row		'	Rende la riga nella quale riside l'ultimo Record nel Foglio di lavoro Report	
                    If URp = 1 Then URp = -1		'	Nel caso in cui la prima Riga sia la Riga 1 allora Urp assume il valore di -1
                    Rgx = Rgx + 1					'	Rgx viene incrementata di una unità quando ho ritenuto ciò sia necessario	
                        Range(.Cells(x, 1), .Cells(x, 2)).Copy Cells(URp + Rgx, 1)	'	Copia i valori delle Colonne "A:B" di "DataSet" nella prima Riga libera di "Report"
                        Cells(URp + Rgx, 3).Value = .Cells(x, 4).Value				'	Copia i valori della Colonna "D" di "DataSet" nella Colonna "C" di "Report"
                        Cells(URp + Rgx, 4).Value = "-"								'	Scrive il valore "-" di "DataSet" nella Colonna "D" di "Report"
                        Cells(URp + Rgx, 5).Value = .Cells(x, 3).Value				'	Copia i valori della Colonna "C" di "DataSet" nella Colonna "E" di "Report"
                            Rgx = Rgx + 1			'	Rgx viene incrementata di una unità	
                        Cells(URp + Rgx, 2) = .Cells(x, 2)							'	Copia i valori delle Colonne "A:B" di "DataSet" nella seconda Riga libera di "Report"
                        Cells(URp + Rgx, 3).Value = .Cells(x, 5).Value				'	Copia i valori della Colonna "E" di "DataSet" nella Colonna "C" di "Report"
                        Cells(URp + Rgx, 4).Value = "-"								'	Scrive il valore "-" di "DataSet" nella Colonna "D" di "Report"
                        Cells(URp + Rgx, 5).Value = .Cells(x, 3).Value				'	Copia i valori della Colonna "C" di "DataSet" nella Colonna "E" di "Report"
                    
                    Range(Cells(URp + Rgx - 1, 1), Cells(URp + Rgx, 1)).Select		'	Seleziona le righe nelle quali applicare la Funziione "Celle unite"
                        With Selection												'	Inizio della Procedura per unire le Celle della Colonna "A"
                            .HorizontalAlignment = xlCenter
                            .WrapText = False
                            .Orientation = 0
                            .AddIndent = False
                            .IndentLevel = 0
                            .ShrinkToFit = False
                            .ReadingOrder = xlContext
                            .MergeCells = False
                        End With
                            Selection.Merge
                        With Selection
                            .HorizontalAlignment = xlCenter
                            .VerticalAlignment = xlCenter
                            .MergeCells = True
                        End With												'	Fine della Procedura per unire le Celle della Colonna "A"
                Else			'	Se nella Cella "C" della riga controllata da "x" ci sia una descrizione diversa da Illuminazione allora ...
                    URp = Range("B" & Rows.Count).End(xlUp).Row					'	Rende la riga nella quale riside l'ultimo Record nel Foglio di lavoro Report
                    If URp = 1 Then URp = -1	'	Nel caso in cui la prima Riga sia la Riga 1 allora Urp assume il valore di -1 ( non dovrebbe mai accadere però ...)
                    Rgx = Rgx + 1				'	Rgx viene incrementata di una unità
                    
                        Range(.Cells(x, 1), .Cells(x, 3)).Copy Cells(URp + Rgx, 1)	'	Copia i valori delle Colonne "A:C" di "DataSet" nella prima Riga libera di "Report"
                        Cells(URp + Rgx, 4).Value = "-"								'	Scrive il valore "-" di "DataSet" nella Colonna "D" di "Report"
                        Cells(URp + Rgx, 5).Value = .Cells(x, 4).Value				'	Copia i valori della Colonna "D" di "DataSet" nella Colonna "E" di "Report"
                        Cells(URp + Rgx, 6).Value = "-"								'	Scrive il valore "-" di "DataSet" nella Colonna "F" di "Report"
                        Cells(URp + Rgx, 7).Value = .Cells(x, 5).Value				'	Copia i valori della Colonna "E" di "DataSet" nella Colonna "G" di "Report"
                    Rgx = Rgx + 1				'	Rgx viene incrementata di una unità
                       Cells(URp + Rgx, 2).Value = .Cells(x, 2).Value				'	Copia i valori della Colonna "B" di "DataSet" nella Colonna "B" di "Report"
                       Cells(URp + Rgx, 3).Value = .Cells(x, 4).Value				'	Copia i valori della Colonna "E" di "DataSet" nella Colonna "C" di "Report"
                    Rgx = Rgx + 1				'	Rgx viene incrementata di una unità
                       Cells(URp + Rgx, 2).Value = .Cells(x, 2).Value				'	Copia i valori della Colonna "B" di "DataSet" nella Colonna "B" di "Report"
                       Cells(URp + Rgx, 3).Value = .Cells(x, 5).Value				'	Copia i valori della Colonna "E" di "DataSet" nella Colonna "C" di "Report"

                    Range(Cells(URp + Rgx, 1), Cells(URp + Rgx - 2, 1)).Select		'	Seleziona le righe nelle quali applicare la Funziione "Celle unite"
                With Selection									'	Inizio della Procedura per unire le Celle della Colonna "A"
                    .HorizontalAlignment = xlCenter
                    .WrapText = False
                    .Orientation = 0
                    .AddIndent = False
                    .IndentLevel = 0
                    .ShrinkToFit = False
                    .ReadingOrder = xlContext
                    .MergeCells = False
                End With
                    Selection.Merge
                With Selection
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                    .MergeCells = True
                End With									'	Fine della Procedura per unire le Celle della Colonna "A"
                End If					'	Termina la seconda condizione If
            End If						'	Termina la prima condizione If
        Next x							'	Incrementa il Ciclo For x
    End With							'	Termina l'attribuzione di Worksheets(Dts)
        Cells(1, 2).Select				'	Pone il Cursore in Cella "B1"
Application.ScreenUpdating = True		'   Ripristina il refresh durante l'esecuzione
End Sub									'	Termina il Codice VBA


Quando mi chiedono di commentare un Codice o una Procedura completa, preferisco affidarmi a Skype; il dialogo è sicuramente più veloce e comprensibile.


Buona serata.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 69
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
26/01/2018 08:07

accidenti...meglio di un manuale.... sinceramente dietro suggerimento anche di altri utenti del forum che, in precedenza, avevano avuto la pazienza di sopportare le mie richieste di aiuto, voglio studiare il codice con relative spiegazioni per iniziare a capire come funziona e magari provare a creare delle piccole prove. Mi avete veramente incuriosita!! Grazie infinite

[SM=x423025] [SM=x423026] [SM=x423070] [SM=x423047] [SM=x423048]

Post: 2.622
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
26/01/2018 10:04

Solo er completezza.
Buona giornata, Chiara;
consentimi un consiglio.

Ho iniziato ad entrare nel mondo VBA costruendo delle piccole procedure tramite il "registratore di macro".
Studiando la struttura che veniva proposta, ho iniziato a modificare i Codici VBA e costruirne di nuovi.
Ovviamente mi sono documentato con libri acquistati o disponibili in biblioteca.
Ora dispongo di un File, che ho denominato Macromag, che contiene un numero veramente consistente di piccoli Codici VBA.
Questo File viene caricato automaticamente all'apertura di Excel ma "rimane nascosto"; questo mi consente di poter accedere a tutti i Codici che, con molta pazienza, ho registrato in Macromag.

Senza questo File sarei veramente in difficoltà.

P.s. In Macromag c'è anche un Codice che ho scoppiazzato dalla tua discussione "Ordina solo celle occupate"; in quella Discussione ho apprezzato la tua disponibilità nel condividere una possibile soluzione e anche per questo motivo ti sei meritata un "mi paice" da parte mia.

A disposizione.

Buon Lavoro.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 70
Registrato il: 22/12/2017
Città: MILANO
Età: 44
Utente Junior
Excel2016
OFFLINE
26/01/2018 10:51

non puoi immaginare quanto l'aver potuto contribuire al forum, anche se in minima parte, mi faccia piacere.
In questo forum ( come in altri che ho utilizzato in precedenza / che tuttora utilizzo ) sono tutti molto disponibili e soprattutto ( questo ci tengo a sottolinearlo ) lo fanno / fate in maniera assolutamente gratuita, evidentemente per una forma di altruismo / voglia di divulgare il codice Vba al maggior numero di persone, indice della vostra grande passione

Grazie davvero
Post: 210
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
26/01/2018 14:05

@ GiuseppeMN
Ciao,
approfittando in maniera bieca della tua disponibilità, hai pensato/ hai voglia di condividere Macromag ?


Grazie se puoi.
[Modificato da BG66 26/01/2018 14:05]
BG66
Excel 2010
Post: 2.623
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
26/01/2018 16:41

Buon pomeriggio, BG66;
posso farlo ma prima devo "ripurirlo" per bene perchè ci sono le mie Password e quelle preferisco non condividerle.

Lasciami solo qualche giorno perchè in questo periodo sono pittosto impegnato; diciamo che posso pubblicarlo verso metà della prossima settimana.


Grazie della Tua Attenzione.

Buona serata e buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 212
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
26/01/2018 16:52

Grazie in anticipo.



BG66
Excel 2010
Post: 2.630
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
28/01/2018 12:40

Buona giornata a Tutti;
come promesso allego il File Macromag (il mio "magazzino dei Codici VBA che utilizzo con maggior frequenza).

Sono consapevole che potrebbe risultare di non facile interpretazione; per questo motivo resto a disposizione per eventuali ulteriori chiarimenti.



Buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Vota: 15MediaObject5,00217 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:19. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com