Condividi:        

Excel Confrontare Serie di Numeri

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 Confrontare Serie di Numeri

Postdi Flash30005 » 14/10/08 01:58

Ciao Anthony,
Dovrei con il codice Vba trovare nelle due serie di numeri disposti su due colonne diverse A e B tipo:
Codice: Seleziona tutto
   A   B
1   7   1
2   25   7          <
3   38   33
4   54   66
5   81   74
6   99   77
7   115   81        <
8   168   120
9   205   233      <
10   233   304
11   305   307
12   306   350
13   401   370
14   502   400
15   709   1006      <
16   850   1010
17   1006   1250      <
18   1200   1260
19   1250   1275
20   1304   1300
21   1605   1402
22   1700   1900    <
23   1804   1980
24   1900   
ricavarmi le righe della matrice in A corrispondenti ai numeri esistenti nella matrice in B es. riga 1 per il 7 (che è in B), riga 5 per l'81, 10 per il 233, etc.
insomma 1, 5, 10, 17, 19, 24 e magari anche che sono 6 le corrispondenze
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Sponsor
 

Re: Excel Confrontare Serie di Numeri

Postdi Anthony47 » 14/10/08 02:44

Con formula: In C1
Codice: Seleziona tutto
=CONFRONTA(B1;A1:A100;0)
poi copi in basso.

In vba, di base e' questa:
Codice: Seleziona tutto
POSIT = Application.WorksheetFunction.Match(Range("B1"), Range("A1:A100"), 0)

Dovrai adattarla per inserirla in un ciclo For /Next

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

Re: Excel Confrontare Serie di Numeri

Postdi Flash30005 » 14/10/08 23:30

Anthony47 ha scritto:In vba, di base e' questa:
Codice: Seleziona tutto
POSIT = Application.WorksheetFunction.Match(Range("B1"), Range("A1:A100"), 0)

Dovrai adattarla per inserirla in un ciclo For /Next

Parliamo sempre di excel? Perché mi da errore :cry:
1) Credo che prima dovrei dire qual'è il foglio con le coleonne A e B da confrontare e io ho messo la classica formula:
Worksheets("Temp").Select
ma è meglio che scrivo l'intero codice
Codice: Seleziona tutto
Sub ConfrontaAB()
Dim POSIT As Integer
For CCB = 1 To 100
    Worksheets("Temp").Select  ' ho provato anche a commentarlo
    POSIT = Application.WorksheetFunction.Match(Range("B" & CCB), Range("A1:A100"), 0)
    MsgBox POSIT    'messaggio per verificare i numeri riga
Next
End Sub

L'errore è: Impossibile trovare la proprietà Match per la classe Worksheets function
Innanzi tutto è giusto dichiarare POSIT come integer?
Come lo dichiaro il foglio che ha le colonne da confrontare?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Confrontare Serie di Numeri

Postdi Anthony47 » 15/10/08 09:58

Ho dimenticato di dirti, e tu lo hai scoperto senza ancora rendertene conto, che l' istruzione restituisce "errore" se non c' e' nessuna corrispondenza.
Devi quindi inserire le istruzioni per gestire questa situazione. Es:
Codice: Seleziona tutto
Worksheets("Temp").Select  'Questa e' meglio prima del loop
For CCB = 1 To 100
On error Resume Next
    POSIT = 0
    POSIT = Application.WorksheetFunction.Match(Range("B" & CCB), Range("A1:A100"), 0)
    MsgBox POSIT    'messaggio per verificare i numeri riga; SE 0, NESSUN MATCH
Next
On error goto 0


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

Re: Excel Confrontare Serie di Numeri

Postdi Flash30005 » 20/10/08 15:11

Codice: Seleziona tutto
Worksheets("Temp").Select  'Questa e' meglio prima del loop
For CCB = 1 To 100
On error Resume Next
    POSIT = 0
    POSIT = Application.WorksheetFunction.Match(Range("B" & CCB), Range("A1:A100"), 0)
    MsgBox POSIT    'messaggio per verificare i numeri riga; SE 0, NESSUN MATCH
Next
On error goto 0

Ok il codice va bene c'è solo un particolare che Range("A1:A100") della formula dovrei averlo sotto la forma Cells(...,...) (Cells prevede un campo Range, da - a?)
nel senso che solo così posso far variare la colonna da A in B etc avendo i numeri di colonna e non lettere e le righe che iniziano sempre da 1 ma la lunghezza può essere variabile (variabile da me conosciuta)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Confrontare Serie di Numeri

Postdi Flash30005 » 20/10/08 15:24

Aggiungo al post precedente che anche i fogli dei due Range sono diversi
FoglioX ha il Range("B" & CCB),
e FoglioY il Range("A1:A100")
penso che si possa mettere worksheets("Fogliox").Range("B" & CCB) e worksheets("Foglioy").Cells(..., ...)
o la funzione Match crea problemi in questa maniera?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Confrontare Serie di Numeri

Postdi Anthony47 » 20/10/08 15:32

Mi pare che devi inserire il loop precedente in un altro che cambia le colonne; dovrebbe andare bene una cosa come questa:
Codice: Seleziona tutto
Worksheets("Temp").Select  'Questa e' meglio prima del loop
For CCol=2 to XXXX    '<<< Sai tu...
For CCB = 1 To 100
On error Resume Next
    POSIT = 0
    POSIT = Application.WorksheetFunction.Match(Cells(CCB, CCol), Range("A1:A100"), 0)
    MsgBox POSIT    'messaggio per verificare i numeri riga; SE 0, NESSUN MATCH
Next CCB
Next CCol
On error goto 0


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

Re: Excel Confrontare Serie di Numeri

Postdi Anthony47 » 20/10/08 15:42

.. e si puo' scrivere qualcosa di piu' articolato, tipo Worksheets("Fogliox").Range("B" & CCB)

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

Re: Excel Confrontare Serie di Numeri

Postdi Flash30005 » 20/10/08 21:57

Anthony47 ha scritto:.. e si puo' scrivere qualcosa di piu' articolato, tipo Worksheets("FoglioX").Range("B" & CCB)

Ciao.


No, no, quella del Worksheets("Fogliox").Range("B" & CCB) l'avevo risolto (tipo tuo esempio) :) è invece quella del foglioY Range("A1:A100") che vorrei utilizzare con il formato Cells(??.?? : ??,??) per poter rendere variabili sia le colonne che le righe :(

E' per questo che ti chiedevo se il formato Cells prevede un "Range" senza dover per forza applicare un loop altrimenti a forza di loop(are) non usciamo più :lol:

Ciao

P.s. Osservazione (forse stupida): perché utilizzano la chiave Cells se poi è possibile selezionarne solo una alla volta? (la s di Cells non significa Celle al plurale?)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Confrontare Serie di Numeri

Postdi Anthony47 » 20/10/08 22:42

Non sono certo di aver afferrato, comunque tieni presente che invece di scrivere Range("A1:A100") puoi scrivere Range(Cells(1,1),Cells(100,1)), quindi puoi giocare sugli indici per puntare ad aree diverse.

Poi "Cells": in realta' quando scriviamo Cells(1,1) "sottintendiamo senza saperlo" la piu' esatta Cells.Item(1,1) che significa: di tutte, la parte "1,1"; ma Item e' la proprieta' di default e si omette troppo spesso, un po' come scrivere Variabile = Range("A1") e non la piu' corretta Variabile = Range("A1").Value (su Range e' Value la proprieta' di default).

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

Re: Excel Confrontare Serie di Numeri

Postdi Flash30005 » 21/10/08 01:30

Anthony47 ha scritto:Non sono certo di aver afferrato, comunque tieni presente che invece di scrivere Range("A1:A100") puoi scrivere Range(Cells(1,1),Cells(100,1)), quindi puoi giocare sugli indici per puntare ad aree diverse.


Hai afferrato benissimo! ;)
Era proprio questo il formato che cercavo in pratica la conversione di un range (area) da Riga-Colonna a Riga-Colonna.
Nell'Help vengono riportati sempre e solo esempi riferiti ad una cella Cells(1,1) ma mai ad un'area
Grazie Anthony
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "Excel Confrontare Serie di Numeri":


Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti