Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Riempire Celle Partendo Da ActiveCell.

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 15/06/21 17:43

Ciao a tutti… Mi sono perso nei meandri della rete per trovare delle semplici, aggiungo elementari
risposte e non le ho neanche trovate!

Ormai è arcinoto che spostarsi a dx, sx, su e giù c’è Offset(x,y) molto semplice, concreto e diretto.
MA! se (x,y) non esistono come fai a spostati?

Con un po' di :oops: chiedo aiuto a tutto il Forum, se possibile, avere risposte alle seguenti domande:

1a) dalla cella attiva (o selezionata), in una riga di numeri, come faccio a:
• spostarmi, stessa riga, verso sx (o dx) fino a trovare la prima cella che è diversa da numeri?
• spostarmi, stessa riga, verso sx (o dx) fino a trovare una parola tipo Pippo oppure una della 11 ruote (BA, CA…RN)?

Quello che trovi, dalla ricerca, lo scrivi in una cella ad esempio la AM38.

2b) dalla cella attiva (o selezionata), in una colonna di testo (o stringhe), come faccio a:
• spostarmi, stessa colonna, verso su (o giù) fino a trovare la prima cella che è diversa da testo?
• spostarmi, stessa colonna, verso su (o giù) fino a trovare un numero?

Quello che trovi, dalla ricerca, lo scrivi in una cella ad esempio la AO38.

Ho già realizzato il ciclo, con le relative macro, per “recuperare” le frequenze delle ripetizioni ma servono
le chiavi di ricerca, che ogni macro legge in celle separate (4 o 5 celle di cui tre sono capace a riempirle le
altre due le scrivo a mano).
Questo aiuto serve proprio per riempire le celle ed evitare di interrompere il ciclo.

Ringraziando anticipatamente tutti coloro che mi possono aiutare. 73 ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Riempire Celle Partendo Da ActiveCell.

Postdi Anthony47 » 15/06/21 23:36

Andiamo sul modo piu' modulare con cui puoi affrontare molte delle esigenze citate.

Partiamo a questo codice:
Codice: Seleziona tutto
Set rBase = Range("E9")
'
For I = 1 To 100
    If IsNumeric(rBase.Offset(0, I).Value) Then
        Set Found = rBase.Offset(0, I)
        Exit For
    End If
Next I

Questo codice parte dalla cella E9 (ma decidi tu da dove partire) e cerca verso destra; quando trova una cella con contenuto numerico allora imposta la variabile Found con la posizione relativa; se ti serve l'indirizzo puoi usare Found.Address; se ti serve il valore farai Found.Value
Se vuoi trovare una cella con contenuto non numerico potrai usare If Not IsNumeric(rBase.Offset etc etc

Se vuoi trovare ua cella che contiene una stringa allora invece di If IsNumeric(rBase.Offset(0, I).Value) Then potrai usare ad esempio If InStr(1, rBase.Offset(0, I).Value, "pippo", vbTextCompare) > 0 Then

Se invece di cercare verso dx vuoi cercare verso sx, allora invece di "I" nella istruzione Offset userai "-I"; dovrai interrompere la ricerca quando "-I" porti piu' indietro della colonna A=1
Per cercare verso il basso userai I come Offset di colonna (-I per andare verso l'alto)

Per i test puoi anche sfruttare le funzioni Excel, quali
Application.WorksheetFunction.IsNonText(Cella) /.IsNumber /.IsText /.IsError e forse qualcun'altra

Ma puoi anche usare una formula con l'istruzione EVALUATE; ad esempio
Codice: Seleziona tutto
Set rBase = Range("E9")
For I = 1 To 100
    If Evaluate("SUM(IFERROR(FIND(Foglio1!R1:R10," & rBase.Offset(0, I).Address & "),0))") > 0 Then
        Set Found = rBase.Offset(0, I)
        Exit For
    End If
Next I
Se l'intervallo Foglio1!R1:R10 contiene 10 stringhe allora il loop individuera' la prima cella che contiene una di quelle stringhe

Potrebbero essere delineate molti altri approcci, spero che tra questi possa gia' trovare spunti idonei per la tua situazione.
Avatar utente
Anthony47
Moderatore
 
Post: 17794
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 16/06/21 00:36

Grazie per aver risposto gentile come sempre... io la situazione non la conosco e il ciclo che "spazzola" righe e colonne e quando trova un valore si ferma su quel valore, per avere istruzioni di codice che non conosco so con certezza che è la cella attiva o selezionata e da qui deve prendere i riferimenti a riempire due celle come spiegato ... Comunque domani vedo se riesco a capire cosa hai scritto e come lo posso utilizzare per adesso buona notte ... cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14

Re: Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 16/06/21 14:45

Gentilissimo Anthony … Dopo ore di prove applicando i tuoi preziosi consigli sono riuscito a completare la macro che mi necessita.

Ha un piccolo neo che non riesco a risolvere. Con questa istruzione [Range("AO38") = cBase.Offset(-C, 0).Value] scrive in cella AO38 il numero che ha trovato in colonna va bene è giusto però per essere “compatibile” con le stringhe radice deve essere
scritto nel seguente modo:

se [cBase.Offset(-C, 0).Value] = da 1 a 9 in cella AO38 si scrive C-01 fino a C-09
se [cBase.Offset(-C, 0).Value] = da 10 a 18 in cella AO38 si scrive C-10 fino a C-18

Con un esempio pratico [cBase.Offset(-C, 0).Value] =2 --> in cella AO38 si scrive C-02 (aggiunge C - trattino e lo zero)
altro esempio [cBase.Offset(-C, 0).Value] =13 --> in cella AO38 si scrive C-13 (aggiunge solo C- e trattino)

Se riesci ad aggiungere questa riga di codice ne sarei contento.


Brevemente descrivo la macro in allegato;
1a) Dalla cella attiva parte un ciclo verso sx (stessa riga) e trova una delle seguenti ruote BA, CA… RN) e trovata scrive in cella AM38 quello che ha trovato.

2b) Questa posizione si setta come cella attiva e, da questa posizione, parte un secondo ciclo, in colonna verso l’alto e continua finché non trova il primo numero che viene scritto in AO38.

3c) Si dovrebbe convertire il numero per compatibilità con le stringhe radice (questo non lo so fare)


In allegato un foglio di nome “Tab18” e selezionando con il mouse un numero evidenziato della FC e cliccando sulla bandiera si nota che nelle celle su descritte (AO38 e AM38) vengono riportate le ricerche eseguite dalla macro.


Ringraziandoti mille e mille volte per il tuo aiuto e per le info preziose e dettagliate cordialmente ikwae

http://www.filedropper.com/7riempirecel ... vecellrete


Codice: Seleziona tutto
Sub Riempi_Celle_Rete()
Set rBase = ActiveCell'
For I = 1 To 11

If InStr(1, rBase.Offset(0, -I).Value, "BA", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "CA", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "FI", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "GE", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "MI", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "NA", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "PA", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "RM", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "TO", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "VE", vbTextCompare) Or _
   InStr(1, rBase.Offset(0, -I).Value, "RN", vbTextCompare) > 0 Then
     
 'RIEMPIE LA PRIMA CELLA CON LA CHIAVE DI RICERCA
   Range("AM38") = rBase.Offset(0, -I).Value
     
        Exit For
    End If
Next I

rBase.Offset(0, -I).Select

Set cBase = ActiveCell
'
For C = 1 To 11

If IsNumeric(cBase.Offset(-C, 0).Value) Then
 
'RIEMPIE LA SECONDA CELLA CON LA CHIAVE DI RICERCA
 Range("AO38") = cBase.Offset(-C, 0).Value

Exit For
    End If
Next C
End Sub
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14

Re: Riempire Celle Partendo Da ActiveCell.

Postdi Anthony47 » 16/06/21 19:21

Se riesci ad aggiungere questa riga di codice ne sarei contento
Quanto richiesto dovrebbe corrispondere all'uso di
Codice: Seleziona tutto
Range("AO38") = "C-" & Format(cBase.Offset(-C, 0).Value, "00")

(invece che Range("AO38") = cBase.Offset(-C, 0).Value)

La seconda parte ho capito che riguarda solo la descrizione di come hai usato quanto da me suggerito all'interno del tuo ambiente. Se funziona e' perfetto cosi'; con l'unico commento che io invece dei 10 If in sequenza avrei usato l'istruzione Evaluate con l'elenco delle 10 sigle scritte in Foglio1R1:R10 (o in altro posto a piacere, adattando l'istruzione)

Cia
Avatar utente
Anthony47
Moderatore
 
Post: 17794
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 16/06/21 21:04

Gentilissimo Anthony … La tua modifica, da me richiesta, è molto efficace funge meravigliosamente.
Sono andato in rete a trovare sia Format, che non la conoscevo proprio, e in particolare Evaluate
perché ho decine di macro con righe di codice chilometriche di OR e se riesco a capire come fare le posso
sostituire tutte. Prima però devo pensare alle frequenze delle ripetizioni…
In questo post ho aggiunto un piccolo ma efficace “mattoncino” con le tue indicazioni e info preziosissime.

Ringraziandoti mille e mille volte per la tua disponibilità e del tuo prezioso aiuto. cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14

Re: Riempire Celle Partendo Da ActiveCell.

Postdi Anthony47 » 17/06/21 14:41

Per evitare equivoci, probabilmente 10 OR messi in fila saranno pure noiosi da scrivere, ma probabilmente sono piu' veloci da eseguire che non una singola formula da calcolare.
Diciamo che "Evaluate" e' uno dei tanti strumenti che il vba mette a disposizione per eseguire e controllare le operazioni, non e' certo una panacea; a parte che vanno scritte intanto in inglese, spesso ci si "impappina" nella stesura della stringa di formula, perche' in vba siamo abituati a scrivere Sheets("NomeFoglio").Range("A2:A100") ma nella formula dobbiamo convertire in NomeFoglio!A1:A100 concatenando il tutto con altre stringhe che spesso non si incastrano per produrre la giusta formula.

Comunque, come sempre, prova e riprova e' la via maestra per imparare

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17794
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 17/06/21 23:18

Gentilissimo Anthony … ieri stesso ho cercato in rete qualche indicazione sull’utilizzo pratico dell’istruzione Evaluate ma sono tutte in inglese e, dopo l’aggiornamento al mio sistema, mi avrà tolto il traduttore che uso normalmente e lo devo reinstallare ma non ci riesco (per adesso) la prima volta è stato semplicissimo installarlo adesso non ne vuole sapere…

Quindi ti volevo chiedere se puoi riscrivere, naturalmente se hai tempo e voglia, la mia misera macro per avere una indicazione di come usare l’istruzione Evaluate e capire come si “eliminano” tutte le linee di codice inerente agli OR.

Per dire la verità a me piacciono molto le file di Or oppure di AND mi danno un senso di tranquillità di non sbagliare perché leggi tutto di seguito sia il nome delle celle sia le ruote come in questo caso.

Come velocità è trascurabile deve solo riempire 5 celle il lavoro “massiccio” lo fa la macro dopo che è una variante della “Sveltina” modificata da te con il solo ciclo…

Penso che per te sia molto semplice convertire la mia semplice macro se togliamo gli Or rimarranno penso 10 righe.

:oops: Rispondo solo adesso al tuo messaggio perché adesso ho acceso il pc per la rete a scaricare le schedine e ogni volta che accendo il pc per la rete immancabilmente, diciamo sempre, vengo sul sito a leggere eventuale e varie…

Ringraziandoti mille e mille volte per la tua disponibilità e del tuo prezioso aiuto. cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14

Re: Riempire Celle Partendo Da ActiveCell.

Postdi Anthony47 » 18/06/21 11:24

Se vuoi usare Evaluate al posto dei 10 If in OR tra di loro allora devi sostituire il primo ciclo della tua macro con
Codice: Seleziona tutto
Set rBase = ActiveCell '
For I = 1 To 11
    If Evaluate("SUM(IFERROR(FIND(Foglio1!R1:R10," & rBase.Offset(0, -I).Address & "),0))") > 0 Then
        Range("AM38").Value = ckStr
        Exit For
    End If
Next I

Presuppone che in Foglio1!R1:R10 siano scritte le sigle delle 10 ruote, senza celle vuote

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17794
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 18/06/21 12:02

Gentilissimo Anthony … immagino che Foglio1!R1:R10 si possa scrivere anche come Tab18!A1:A11 e poi altra cosa
Range("AM38").Value = ckStr che ckStr sia il frutto della ricerca perché non riesco a capire da dove arriva .... Comunque ho risposto velocemente e adesso faccio qualche prova comunque in ogni caso va bene lo stesso. Solitamente vado sul sito di Ennius per trovare le indicazioni dettagliate ma per Evaluate non ha nulla. Come ripristino il traduttore trovo ancora qualche info... Grazie di cuore per tutto e per le tue preziose indicazioni e chiarimenti. cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14

Re: Riempire Celle Partendo Da ActiveCell.

Postdi Anthony47 » 18/06/21 12:43

Ehemm, al posto di ckStr devi usare rBase.Offset(0, -I).Value

Invece di Foglio1!R1:R10 puoi/devi scrivere l'area esatta in cui si trovano le stringhe di confronto (nell'area non devono esserci celle vuote; se vuoi preparare un elenco aperto agli ampliamenti allora le celle di riserva riempile con qualcosa di inesistente; io uso in questi casi zczc)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17794
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riempire Celle Partendo Da ActiveCell.

Postdi ikwae » 18/06/21 12:58

ok tutto a posto ho capito come fare. Grazie ancora cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 254
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Riempire Celle Partendo Da ActiveCell.":


Chi c’è in linea

Visitano il forum: Francesco53 e 57 ospiti