› Sviluppare funzionalita su Microsoft Office con VBA › confronto tra celle fogli diversi
-
AutoreArticoli
-
Buonasera.
Volevo esporvi la mia necessità per creare una macro per fare quanto di seguito.
Ho in un file il foglio 1 e il foglio 2.
Devo cercare nella riga 1 cella A1:BT1 del foglio2 la stessa data che si trova foglio1 es.(01/03/2023)
Vorrei che la macro cercasse la data che inserisco nel foglio1 cella A1 nella riga 1 cella A1:BT1 del foglio 2 e se la trova si posizioni sulla cella dove c'è la stessa del foglio1.
Ho creato un file con vari moduli ma non riesco a far funzionare niente, se qualcuno mi aiuta.
Allego il file e ringrazio
Allegati:
You must be logged in to view attached files.prova
trovi un pulsante sul foglio 1 e la macro nel modulo 6
Option Explicit Sub cerca() Dim area_cerca As Range, r As Long, c As Long, cercato As Date, trovato As Object, sh As Worksheet Set sh = Sheets("Foglio2") Set area_cerca = sh.Range("a1:bt1") With sh cercato = Sheets("Foglio1").Range("a1") With area_cerca Set trovato = .Cells.Find(cercato, LookIn:=xlValues, lookat:=xlWhole) If Not trovato Is Nothing Then r = trovato.Row c = trovato.Column Sheets("Foglio2").Activate Cells(r, c).Select End If End With End With Set sh = Nothing Set area_cerca = Nothing Set trovato = Nothing End Sub
Allegati:
You must be logged in to view attached files.Un codice molto pulito Frank
In alternativa a questo:
Sheets("Foglio2").Activate
Cells(r, c).Selectsi può scrivere:
application.goto worksheets("Foglio2").cells(r, c)
ciao
vecchio trentino
anche noi veneti abbiamo termini in VBA
ma non penso abbiano lo stesso significato
nemo a farse on GOTO
Ocio
che io ho parenti di Cologna Veneta e quindi il riferimento è chiarissimo anche per me,
e mi trovi d'accordo... ndémo tósi
ok,
ti sei loggato ieri sera e due volte questa mattina intorno alle 8:30 ed alle 10:00
ed in tutte le occasioni non ti sei degnato di dare UN MINIMO di riscontro.
Sicuramente sei preso come non mai dal lavoro...
il 18/08/2023 è notorio che sia una giornata in cui non si trova nessuno disposto a lavorare per risolverti un problema....
figuriamoci per rispondergli nel caso gli venisse un ictus e dovesse mai proporti una soluzione
Aggiorno il mio data base per ricordarmi di non risponderti in futuro
Mi Scuso per la distrazione e un periodo di molte problematiche provvedo subito a attivare il "risolto"al mio quesito,
Il mio problema è stato risolto applicando il suggerimento di Tanimon che ringrazio infinitamente.
attendo il "risolto"
Mi Scuso per la distrazione
distrazione???
dopo tre volte che ti logghi....?!?!?!?!?
Cari utenti..... siete noiosi.....
ho già passato e chiuso su freeforum per un utente analogo a te.....
non sarete mica lo stesso con un nick diverso.....
che bello frequentare i forum.... ognuno pensa ai fatti propri,
"che ce ne fega di chi perde tempo... per aiutarci... vuol dire che non ha niente da fare...."
Sicuro????
Io di di tempo ne ho poco.... gli altri non so... facciano quello che credono!
Frank, oggi sei particolarmente scavolato, più del solito
più del solito
ciao Francesco,
"purtroppo" non è così: oggi sono relativamente "in buona", spesso quando è peggio mi astengo...
e non rispondo.....
Fondamentalmente, come credo e spero succeda a te,
è che sono come SANDRA MONDAINI: "che noia, che barba... io sono stufo...."
e muovo i Threads con i piedi.... non li vedi "svolazzare"?
Perché, nel tuo codice, "trovato" è di tipo Object invece che Range?
"trovato" è di tipo Object invece che Range
me lo hai insegnato tu
trovato è un oggetto dell'insieme Range.Cells
prova a cambiarlo.... in range, forse funziona lo stesso. ma con Object sono + sicuro.
In altri files in cui l'ho impostato Range, come la logica suggerisce... non funzia.....
Applicato a un intervallo di celle, Find restituisce una cella quindi un oggetto di tipo Range.
Non è che Object sia sbagliato, ma è poi compito di Excel capire che si tratta di un Range 🙂Ho sperimentato anche che non trovo risultati con xlValues quale parametro di Find (con xlFormulas funziona).
Credo che sia colpa di questo Excel 2007 preistorico.
Comunque propongo un'alternativa più stringata al tuo codice
Option Explicit Sub cerca() Application.Goto Worksheets("Foglio2").Cells(1, [IFERROR(MATCH(Foglio1!A1,Foglio2!A1:BT1,0),1)]) End Sub
Editato: per eventuale errore di valore non trovato
Comunque propongo un'alternativa più stringata al tuo codice
non verifico e non dubito della funzionalità dell'alternativa che hai proposto.
difficilmente utilizzo in vba le funzioni native di excel in quanto da sempre,
ho avuto il pallino di decidere in autonomia cosa deve fare il computer....
pura utopia..... ma ci provo.... SEMPRE.... e spesso non ci riesco....
difficilmente utilizzo in vba le funzioni native di excel
Io ancor meno di te 🙂
Soprattutto perché il 90% dei miei prodotti è in Access.
Ma... qui parliamo di un progettino in Excel e tanto per far vedere che ci sono soluzioni diverse, ecco il suggerimento.
Quanto a decidere cosa deve fare il pc, concordo, ma allora ci vorrebbe l'assembly (sto rinverdendo i ricordi del MOS 6502, il chip del VIC20... vuoi unirti?).
Utopia? ma no, l'importante è provarci. Almeno ti distrai e ti passa l'incaxxatura verso gli utenti 😀non verifico e non dubito della funzionalità dell'alternativa che hai proposto
Sbagliato! Sempre verificare e, volendo/potendo, correggere.
Quanto a decidere cosa deve fare il pc, concordo, ma allora ci vorrebbe l'assembly (sto rinverdendo i ricordi del MOS 6502, il chip del VIC20... vuoi unirti?).
grazie mi piacerebbe,
ma come sai ho poco tempo.... ed inoltre dovrei partire a fare i conticini
partendo dalle stanghe.... esempio |+ | + | = 3 stanghe....
già faccio fatica con Vba......
-
AutoreArticoli