| | Post: 1 | Registrato il: 19/09/2017
| Città: LIVORNO | Età: 45 | Utente Junior | 2016 | | OFFLINE | |
|
19/09/2017 12:27 | |
Buongiorno,
sono nuova ed imbranata...
il mio principale sta mettendo a dura prova i miei nervi...
vuole che da un primo foglio (ORDINE) con un elenco materiale e quantità io riesca in un altro foglio a trovare la formula grazie alla quale "se una cella è maggiore a 0 l'intera riga venga copiata (e fin qui credo di esserci riuscita con =SE(ORDINE!D13>0;ORDINE!B13;"zero")
Gli ho fatto vedere il lavoro tutta orgogliosa ma lui vuole che in caso il valore sia zero non compaia proprio la riga...ovvero estrapolare da questo elenco un ordine materiale da mandare al fornitore...senza spazi vuoti!
Potete aiutarmi? Oppure per aiutare vuoi posso allegarvi il file? |
|
| | Post: 3.440 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
19/09/2017 12:33 | |
Ciao Sara (non imbranata )
Puoi allegare un file di esempio con i dati (non sensibili) sul foglio1 e sul foglio2, sulla base di questi) inserisci manualmente il risultato che vuoi ottenere.
È possibile che si debba ricorrere ad una macro; tu ne sai qualcosa?
Oppure con un filtro dati eviti di visualizzare le righe che in una certa cella hanno "zero"; ci hai pensato?
[Modificato da alfrimpa 19/09/2017 12:40]
Alfredo |
| | Post: 3.441 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
19/09/2017 15:29 | |
Ciao Sara
In attesa del tuo file propongo questa macro che copia sul foglio2 tutti i record del foglio1 che hanno quantità diversa da 0.
Ovviamente in presenza del tuo file "reale" credo debba essere modificata.
vb Sub Copia()
Dim ur As Long
Dim lr As Long
Dim rng As Range
Dim cel As Range
ur = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Worksheets("Foglio1").Range("B2:b" & ur)
For Each cel In rng
lr = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row
If cel.Value <> 0 Then
Worksheets("Foglio2").Cells(lr + 1, 1).Value = cel.Offset(0, -1).Value
Worksheets("Foglio2").Cells(lr + 1, 2).Value = cel.Value
End If
Next cel
End Sub
Ho supposto che sul foglio1 vi fossero i materiali in colonna A ed in colonna B le quantità.
Se la situazione sul tuo file è diversa la macro si modifica in un attimo.
[Modificato da alfrimpa 19/09/2017 15:40]
Alfredo |
| | Post: 1 | Registrato il: 19/09/2017
| Città: LIVORNO | Età: 45 | Utente Junior | 2016 | | OFFLINE | |
|
20/09/2017 09:00 | |
Buongiorno,
grazie per avermi risposto (il mio help è arrivato a te).
allego (o almeno credo) il file Excel.
Il primo foglio è quello dove io dovrò inserire le quantità di un determinato articolo, in un determinato edificio mentre gli altri fogli sono gli edifici suddivisi dove vorrei che apparissero (come per magia) solo le righe e le quantità dove sono presenti dei valori.(nel secondo foglio c'è già quel cazzabuglio di formula che avevo fatto io...ma al capo non vanno bene tutti quegli zero
Alfrimpa...eccoci qua..io e te...e l'ostrogoto che mi hai scritto
ricordati che sono IMBRANATA
|
| | Post: 3.443 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
20/09/2017 12:00 | |
Dunque Sara armati di una buona dose di pazienza e di buona volontà
Ti riallego il tuo file nel quale ho inserito la macro che vedi qui piuttosto diversa da quella che ti avevo postato in precedenza perché la struttura dei tuoi fogli è decisamente differente da quella che avevo ipotizzato io.
vb Sub Copia()
Dim i As Integer
Dim ur As Long
Dim lr As Long
Dim rng As Range
Dim cel As Range
Dim fgl As String
Dim scrt As Integer
ur = Worksheets("ORDINE").Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Worksheets("ORDINE").Range("D11:G" & ur)
For i = 4 To Sheets.Count
Sheets(i).Range("b13:d1000").ClearContents
Next i
For Each cel In rng
If cel.Value <> "" Then
fgl = CStr(Cells(10, cel.Column))
lr = Worksheets(fgl).Cells(Rows.Count, 2).End(xlUp).Row
Select Case cel.Column
Case Is = 4
scrt = -1
Case Is = 5
scrt = -2
Case Is = 6
scrt = -3
Case Is = 7
scrt = -4
End Select
Worksheets(fgl).Cells(lr + 1, 2).Value = cel.Offset(0, scrt - 1).Value
Worksheets(fgl).Cells(lr + 1, 3).Value = cel.Offset(0, scrt).Value
Worksheets(fgl).Cells(lr + 1, 4).Value = cel.Value
End If
Next cel
MsgBox "Copia effettuata"
Sheets("ORDINE").Range("A1").Select
End Sub
Sul foglio "ORDINE" ho inserito un pulsante "Effettua copia" che la esegue.
Giusto per tua "scienza" una macro è un insieme di istruzioni scritte in un linguaggio di programmazione che si chiama Visual Basic for Application (VBA) che è comune a tutte le applicazioni di Office ossia, oltre ad Excel, Word Access etc. (sia pure con delle differenze dovute alle specificità di ogni singolo programma).
Spero con questo di non averti "spaventata" e ti prego di farmi sapere.
P.S. Probabilmente lo stesso risultato si poteva raggiungere anche utilizzando le formule di Excel ma io con queste non sono bravo per cui preferisco il VBA.
Attendo un tuo riscontro.
Alfredo |
| | Post: 2 | Registrato il: 19/09/2017
| Città: LIVORNO | Età: 45 | Utente Junior | 2016 | | OFFLINE | |
|
21/09/2017 12:42 | |
ohhh miooo diooo sei un geniooooo!!!!
Se ottengo l'aumento si divide!!Ahahah mandami l'IBAN...
Scherzi a parte, non riuscirò MAI a fare una macro nonostante tu mi abbia scienzializzato
Quindi se io volessi applicare questa macro ad altro foglio di lavoro futuro...come diavolo farei?
Grazieeeeee
|
| | Post: 3.448 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
21/09/2017 14:55 | |
saraimbranata, 21/09/2017 12.42:
ohhh miooo diooo sei un geniooooo!!!!
Innanzi tutto ti ringrazio per le belle parole.
saraimbranata, 21/09/2017 12.42:
Quindi se io volessi applicare questa macro ad altro foglio di lavoro futuro...come diavolo farei?
Questa è una bella domanda ma mi metti in difficoltà perché per risponderti dovrei scrivere un libro .
Come hai visto Excel è un programma dalle grandi potenzialità ma se cominci ad usare il VBA lo puoi rivoltare come un calzino.
saraimbranata, 21/09/2017 12.42:
Scherzi a parte, non riuscirò MAI a fare una macro nonostante tu mi abbia scienzializzato
Su questo consentimi di dissentire; basta un po' di buona volontà e tanta passione che ogni ostacolo si supera.
Non esistono macro/codici buoni per tutte le stagioni ma questo dipende da cosa si vuole fare e dalla struttura del file che si vuole elaborare.
Se anche ti spiegassi riga per riga il codice che ti ho scritto dubito che riuscirai a comprenderlo pienamente (e non per mancanza di fiducia nei tuoi confronti.
Piuttosto fammi tu le domande che ritieni ed io cercherò di rispondere nella maniera più chiara (comprensibile) possibile.
In attesa di una tua raffica di domande ti saluto.
P.S. Quanto all'IBAN direi che se passassi per Livorno (o tu per Napoli) un caffè lo accetterei più che volentieri
[Modificato da alfrimpa 21/09/2017 15:58]
Alfredo |
| | Post: 3 | Registrato il: 19/09/2017
| Città: LIVORNO | Età: 45 | Utente Junior | 2016 | | OFFLINE | |
|
22/09/2017 12:21 | |
Wow Napoli, chissà magari ... una giratona!!!
Concordo con quanto hai detto, forse non si direbbe...ma mi piacerebbe davvero capire queste cose!
Forse un giorno avrò tempo anche per questo
Avevi detto parti con le domande??? ne ho solo una sei stupito vero???
Nel file che mi hai inviato te la colonna A dell'ordine (attualmente priva di numeri) non viene copiata nei vari fogli 113,204 etc
come faccio a farla venire?
Grazie ancora per la tua gentilezza
Ciao ciao
|
| | Post: 3.457 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
22/09/2017 14:16 | |
saraimbranata, 22/09/2017 12.21:
Nel file che mi hai inviato te la colonna A dell'ordine (attualmente priva di numeri) non viene copiata nei vari fogli 113,204 etc
come faccio a farla venire?
Aggiungendo l'istruzione nel punto che ti ho indicato
vb Sub Copia()
Dim i As Integer
Dim ur As Long
Dim lr As Long
Dim rng As Range
Dim cel As Range
Dim fgl As String
Dim scrt As Integer
ur = Worksheets("ORDINE").Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Worksheets("ORDINE").Range("D11:G" & ur)
For i = 4 To Sheets.Count
Sheets(i).Range("b13:d1000").ClearContents
Next i
For Each cel In rng
If cel.Value <> "" Then
fgl = CStr(Cells(10, cel.Column))
lr = Worksheets(fgl).Cells(Rows.Count, 2).End(xlUp).Row
Select Case cel.Column
Case Is = 4
scrt = -1
Case Is = 5
scrt = -2
Case Is = 6
scrt = -3
Case Is = 7
scrt = -4
End Select
Worksheets(fgl).Cells(lr + 1, 1).Value = cel.Offset(0, scrt - 2).Value '<======= Riga aggiunta
Worksheets(fgl).Cells(lr + 1, 2).Value = cel.Offset(0, scrt - 1).Value
Worksheets(fgl).Cells(lr + 1, 3).Value = cel.Offset(0, scrt).Value
Worksheets(fgl).Cells(lr + 1, 4).Value = cel.Value
End If
Next cel
MsgBox "Copia effettuata"
Sheets("ORDINE").Range("A1").Select
End Sub
Riesci da sola a fare la modifica?
Mi aspettavo molte domande e te ne esci con una sola?
Comunque provo a commentarti il codice magari ti può essere utile
Alfredo |
| | Post: 3.458 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
22/09/2017 14:40 | |
Dunque Sara ci provo
Con queste istruzioni dichiaro le variabili che mi occorrono durante la procedura
vb Dim i As Integer
Dim ur As Long
Dim lr As Long
Dim rng As Range
Dim cel As Range
Dim fgl As String
Dim scrt As Integer
Memorizzo nella variabile ur il numero di riga dell'ultima cella piena in colonna B
vb ur = Worksheets("ORDINE").Cells(Rows.Count, 2).End(xlUp).Row
Imposto nella variabile rng (di tipo Range) l'intervallo che mi occorre analizzare ossia D11:G ed il valore della variabile ur; con questo sistema avremo sempre degli intervalli dinamici e non fissi.
vb Set rng = Worksheets("ORDINE").Range("D11:G" & ur)
Qui imposto un ciclo For per cancellare tutti i dati eventualmente preesistenti nell'intervallo B13:D1000 di tutti i fogli a partire dal quarto fino all'ultimo della cartella.
vb For i = 4 To Sheets.Count
Sheets(i).Range("b13:d1000").ClearContents
Next i
Ora viene la parte un po' più complicata; con le istruzioni che vedi sotto imposto un ciclo For (diverso da quello precedente) in cui faccio una serie di cose.
Se il contenuto di ogni cella dell'intervallo che stiamo esaminando (D11:Gxx) è diverso da vuoto
memorizza nella variabile fgl il contenuto della cella riga 10 e colonna della cella in esame: in pratica il nome degli edifici
vb fgl = CStr(Cells(10, cel.Column))
con questo memorizzo nella variabile lr l'ultima riga piena della colonna B del foglio dell'edificio in precedenza individuato
vb lr = Worksheets(fgl).Cells(Rows.Count, 2).End(xlUp).Row
./. continua.....
[Modificato da alfrimpa 22/09/2017 14:42]
Alfredo |
| | Post: 3.459 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
22/09/2017 14:59 | |
Con questo ciclo imposto la variabile scrt un determinato valore (che mi servirà po) in dipendenza del numero della colonna della cella esaminata
vb Select Case cel.Column
Case Is = 4
scrt = -1
Case Is = 5
scrt = -2
Case Is = 6
scrt = -3
Case Is = 7
scrt = -4
End Select
Con queste istruzioni vado a dire che i valori della cella vuota del foglio dell'edificio colonne A,B, C e D sono uguali allo scarto (colonne precedenti in base al valore della variabile scrt della cella in esame)
vb Worksheets(fgl).Cells(lr + 1, 1).Value = cel.Offset(0, scrt - 2).Value '<======= Riga aggiunta
Worksheets(fgl).Cells(lr + 1, 2).Value = cel.Offset(0, scrt - 1).Value
Worksheets(fgl).Cells(lr + 1, 3).Value = cel.Offset(0, scrt).Value
Worksheets(fgl).Cells(lr + 1, 4).Value = cel.Value
Con questa visualizzo il messaggio "Copia effettuata".
Infine con questa seleziono la cella A1 del foglio "Ordine"
vb Sheets("ORDINE").Range("A1").Select
Ora tu mi dirai che come "professore" non valgo una cicca ma ho cercato di fare del mio meglio.
Di più penso che si potrebbe fare solo con una chiacchierata al telefono
Qualora fossi interessata fammelo sapere
Alfredo |
| | Post: 4 | Registrato il: 19/09/2017
| Città: LIVORNO | Età: 45 | Utente Junior | 2016 | | OFFLINE | |
|
25/09/2017 10:17 | |
Ecco qua che è comparsa la colonna A...ora è tutto perfetto! Siiii ci sono riuscita ad aggiungere la riga da modificare e sono già felice così...basta poco che ce vò!!!
Grazie ancora...davvero tante grazieee!!! |
| | Post: 3.463 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
25/09/2017 10:23 | |
Ok Sara mi fa piacere.
Quindi ti è tutto chiaro? [Modificato da alfrimpa 25/09/2017 10:27]
Alfredo |
| | Post: 3.464 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
25/09/2017 10:27 | |
saraimbranata, 25/09/2017 10.17:
Ecco qua che è comparsa la colonna A...ora è tutto perfetto! Siiii ci sono riuscita ad aggiungere la riga da modificare e sono già felice così...basta poco che ce vò!!!
Grazie ancora...davvero tante grazieee!!!
Hai visto che "imbranata" non sei?
Alfredo |
| | Post: 5 | Registrato il: 19/09/2017
| Città: LIVORNO | Età: 45 | Utente Junior | 2016 | | OFFLINE | |
|
26/09/2017 11:47 | |
|
|
|