spostare il valore di una cella in un altra con una formula

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
dianad
00martedì 1 marzo 2016 15:21
Buongiorno,mi chiamo Diana e sono nuova.
Ho 4 celle adiacenti(nella stessa riga)con dei valori nelle prime tre, ed una condizione nella quarta.
Vorrei spostare il valore delle tre celle, in altre tre celle sottostanti solo quando mi si avvera la condizione nella quarta.
Cancellando il valori nelle prime tre.

Non so se mi sono spiegata! Scusate i termini [SM=x423023]
alfrimpa
00martedì 1 marzo 2016 15:46
Ciao Diana

Quello che chiedi non è possibile farlo con una formula in quanto le formule effettuano dei calcoli (in base a dei parametri) e non compiono "azioni" ( e lo spostare è un' "azione").

Occorre quindi ricorrere ad una macro.

Allega un tuo file di esempio in cui mostri il risultato che vuoi ottenere.
dianad
00martedì 1 marzo 2016 16:08
Praticamente vorrei mi spostasse A11,B11 e G11 in A30,C30 e H30 quando J11 diventa "V".
e A11,B11 e G11 mi tornassero vuoti e di conseguenza in J11 tornasse il "no".
E sempre se possibile che quando avviene questo spostamento mi venisse in M30 la data in cui avviene.
alfrimpa
10martedì 1 marzo 2016 18:19
Ciao Diana

Prova a vedere il file che ti allego e nel quale ho inserito la sottostante macro che puoi eseguire cliccando sul pulsante "Macro"

Sub macro1()
Dim ur As Integer
Dim rng As Range
Dim cel As Range
Set rng = Range("J11:j24")
Application.ScreenUpdating = False
For Each cel In rng
ur = Cells(Rows.Count, 1).End(xlUp).Row
    If cel.Value = "V" Then
        Range("a" & ur + 1) = Range("a" & cel.Row)
        Range("c" & ur + 1) = Range("b" & cel.Row)
        Range("h" & ur + 1) = Range("g" & cel.Row)
        Range("m" & ur + 1) = Date
    End If
Range("A" & cel.Row).ClearContents
Range("B" & cel.Row & ":" & "E" & cel.Row).ClearContents
Range("g" & cel.Row & ":" & "i" & cel.Row).ClearContents
Next cel
Application.ScreenUpdating = True
End Sub


Questo è solo un primo passo perché, secondo me, le cose poi da rivedere saranno molte.

Prova un po' il file e fammi sapere.
dianad
00martedì 1 marzo 2016 18:42
Grazie mille, è fantastico, modifico solo questo:
('Range("g" & cel.Row & ":" & "i" & cel.Row) = ".")

perche se non ce niente ho problemi con la formattazione condizionale, e spero sia giusto farlo cosi.
Ce solo il problema che quando schiaccio il pulsante mi cancella tutto non solo quelli con la "v".
Comunque è molto probabile che ci sia tutto da rivedere, perchè ho iniziato ad usare excel da una settimana, quindi non so molto. Tu cosa modificheresti?

Ed un altra domanda, facendo cosi, non è che ogni volta che schiaccio il pulsante macro mi scrive la data in cui schiaccio il pulsante. Nel senso se io lo schiaccio oggi mi scrive la data odierna (1/03/16), se lo schiaccio domani mi va a modificare la data (1/03/16) o mi scrive (02/03/16) solo in quelli che andro ad "abbassare" domani?

Grazie mille davvero
alfrimpa
00martedì 1 marzo 2016 19:50
Ciao Diana

Prova a sostituire la macro precedente con questa

Sub macro2()
Dim ur As Integer
Dim rng As Range
Dim cel As Range
Dim cel1 As Range
Set rng = Range("J11:j24")
Application.ScreenUpdating = False
For Each cel In rng
        ur = Cells(Rows.Count, 1).End(xlUp).Row
        If cel.Value = "V" Then
            Range("a" & ur + 1) = Range("a" & cel.Row)
            Range("c" & ur + 1) = Range("b" & cel.Row)
            Range("h" & ur + 1) = Range("g" & cel.Row)
            Range("m" & ur + 1) = CStr(Date)
        End If
    For Each cel1 In rng
        If cel1.Value = "V" Then
            Range("A" & cel.Row).ClearContents
            Range("B" & cel.Row & ":" & "E" & cel.Row).ClearContents
            Range("g" & cel.Row & ":" & "i" & cel.Row) = "."
        End If
    Next cel1
Next cel
Application.ScreenUpdating = True
End Sub


Dovrebbe essere andato a posto (se c'era) anche il problema della data del giorno dopo.

Ora devo scappare; ci risentiamo domani.
dianad
00mercoledì 2 marzo 2016 13:24
Ciao Alfredo
Intanto grazie mille per l' aiuto, ho leggermente modificato la tabella inserendo la colonna L, cosi invece di spostarli quando su (J11:J24) c'è la "V" meli sposta quando su (L11:L24) c'è un "si". Ed ho gia modificato anche la macro.
Tuttavia rimane il problema che mi sposta tutto e non solo quelli che avevano la "v" o adesso il "si".
Il secondo problema è la data perche mettendo il formato "1- gen", mi scrive "3-feb" però siamo a marzo!
Ti riallego il file

'la macro che c'è ora e questa:

Sub macro1()

Dim ur As Integer
Dim rng As Range
Dim cel As Range
Dim cel1 As Range
Set rng = Range("L11:L24")
Application.ScreenUpdating = False
For Each cel In rng
ur = Cells(Rows.Count, 1).End(xlUp).Row
If cel.Value = "si" Then
Range("a" & ur + 1) = Range("a" & cel.Row)
Range("c" & ur + 1) = Range("b" & cel.Row)
Range("h" & ur + 1) = Range("g" & cel.Row)
Range("m" & ur + 1) = CStr(Date)
End If
For Each cel1 In rng
If cel1.Value = "si" Then
Range("A" & cel.Row).ClearContents
Range("B" & cel.Row & ":" & "E" & cel.Row).ClearContents
Range("g" & cel.Row & ":" & "i" & cel.Row) = "."
End If
Next cel1
Next cel
Application.ScreenUpdating = True
End Sub
alfrimpa
00mercoledì 2 marzo 2016 13:28
Ciao Diana

Ma non hai detto se la macro funziona come vorresti.

Se no, che problemi ci sono?
dianad
00mercoledì 2 marzo 2016 13:31
Ciao scusa ti ho scritto tutto sopra ora,pero non riesco piu a caricarti il file!
alfrimpa
00mercoledì 2 marzo 2016 13:44
Per caricare il file (essendoci le macro quindi con estensione .xlsm) devi prima zipparlo ed allegare il file compresso.
alfrimpa
00mercoledì 2 marzo 2016 13:54
Ciao Diana.

Volevo solo dire una cosa in generale.

Quando si ha intenzione di usare macro/VBA su un foglio di lavoro le celle unite vanno evitate come la peste perché causano più problemi che benefici (ovviamente mia opinione personale).

Io infatti nello scrivere la macro ho dovuto aggirare l'ostacolo utilizzando una strada diversa da quella cui inizialmente avevo pensato.

Scusa ma tu che data inserisci? Io sul file che ho io ho immesso 1-3 e mi viene correttamente visualizzato 01-mar.

Non capito la prima domanda ma spero di farlo quando avrò visto il file.
dianad
00mercoledì 2 marzo 2016 14:05
Spero di aver fatto giusto, non sono molto pratica scusa!
Comunque intendo la data che viene scritta automaticamente nella tabella sotto.
Per le celle unite potrei ovviare il problema inserendo una vera e propria tabella sopra, però poi non saprei piu come far spostare i dati dalla prima alla seconda tabella in automatico come avviene ora.
alfrimpa
00mercoledì 2 marzo 2016 15:14
Ciao Diana

Non ti devi scusare di nulla

Se nel tuo file hai aggiunto colonne occorre rivedere tutto il codice perché non ci troviamo più.

Per le celle unite lascia stare; dovrebbe funzionare ugualmente.

Anche la data credo sia andata a posto.

Ora devo uscire (ahimè un funerale); tra stasera e domani mattina cerco di riallegarti il file spero funzionante come desideri.
dianad
00mercoledì 2 marzo 2016 15:21
Grazie mille, condoglianze.
A stasera o domani [SM=x423053]
alfrimpa
00giovedì 3 marzo 2016 14:40
Ciao Diana

Ti allego file (dianadnuovo.xlsm) sul quale non ho dovuto fare nulla se non aggiungere le istruzioni per la cancellazione del range L11:L24.

A me pare che funzioni bene ma solo tu puoi dirlo con certezza; fai delle prove e fammi sapere.

Sub macro1()
Dim ur As Integer
Dim rng As Range
Dim cel As Range
Dim cel1 As Range
Set rng = Range("l11:l24")
Application.ScreenUpdating = False
For Each cel In rng
        ur = Cells(Rows.Count, 1).End(xlUp).Row
        If cel.Value = "si" Then
            Range("a" & ur + 1) = Range("a" & cel.Row)
            Range("c" & ur + 1) = Range("b" & cel.Row)
            Range("h" & ur + 1) = Range("g" & cel.Row)
            Range("m" & ur + 1) = Date
        End If
    For Each cel1 In rng
        If cel1.Value = "si" Then
            Range("A" & cel.Row).ClearContents
            Range("B" & cel.Row & ":" & "E" & cel.Row).ClearContents
            Range("g" & cel.Row & ":" & "i" & cel.Row) = "."
        End If
    Next cel1
Next cel
Range("l11:l24").ClearContents
Application.ScreenUpdating = True
End Sub


P.S. Ma il "si" nel range L11:L24 lo scrivi tu manualmente? Se è così si può anche evitare l'uso del pulsante per il lancio della macro ma far partire l'esecuzione di questa nel momento in cui digiti "si" e batti INVIO in una delle celle L11:L24.

Sono stato chiaro?
dianad
00giovedì 3 marzo 2016 17:00
Ciao Alfredo

Si, il si lo inserisco manualmente.
Forse sono io che mi spiego male, la cosa funziona perche mi sposta le celle con il "si" sotto, ma mi cancella anche tutte le altre (quelle con il "no"). Io voglio che mi rimangano nella tabella i valori con il "no" e mi sposti e cancelli solo quelle con i "si", ma i no devono rimanere.

Grazie Diana
alfrimpa
00venerdì 4 marzo 2016 11:58
Ciao Diana

Prova un po' il file che ti ho allegato e fammi sapere.
dianad
00venerdì 4 marzo 2016 12:22
Ciao Alfredo, funziona perfettamente! Grazie mille [SM=x423038]
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 12:58.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com