› Excel e gli applicativi Microsoft Office › copia valori su celle filtrate
-
AutoreArticoli
-
ciao, volevo allegarvi 1 file di esempio ma non riesco a trovare l'opzione allega....
il codice sotto funziona se nelle colonne della tabella ho le celle compilate (col G,H,I dove vado a lavorare), se invece sono tutte celle vuote non va. mi potete aiutare?
inoltre: COME POSSO COPIARE I VALORI AL POSTO DELLE FORMULE PER LE CELLE FILTRATE? DEVO PER FORZA SFILTRARE TUTTO?
grazie1000
Sub test()
Selection.End(xlDown).Select
nriga = Selection.RowActiveSheet.Range("$A$10:$G$10").AutoFilter Field:=1, Criteria1:="sa"
conta = Application.WorksheetFunction.CountIfs(Range("a:a"), "sa")
If conta >= 1 Then
Cells(1, 1).Value = "ho trovato " & conta & " volte sa"
Range(Range("G" & 11), Range("G" & Rows.Count).End(xlUp).Offset(1, 0)).Value = "ALLA GRANDE"
Range("G1:H1").Select
Selection.Copy
Range(Range("H" & 11), Range("I" & Rows.Count).End(xlUp).Offset(1, 0)).Select
ActiveSheet.Paste
Calculate' Range(Range("H" & Rows.Count), Range("I" & Rows.Count).End(xlUp).Offset(1, 0)).Select
' Selection.Copy
' Selection.PasteSpecial
Else
Cells(1, 1).Value = "non ho trovato niente"
End If
End Subvolevo allegarvi 1 file di esempio ma non riesco a trovare l'opzione allega
Devi essere registrato al Forum per poter allegare file (e per poter leggere gli allegati).
ecco il file di esempio, grazie x supporto
Allegati:
You must be logged in to view attached files.ActiveSheet.Paste
sostituisci la riga di codice sopra con questa
Selection.PasteSpecial xlPasteValues
Non Vecchio Frac , ma bensi Alberto(quote fa le bizze )
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Il quote fa le bizze con gli utenti non registrati, Admin ci sta lavorando ma non è di semplice soluzione.
COPIARE
Provale quota utenti non registrati X Admin
Buongiorno a tutti
Penso che la cosa migliore sia "disabilitare" il pulsante se un Utente non è registrato. Vuol dire che chi vuole "citare" fa il copia/incolla della frase ed indica l'Autore.
Vista la difficoltà di sistemazione "interna" credo sia una soluzione praticabile.
Ciao,
Mario
ciao a tutti, grazie per il supporto, perfetto il "Selection.PasteSpecial xlPasteValues", però ho ancora un problema, ovvero se il contenuto delle celle (nelle colonne G, H e I) è vuoto (a parte l'intestazione), la macro non fa quello che vorrei, ovvero non mi copia le informazioni desiderati nelle righe per cui nella colonna A c'è scritto "sa".
grazie ciao Alberto
Io avrei riscritto il tuo codice in modo più semplice e funzionale. Nella maggior parte dei casi io preferisco non coinvolgere Copy e Paste (o PasteSpecial) soprattutto se devo copiare solo valori: è molto più veloce assegnare a un range la proprietà Value di un altro range. Vorrei anche raccomandare l'utilizzo di Option Explicit in testa ai vostri moduli.
Option Explicit Sub test() Dim conta As Long Dim r As Range Dim rw As Range Range("A1").Select ActiveSheet.Range("$A$10:$G$10").AutoFilter Field:=1, Criteria1:="sa" conta = [COUNTIF(A:A, "sa")] If conta >= 1 Then Range("A1") = "ho trovato " & conta & " volte sa" Set r = Range("A10").CurrentRegion.SpecialCells(xlCellTypeVisible) For Each rw In r.Rows If rw.Row > 10 Then Range(rw.Cells(7), rw.Cells(8)).Value = Range("G1:H1").Value End If Next Else Cells(1, 1).Value = "non ho trovato niente" End If ActiveSheet.AutoFilterMode = False MsgBox "Finito" End Sub
grazie mille vecchio frac, ho imparato nuove cose! sono molto soddisfatto
qualche curiosità: cosa serve l'istruzione option explicit?
invece questa istruzione: Range("A10").CurrentRegion.SpecialCells(xlCellTypeVisible) , si riferisce alla "matrice" filtrata?
infine con cells(7) e cells(8) indichi le colonne, io potrei indicizzare con delle variabili del tipo a=7 --> cells(a)
grazie ancora
Alberto
grazie mille vecchio frac, ho imparato nuove cose! sono molto soddisfatto
bene 🙂
cosa serve l'istruzione option explicit?
Su questo argomento ci siamo espressi già molte volte in passato, ci vorrebbe una trattazione più lunga che poche righe, in sostanza è una direttiva all'interprete basic che gli fa controllare se le variabili sono state dichiarate prima di utilizzarle (le variabili si dichiarano con l'istruzione Dim la quale permette di stabilire il tipo di dati che sono destinate a contenere). La dichiarazione di variabili obbligatoria è un aiuto in più al programmatore, perchè gli fa evitare errori di battitura (se all'inizio usi "pippo" ma poi per la fretta assegni qualcosa a "piipo", il fatto non aver dichiarato prima la variabile che si intende utilizzare farà sì che venga creata una nuova variabile, perdendo il contenuto di quella vera, con conseguenze imprevedibili).
si riferisce alla "matrice" filtrata?
cells(7) e cells(8) indichi le colonne
Sì, con Set r = ... abbiamo creato un riferimento alle sole celle "visibili" del range filtrato. Il ciclo For successivo analizza le righe di questo range filtrato e punta come ben dici alle colonne 7 e 8 (colonna G e H). Naturalmente puoi indicizzare questo valore, e usare delle variabili al posto delle costanti.
Ciao ho un ulteriore quesito da porti, se volessi aggiungere 1 passaggio al codice da te scritto:
1) nel range filtrato copiare le formule prese da 1 cella e fare calcolare il risultato (magari con istruzione "calculate"?)
2) ottenuto il risultato, trasformarlo in valori, mi riferisco sempre al range filtrato (si può? o bisogna prima eliminare il filtro e copiare/incollare la colonna?)
grazie ancora,
ciao Alberto
Preferirei un esempio concreto di risultato da ottenere, perchè spiegato così non ho capito molto.
1) le formule prese da una cella? quale? del range filtrato o esterna ad esso? "calcolare il risultato" non si fa con Calculate (che è un'istruzione che dice a Excel di ricalcolarsi le formule) ma eventualmente con Evaluate (o scrivendo la medesima formula in VBA, che magari coinvolge più celle)
2) ti riferiresti al range filtrato per farci cosa? incollarci il risultato? hai visto dal mio codice che puoi assegnare a una cella direttamente un valore senza passare dal copia incolla, quindi non ho capito cosa intendi.
Alla fine, non ho capito il passaggio ulteriore che vuoi raggiungere 🙂
hai ragione, cerco di essere più chiaro. io ho in celle esterne al range filtrato delle formule che vorrei replicare una volta che applico il filtro, all'interno di alcune celle delle righe filtrate.
quindi una volta preso queste celle "esterne" e copiate nelle righe filtrate, la formula mi da il risultato e poi vorrei toglierla lasciando il risultato ottenuto in valori.
grazie
in altri casi invece per me è perfetto assegnare il valore senza passare dal copia e incolla come hai fatto tu
Direi che anche nel caso della formula da calcolare, se poi alla fine ti serve solo il risultato, è inutile replicare le formule che si trovano in celle esterne al range filtrato, per poi consolidarle. Poichè sicuramente conosci già la formula (o le formule) in gioco, ti basta tradurle in VBA e ottenere così il valore da inserire nel range desiderato. In sostanza fai fare tutto al codice senza coinvolgere formule 🙂
Se la formula fosse una cosa tipo:
=E(A1=10;B1="pippo")
la corrispondete iastruzione VBA sarebbe così:
If A1 = 10 And B1 = "pippo" Then risultato = ...
e poi nella cella desiderata assegni semplicemente il valore di "risultato":
Range("cella in zona filtrata") = risultato
ok perfetto a breve applico quanto mi hai detto.
Grazie
Off topic: Ho creato una userform che mi lancia 1 calendario, come faccio a far si che quando si apre il calendario si posizioni sempre sulla data odierna? (ti servono info particolari, o esiste una istruzione che mi aiuti?)
ciao
quando si apre il calendario si posizioni sempre sulla data odierna
Hai creato un calendario in una userform? o il calendario è un'applicazione esterna che viene lanciata dal tuo userform? è un controllo ActiveX? come vengono restituite le date quando ne scegli una? probabilmente lo si può impostare in avvio con calendar.SetDate ... oppure calendar.Date = ... (presupposto che si chiami "calendar"), impossibile per me essere più preciso, dovresti dirmi di più su questa implementazione del calendario.
Ho creato 1 calendario in una userform, ecco codice di seguito:
Private Sub CAL_DateClick(ByVal DateClicked As Date)
Foglio1.Select
Range("M1").Value = DateClicked
Unload Me
End SubPrivate Sub Label1_Click()
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
MsgBox "Usare apposito pulsante per chiudere"
End If
End SubPrivate Sub CommandButton1_Click()
Unload Me
Foglio6.Range("L1").Value = 1
End SubImmagino che "CAL" sia il controllo calendario.
Nell'evento Initialize del tuo Userform dovrebbe bastare questo:
CAL.Value = Date
per impostare la data odierna.
si esatto, avevo provato anche io ma non va, forse non lo fa perché (non so se è giusto ciò che ti sto per dire) è di tipo dateclick?
il calendario mostra sempre quello che lascio visualizzato nella userform
Dovrei installarmi il controllo e provare
ciao, ma ti devo passare il file? ... scusa non ho capito
No sarebbe inutile perchè comunque non avrei il controllo installato... però potresti dirmi che controllo calendario hai installato, ce ne sono diversi 🙂
-
AutoreArticoli