Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Controllo contenuto celle: comportamento anomalo!

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

[Excel] Controllo contenuto celle: comportamento anomalo!

Postdi antom » 18/09/08 14:45

Salve a tutti.
Sto scrivendo una macro che deve fare le seguenti operazioni:

- controllare il contenuto di alcune celle
- se il contenuto di tutte le celle è vuoto ELIMINARE l'insieme di righe cui fanno parte le celle controllate e SPOSTARE IL TUTTO IN ALTO
- se il contenuto di almeno una cella non è vuoto passare al blocco di celle successivo.

Per il contenuto delle celle ho trovato queste istruzioni in http://archi.forumup.it/about325-.html&highlight=:
Codice: Seleziona tutto
Sub Elimina()
Dim CL As Range
Dim x As String
For Each CL In Range("A:A").Cells   'ovviamente devi indicare la TUA colonna
If CL = "" Then   
CL.Select
CL.EntireRow.Delete
End If
Next CL

End Sub

Quando vado a fare il controllo del contenuto delle celle, non so per quale strano motivo, la macro vi scrive VERO così da non verificare mai il then dell'if (VERO è il valore assunto dalla variabile cell....).

Di seguito riporto il mio codice anticipando che c'è un errore sulla posizione dell'incremento degli indici i e j:
Codice: Seleziona tutto
Sub cancRip()
'UltimaRiga = Range("B" & Rows.Count).End(xlUp).Row
   
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim n As Integer
Dim cell As Range

i = 3
j = 7
'n = Range("B" & Rows.Count).End(xlUp).Row
'InStr(1, c.FormulaR1C1, "", vbTextCompare)
'Range("C3,D3,E3,G3,G4,G5,G6,G7"): questo è il range di celle che mi interessa. Utilizzando i e j "generalizzo" il range

n = 100
For k = 1 To n
     Selection = Range("C" & i & "," & "D" & i & "," & "E" & i & "," & "G" & i & "," & "G" & i + 1 & "," & "G" & i + 2 & "," & "G" & i + 3 & "," & "G" & i + 4).Select  'seleziono le celle che mi interessano
            For Each cell In Selection
               If cell.FormulaR1C1 = "" Then    'faccio il controllo sul loro contenuto, ma la macro già ci scrive VERO
                    Range("B" & i & ":" & "G" & j).Select   'in caso seleziono il range che mi interessa
                    Selection.Delete Shift:=xlUp     'cancello la seleziono e faccio salire le righe

                    Else
                           i = i + 5     'se almeno una cella è piena allora mi sposto alle 5 righe successive
                           j = j + 5
               End If

           Next
Next
   
   
End Sub


Perchè scrive vero?
Come controllo la stringa contenuta nella cella senza modificarla?
Il For Each, in particolare, che tipo di variabili e tipi di dato si aspetta?

In allegato c'è un file di esempio sulla struttura del foglio (lo screenshot è riportato sul topic http://www.pc-facile.com/forum/viewtopic.php?f=26&t=75010)


Spero di essermi fatta capire. :-? :( :cry: :!:
Grazie a chiunque voglia aiutarmi.
antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Sponsor
 

Re: [Excel] Controllo contenuto celle: comportamento anomalo!

Postdi antom » 18/09/08 16:01

Scusate... ecco il file.
Grazie,
antom
Allegati

[L’estensione rar è stata disattivata e non puó essere visualizzata.]

antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] Controllo contenuto celle: comportamento anomalo!

Postdi Anthony47 » 18/09/08 21:14

Hai postato un file pieno di colori ma vuoto, che utilita' puo' avere?? :D

Poi, nel tuo messaggio elenchi due macro:
-la prima si riferisce a una ipotesi di soluzione non confermata dall' utente; se la fai lavorare su una sola colonna allora cancella la riga che trova vuota ma poi salta la verifica della riga successiva; se la fai lavorare su piu' colonne (mi pare sia quello che tu cerchi, vero?) allora ti cancella tutta la riga se trova una qualsiasi cella vuota.
Insomma, cercare il codice su altri forum non e' produttivo :D :D

-la seconda e' quella su cui hai lo strano errore? purtroppo eseguirla sul tuo file vuoto non mi da' nessuna informazione utile; certamente, se vuoi testare se una cella e' vuota, e' errata l' istruzione If cell.FormulaR1C1 = "" Then , avrebbe molto piu' senso If cell.Value = "" Then

Rimane il fatto che tu non vuoi sondare una unica cella, ma "tutte le celle", per cui non puoi basarti sul risultato del test su una unica cella; diciamo che puoi usare il risultato "Non vuoto" di una qualsiasi cella per darti "Falsa" la situazione che dovrebbe portare a elimina riga.

Infine c' e' un ulteriore dubbio: la macro seleziona celle su 5 righe e scrivi di voler eliminare l' insieme di righe se tutte le celle sono vuote; intendi "eliminare la singola riga che ha tulle le celle vuote", cioe' anche se altre celle della selezione corrente ma appartenenti ad altre righe sono piene? es, nel file vuoto pubblicato, eliminare la riga 8 se C8-D8-E8-G8 sono vuote ma magari e' piena G9? oppure non eliminare riga 8 (se almeno una cella tra C8-D8-E8-G8 e' piena) ma eliminare riga 10 se G10 e' vuota? o il test e' da fare "in blocco a tutto il blocco di dati" (es C8-D8-E8-G8-G9-G10-G11-G12), e quindi o si cancellano tutte le 5 righe o non se ne cancella nessuna?

Come vedi sono solo domande...
Ciao, fatti sentire.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Controllo contenuto celle: comportamento anomalo!

Postdi antom » 19/09/08 09:43

Ciao Anthony47.
Allora:
- ho un range di 30 celle;
- la sopravvivenza di queste 30 celle dipende dalla valorizzazione di 8 di esse;
scenario 1. TUTTE le 8 celle sono vuote (contemporaneamente) => CANCELLA LE 30 CELLE
(i.e. le 5 righe di cui fanno parte)

scenario 2. ALMENO UNA delle 8 celle è valorizzata => MANTIENI le 30 celle
(i.e. le 5 righe di cui fanno parte)
passa alle 30 celle successive in basso

Per quanto riguarda il file in allegato ho scritto "bla" ogni tanto creando i possibili scenari.
Io ho bisogno di salvare i blocchi di righe contrassegnate in verde e eliminare quelle contrassegnate in rosso.
Se tu semplicemente lanci la macro su qul foglio vedrai già dalle prime 7 righe cosa accade: la macro scrive VERO in tutte le celle su cui faccio il controllo.
Eseguendo le istruzioni passo passo con F8, il valore VERO è assunto dalla variabile cell e non capisco perchè mi va valorizzare le celle!!! Chi glielo dice???? :-? Per non parlare degli indici che mi vanno a controllare range strani, ma siccome la guardia dell'if lo fa "sbarellare" è un problema che non posso risolvere...

Spero di essermi fatta capire, so chè è un pò complicato!
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] Controllo contenuto celle: comportamento anomalo!

Postdi Anthony47 » 19/09/08 11:42

Quindi va esaminato il blocco di celle; dovrebbe andare bene questa modifica al corpo della tua macro:

Codice: Seleziona tutto
n = 100
For k = 1 To n
FlPieno = 0
      Range("C" & i & "," & "D" & i & "," & "E" & i & "," & "G" & i & "," & "G" & i + 1 & "," & "G" & i + 2 & "," & "G" & i + 3 & "," & "G" & i + 4).Select  'seleziono le celle che mi interessano
            For Each cell In Selection
            If cell.Value <> "" Then FlPieno = FlPieno + 1
            Next cell
               If FlPieno = 0 Then     'se tutte vuote...
                    Range("B" & i & ":" & "G" & j).Select   '  ...seleziono il blocco...
                    Selection.Delete Shift:=xlUp     '   ...cancello la seleziono e faccio salire le righe

                    Else
                           i = i + 5     'se almeno una cella è piena allora mi sposto alle 5 righe successive
                           j = j + 5
               End If

Next
End Sub


I VERO erano il risultato della "avventurosa" istruzione tipo Selection=Range(le tue celle).select; effettivamene risultava VERO che l' area Selezionata era uguale all' area selezionata...
Poi avevi da testare tutte le celle prima di procedere eventualmente alla cancellazione.

Ciao, fai sapere.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

[Excel] Controllo contenuto celle: comportamento anomalo!

Postdi antom » 19/09/08 13:19

:oops: :oops: :cry: sono commossa!
Funziona benissimo!!!!! :lol:


Grazie mille ancora!

Quindi l'errore era in quella "avventurosa istruzione" che ho fatto!!!???!?!?!?! :mmmh: devo darmi all'ippica!!!

Grazie e a presto!

antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Controllo contenuto celle: comportamento anomalo!":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti

cron