Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Trovare ed eliminare colonna contenente cella con testo specifico

97 views
Skip to first unread message

Igor

unread,
Feb 15, 2022, 6:21:11 AM2/15/22
to
Buongiorno
devo comparare dei fogli excel trovando le differenze (ho una macro che lo
fa) ma per fare questo ho bisogno che i formati siano compatibili.
Mi chiedo se è possibile fare una macro VBA che cerca in una riga tutti i
testi contenuti nelle celle di una colonna di un diverso foglio e quando li
trova cancella l'intera colonna che lo contiene.
esempio:
nel foglio1 riga 10 ho 50 celle che contengono un testo, nel foglio2 colonna
A ho 5 celle che contengono un testo,
io vorrei cercare nel foglio1 riga 10 le 5 celle che contengono i 5 testi
del foglio2 colonna A e eliminare la relativa colonna.
purtroppo sia le celle nel foglio1 riga10 che nel foglio2 colonna A non
hanno un numero fisso ma possono essere di quantità diversa di volta in
volta.

cella A100 foglio2 contiene testo ABC, cerco ABC nel foglio1 e lo trovo
nella cella E10, elimino completamente tutta la colonna E del foglio1 e di
conseguenza la colonna F diventa E.

Grazie

Bruno Campanini

unread,
Feb 15, 2022, 11:54:35 AM2/15/22
to
Igor submitted this idea :
È una cosa semplicissima avendo a disposizione almeno una minima
esemplificazione dei dati.

Bruno

Igor

unread,
Feb 15, 2022, 1:47:58 PM2/15/22
to
grazie per la risposta
nel foglio 2 ho dei testi in colonna A su celle successive (A1, A2, A3, etc)
alcuni di questi testi possono essere anche presenti nel foglio 1 riga 10
(C10, D10, E10, etc etc)
Io avrei bisogno di individuare nel riga 10 del foglio 1 i testi del foglio
2 ed eliminare la colonna che li contiene.
Ad esempio nel foglio2 cella A5 ho il testo PIPPO, questo stesso testo PIPPO
si trova anche nel foglio1 cella G10 e quindi la macro dovrebbe individuare
eliminare la intera colonna G foglio1.
Non so se mi sono spiegato.
Lo ridico con parole diverse:
la macro deve trovare se ci sono dei testi uguali nella colonna A foglio2 e
nella riga10 foglio1, e se ci sono eliminare tutta la colonna del foglio1
che li contiene.



"Bruno Campanini" ha scritto nel messaggio news:sugls8$5fvl$1...@solani.org...

issdr

unread,
Feb 15, 2022, 4:56:00 PM2/15/22
to
"Igor" wrote:

> la macro deve trovare se ci sono dei testi uguali nella colonna A
> foglio2 e nella riga10 foglio1, e se ci sono eliminare tutta la
> colonna del foglio1 che li contiene.

per testi uguali intendi perfettamente corrispondenti? oppure è
sufficiente che la stringa in colonnaA sia contenuta in riga10?



Igor

unread,
Feb 16, 2022, 4:52:03 AM2/16/22
to
Intendo testi perfettamenti corrispondenti.


"issdr" ha scritto nel messaggio
news:87tuczn...@ID-313311.news.uni-berlin.de...

issdr

unread,
Feb 16, 2022, 5:19:11 PM2/16/22
to
Sub Incroci()

Dim fg1 As Worksheet, fg2 As Worksheet
Dim delenda As Range

Set fg1 = Worksheets("foglio1")
Set fg2 = Worksheets("foglio2")

With fg1
Set riga10 = .Range(.Cells(10, 1), .Cells(10, .Columns.Count).End(xlToLeft))
End With

With fg2
Set colonnaA = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With

For Each c In colonnaA
For Each d In riga10
If c.Value = d.Value Then
If delenda Is Nothing Then
Set delenda = d.EntireColumn
Else: Set delenda = Union(delenda, d.EntireColumn)
End If
End If
Next d
Next c

If Not delenda Is Nothing Then delenda.Delete

End Sub

Igor

unread,
Feb 17, 2022, 8:49:36 AM2/17/22
to
Grazie mille
la collaudo e vediamo che succede.

"issdr" ha scritto nel messaggio
news:87pmnmt...@ID-313311.news.uni-berlin.de...

Igor

unread,
Feb 17, 2022, 10:30:24 AM2/17/22
to
ciao
grazie per il codice, funziona perfettamente.
Ora devo fare una cosa analoga per le righe e cioè eliminare dal foglio 1 le
righe che in colonna C contengono un testo presente in celle B1 B2 B3 etc
del foglio 2.
Ci provo da solo partendo dal codice che mi hai gentilmente regalato ma se
hai voglia di aiutarmi anche per questo secondo step......:-)
Non è finita perchè poi dovrò aggiungere le colonne e le righe nuove in
fondo alla tabella in modo che lanciando la macro RunCompare avrò tutte
le modifiche in evidenza, anche quelle più "nascoste" in righe e/o colonne
già presenti in quanto avendo i due fogli la stessa struttura tutte le celle
fra una e l'altra
saranno evidenziate in giallo.
L'obiettivo finale è avere due tabelle con la stessa struttura (a parte le
nuove righe e colonne che saranno in fondo alla tabella del foglio1) per
poter sfruttare questo codice:
Ancora grazie.


RunCompare()
Call compareSheets(InputBox("Type name of first sheet"), InputBox("Type name
of second sheet"))
End Sub
Sub compareSheets(shtSheet1 As String, shtSheet2 As String)
Dim myCell As Range
Dim mydiffs As IntSubeger
'For each cell in sheet2 that is not the same in Sheet1, color it yellow
For Each myCell In ActiveWorkbook.Worksheets(shtSheet2).UsedRange
If Not myCell.Value = ActiveWorkbook.Worksheets(shtSheet1).Cells(myCell.Row,
myCell.Column).Value Then
myCell.Interior.Color = vbYellow
mydiffs = mydiffs + 1
End If
Next
'Display a message box to demonstrate the differences
MsgBox mydiffs & " differences found", vbInformation
ActiveWorkbook.Sheets(shtSheet2).Select
End Sub



"Igor" ha scritto nel messaggio news:suljpe$fh3$1...@dont-email.me...

Igor

unread,
Feb 17, 2022, 11:36:27 AM2/17/22
to
ho provato a generare un altro modulo che facesse una cosa analoga
per le righe e cioè eliminare dal foglio 1 le righe che in colonna C
contengono
un testo presente in celle B1 B2 B3 etc
del foglio 2.
Però si pianta qui:
Set colonnaC = .Range(.Cells(C, 1), .Cells(1, .Rows.Count).End(x1ToLeft))

Speravo bastasse cambiare i riferimenti alle colonne e alle righe ma
evidentemente non è così semplice.

Sub Incroci1()

Dim fg1 As Worksheet, fg2 As Worksheet
Dim delenda As Range

Set fg1 = Worksheets("foglio1")
Set fg2 = Worksheets("foglio2")

With fg1
Set colonnaC = .Range(.Cells(C, 1), .Cells(1,
.Rows.Count).End(x1ToLeft))
End With

With fg2
Set colonnaB = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(x1Up))
End With

For Each C In colonnaB
For Each d In colonnaC
If C.Value = d.Value Then
If delenda Is Nothing Then
Set delenda = d.EntireRows
Else: Set delenda = Union(delenda, d.EntireRows)
End If
End If
Next d
Next C

If Not delenda Is Nothing Then delenda.Delete

End Sub

"Igor" ha scritto nel messaggio news:sulpme$c73$1...@dont-email.me...

issdr

unread,
Feb 17, 2022, 12:56:44 PM2/17/22
to
"Igor" wrote:

> per le righe e cioè eliminare dal foglio 1 le righe che in colonna C

esclusa riga 10? 0-9 e 10-ultimo valore?

issdr

unread,
Feb 17, 2022, 1:13:30 PM2/17/22
to
"Igor" wrote:

> per le righe e cioè eliminare dal foglio 1 le righe che in colonna C

esclusa riga 10? 1-9 e 11-ultimo valore?

Igor

unread,
Feb 17, 2022, 5:33:42 PM2/17/22
to
Escluse 1-10, le righe interessate sono 11-ultimo valore.


"issdr" ha scritto nel messaggio
news:87pmnl4...@ID-313311.news.uni-berlin.de...

issdr

unread,
Feb 18, 2022, 1:17:46 AM2/18/22
to
"Igor" wrote:

> Escluse 1-10, le righe interessate sono 11-ultimo valore.

ho difficoltà a seguirti. mi associo alla richiesta di Bruno, descrivi
meglio da dove vuoi partire e qual è il punto di arrivo desiderato,
oppure fornisci dei file di esempio.

per dirne una: se l'esecuzione della macro precedente avesse cancellato
colonna C? ti è chiaro che il codice cancella intere colonne? non hai
chiesto che non apporti modifiche oltre riga 10. per capire quali sono
le aree eliminate, cambia .Delete in .Select e lanciala.

Igor

unread,
Feb 19, 2022, 10:39:29 AM2/19/22
to
Ciao

La mia tabella è fatta come allegato, nel foglio 1 ci sono i tipi nella riga
10 e i dispositivi nella colonna C.
Quindi le colonne da cercare ed eliminare saranno sempre dalla D in poi.
Analogamente le righe da cercare ed eliminare saranno sempre dalla 11 in
poi.
Nel foglio 2 i tipi e i dispositivi da eliminare.
Quando la tabella viene aggiornata nasce un nuovo file in cui può succedere
che:
-possono essere eliminate delle righe o delle colonne
-possono essere aggiunte nuove righe o nuove colonne
-possono cambiare le S N O nelle singole celle (che è la differenza più
difficile da scovare)

Le colonne nuove/eliminate e le righe nuove/eliminate le individuo con una
macro ma per trovare le differenze nelle singole celle con S N O?

Io pensavo di eliminare dalla tabella vecchia righe e colonne non presenti
nella nuova, eliminare dalla tabella nuova righe e colonne aggiunte (=non
presenti nella vecchia)
oppure spostarle in fondo alla tabella, in modo da RENDERE LA RIGA 10 E LA
COLONNA C IDENTICHE NEI DUE FILE.
A questo punto faccio girare la macro di comparazione e mi trovo le
differenze nelle singole celle.
Non dubito che ci siano altri metodi più furbi ma a me è venuto in mente
questo.

"Igor" ha scritto nel messaggio news:sunpu0$94t$1...@dont-email.me...

Ciao

La mia tabella è fatta come allegato, nel foglio 1 ci sono i tipi nella riga
10 e i dispositivi nella colonna C.
Quindi le colonne da cercare ed eliminare saranno sempre dalla D in poi.
Analogamente le righe da cercare ed eliminare saranno sempre dalla 11 in
poi.
Nel foglio 2 i tipi e i dispositivi da eliminare.
Quando la tabella viene aggiornata nasce un nuovo file in cui può succedere
che:
-possono essere eliminate delle righe o delle colonne
-possono essere aggiunte nuove righe o nuove colonne
-possono cambiare le S N O nelle singole celle (che è la differenza più
difficile da scovare)

Le colonne nuove/eliminate e le righe nuove/eliminate le individuo con una
macro ma per trovare le differenze nelle singole celle con S N O?

Io pensavo di eliminare dalla tabella vecchia righe e colonne non presenti
nella nuova, eliminare dalla tabella nuova righe e colonne aggiunte (=non
presenti nella vecchia)
oppure spostarle in fondo alla tabella, in modo da RENDERE LA RIGA 10 E LA
COLONNA C IDENTICHE NEI DUE FILE.
A questo punto faccio girare la macro di comparazione e mi trovo le
differenze nelle singole celle.
Non dubito che ci siano altri metodi più furbi ma a me è venuto in mente
questo.


"issdr" ha scritto nel messaggio
news:87h78w4...@ID-313311.news.uni-berlin.de...

issdr

unread,
Feb 19, 2022, 6:05:36 PM2/19/22
to
"Igor" wrote:

> La mia tabella è fatta come allegato, nel foglio 1 ci sono i tipi nella riga
> 10 e i dispositivi nella colonna C.
> Quindi le colonne da cercare ed eliminare saranno sempre dalla D in poi.
> Analogamente le righe da cercare ed eliminare saranno sempre dalla 11 in
> poi.

qui non passano gli allegati, quindi continuo ad andare un po' ad
intuito. con queste premesse comunque posso buttar giù la variante della
macro iniziale, vedi se può andarti bene. come hai provato a fare,
effettivamente basta cambiare i riferimenti, ma va fatto bene. gugola o
chiedi se hai bisogno di capire più a fondo.

Sub Incroci1()

Dim delenda As Range

With Worksheets("foglio1")
Set colonnaC = .Range(.[C11], .Cells(.Rows.Count, 3).End(xlUp))
End With

With Worksheets("foglio2")
Set colonnaB = .Range(.[B1], .Cells(.Rows.Count, 2).End(xlUp))
End With

For Each c In colonnaB
For Each d In colonnaC
If c.Value = d.Value Then
If delenda Is Nothing Then
Set delenda = d.EntireRow
Else: Set delenda = Union(delenda, d.EntireRow)

Igor

unread,
Feb 21, 2022, 12:49:05 PM2/21/22
to
grazie, domani provo.

"issdr" ha scritto nel messaggio
news:874k4uh...@ID-313311.news.uni-berlin.de...

Igor

unread,
Feb 22, 2022, 6:33:17 AM2/22/22
to
uffa..la formattazione....
tolgo la colonna G che altrimenti va a capo e non si capisce niente

"Igor" ha scritto nel messaggio news:sv2hd3$jjc$1...@dont-email.me...

colonna C D E F

RIGA 10 mario carlo gianni

11 007 10 10 50

12 008 15 20 40

14 011 15 20 10

15 1EE 20 15 05


Ciao
grazie per la tua pazienza, io sono tutt'altro che esperto.
Ho provato il codice ma si pianta qui:
For Each d In colonnaC.
Sopra vedi un esempio del foglio2, il mio obiettivo è eliminare l'intera
riga 12 se nel foglio 1 colonna B c'è il testo '008'.
Quello che mi hai dato relativo alle colonne funziona perfettamente, mi
elimina la intera colonna D se nel foglio 1 colonna A c'è il testo 'mario'.
Ho messo anche una foto ma non so se la riesci a vedere.



--------------------------------------------------------------------------------


"issdr" ha scritto nel messaggio
news:874k4uh...@ID-313311.news.uni-berlin.de...

issdr

unread,
Feb 22, 2022, 3:35:06 PM2/22/22
to
"Igor" wrote:

> grazie per la tua pazienza, io sono tutt'altro che esperto.
> Ho provato il codice ma si pianta qui:
> For Each d In colonnaC.

no, non dovrebbe. che messaggio di errore hai?

> Sopra vedi un esempio del foglio2, il mio obiettivo è eliminare
> l'intera riga 12 se nel foglio 1 colonna B c'è il testo '008'.

noto uno scambio di nomi dei fogli... ma non è questo, vero?

> Quello che mi hai dato relativo alle colonne funziona perfettamente,
> mi elimina la intera colonna D se nel foglio 1 colonna A c'è il testo
> 'mario'.

funzionano entrambi:

https://user.fm/files/v2-c3eff8c6bd20d1c7c16c7c9e63e54ae8/incroci_xlsm.mp4

> Ho messo anche una foto ma non so se la riesci a vedere.

siamo su usenet, questo è un newsgroup solo testo, quindi no.

ti consiglio di utilizzare un newsreader vero, non windows live mail

Igor

unread,
Feb 23, 2022, 6:39:03 AM2/23/22
to
On Tue, 22 Feb 2022 21:08:57 +0100, issdr <p_u_n_...@yahoo.it>
wrote:


>
>no, non dovrebbe. che messaggio di errore hai?
Errore di run-time ‘13’:

Tipo non corrispondente

col debug vedo che si pianta qui: If c.Value = d.Value Then



>noto uno scambio di nomi dei fogli... ma non è questo, vero?
Si, ho fatto confusione con i nomi dei fogli ma non è questo.


>
>funzionano entrambi:
>
>https://user.fm/files/v2-c3eff8c6bd20d1c7c16c7c9e63e54ae8/incroci_xlsm.mp4
il link si apre ma c'è un video che dura 0 secondi senza che si veda
nulla

>
>ti consiglio di utilizzare un newsreader vero, non windows live mail
ok, Agent dovrebbe andare bene, lo usavo una volta ma poi usenet è
andato in pò in disuso e l'avevo messo in cantina :-)

ho provato ad allegare un file di esempio, magari con Agent riesci a
prenderlo, è fatto come vedi sotto, le righe e le colonne sono
centinaia nel file "vero".

Foglio1 dove eliminare le righe, la riga coi nomi (mario, carlo, etc)
è la 10,
la colonna coi codici (007, 008, 011, etc) è la C

mario carlo gianni franco

007 10 10 15 30
008 10 10 20 15
011 20 20 10 20


Foglio2 in cui nella colonna B ci sono i codici (dev),
come già detto la riga del foglio1 che in colonna C ha questi codici
deve essere eliminata interamente.

code dev
marco 1EE
pippo 1EF
livio 245
stefano 4SA
franco 4YD
53Q
5CC
5ZW
6BX
6Y2
7H6
86X
9PT
MEF
RA8
TMU
TWY
WDB
WDJ
WFH



Igor

unread,
Feb 23, 2022, 6:40:37 AM2/23/22
to
On Tue, 22 Feb 2022 21:08:57 +0100, issdr <p_u_n_...@yahoo.it>
wrote:


>
>no, non dovrebbe. che messaggio di errore hai?
Errore di run-time ‘13’:

Tipo non corrispondente

col debug vedo che si pianta qui: If c.Value = d.Value Then



>noto uno scambio di nomi dei fogli... ma non è questo, vero?
Si, ho fatto confusione con i nomi dei fogli ma non è questo.


>
>funzionano entrambi:
>
>https://user.fm/files/v2-c3eff8c6bd20d1c7c16c7c9e63e54ae8/incroci_xlsm.mp4
il link si apre ma c'è un video che dura 0 secondi senza che si veda
nulla

>
>ti consiglio di utilizzare un newsreader vero, non windows live mail
ok, Agent dovrebbe andare bene, lo usavo una volta ma poi usenet è
andato in pò in disuso e l'avevo messo in cantina :-)


issdr

unread,
Feb 23, 2022, 9:17:56 AM2/23/22
to
Igor wrote:

> On Tue, 22 Feb 2022 21:08:57 +0100, issdr <p_u_n_...@yahoo.it>
> wrote:
>>
>>no, non dovrebbe. che messaggio di errore hai?
> Errore di run-time ‘13’:
>
> Tipo non corrispondente
>
> col debug vedo che si pianta qui: If c.Value = d.Value Then

non riesco a riprodurlo. sei certo di non avere un'Option Explicit o di
non dichiarare tipi da qualche parte nel codice?

hai qualche cella contenete dati di tipo particolare?

[...]

>>funzionano entrambi:
>>
>>https://user.fm/files/v2-c3eff8c6bd20d1c7c16c7c9e63e54ae8/incroci_xlsm.mp4
> il link si apre ma c'è un video che dura 0 secondi senza che si veda
> nulla

salvalo e aprilo, è meno di un mega.

>>ti consiglio di utilizzare un newsreader vero, non windows live mail
> ok, Agent dovrebbe andare bene, lo usavo una volta ma poi usenet è
> andato in pò in disuso e l'avevo messo in cantina :-)

questa è un'aggravante... ma almeno hai provato a quotare adesso.

> Foglio1 dove eliminare le righe, la riga coi nomi (mario, carlo, etc)
> è la 10, la colonna coi codici (007, 008, 011, etc) è la C

ho aggiunti nella colonna C del foglio due 008 e questo è il rislutato nel
lanciare prima Inrcoci1 e poi Incroci.

https://user.fm/files/v2-060412d664b30b7c4d8b072827c6689b/incroci_xlsm_trimmed.avi

Igor

unread,
Feb 23, 2022, 11:11:59 AM2/23/22
to
On Wed, 23 Feb 2022 15:17:46 +0100, issdr <p_u_n_...@yahoo.it>
wrote:

>>>no, non dovrebbe. che messaggio di errore hai?
>> Errore di run-time ‘13’:
>>
>> Tipo non corrispondente
>>
>> col debug vedo che si pianta qui: If c.Value = d.Value Then
>
>non riesco a riprodurlo. sei certo di non avere un'Option Explicit o di
>non dichiarare tipi da qualche parte nel codice?

Option Explicit non so cosa sia ma non credo.
Io ho semplicemente copiato e incollato in un modulo il tuo codice e
poi lancio con Esegui

>
>hai qualche cella contenete dati di tipo particolare?
no, le celle contengono tutte normali testi in formato Generale

ho provato a fare vari tentativi sperando in colpo di fortuna e un
modo in cui sono riuscito a non farlo piantare è variando due stringhe
di codice da così:
Set colonnaC = .Range(.[C11], .Cells(.Rows.Count, 3).End(xlUp))
a così:
Set colonnaC = .Range(.[C11], .Cells(.Rows.Count, 13).End(xlUp))
13 invece che 3

e da così:
Set colonnaB = .Range(.[B1], .Cells(.Rows.Count, 2).End(xlUp))
a così:
Set colonnaB = .Range(.[B1], .Cells(.Rows.Count, 12).End(xlUp))
12 invece che 2

in questo modo non si pianta però mi cancella tutte le righe dalla 1
alla alla 11.

non posso passarti il mio file in qualche modo?
magari all'indirizzo mail che vedo <p_u_n_...@yahoo.it>?

grazie comunque







Igor

unread,
Feb 23, 2022, 11:31:10 AM2/23/22
to
On Wed, 23 Feb 2022 17:11:55 +0100, Igor <ma...@libero.it> wrote:

le righe dalla 1 alla 10 sul foglio1 o sono vuote o contengono testi
che non sono mai presenti nella colonnaB foglio2 quindi non è
necessario specificare la riga da cui partire per trovare le righe da
eliminare.

non so se questa info sia utile a semplificare il codice e trovare
l'inghippo.

issdr

unread,
Feb 23, 2022, 12:13:51 PM2/23/22
to
Igor wrote:

> le righe dalla 1 alla 10 sul foglio1 o sono vuote o contengono testi
> che non sono mai presenti nella colonnaB foglio2 quindi non è
> necessario specificare la riga da cui partire per trovare le righe da
> eliminare.
>
> non so se questa info sia utile a semplificare il codice e trovare
> l'inghippo.

in realtà no.

issdr

unread,
Feb 23, 2022, 12:13:52 PM2/23/22
to
Igor wrote:

> in questo modo non si pianta però mi cancella tutte le righe dalla 1
> alla alla 11.

stai variando la colonna: Cells(<n_riga>, <n_colonna>)

> non posso passarti il mio file in qualche modo?
> magari all'indirizzo mail che vedo <p_u_n_...@yahoo.it>?

è valido, sì

Igor

unread,
Feb 23, 2022, 1:40:25 PM2/23/22
to
On Wed, 23 Feb 2022 18:13:43 +0100, issdr <p_u_n_...@yahoo.it>
wrote:

>> magari all'indirizzo mail che vedo <p_u_n_...@yahoo.it>?
>
>č valido, sě

ottimo, grazie
0 new messages