Newsgroup: it.comp.lang.visual-basic
Titolo: Valore Variabile da una Tabella o un Array.Come?Consigli?

Ciao, dovrei fare una moltiplicazione per un valore costante A e invece un 
valore che cambia a secondo alcuni criteri.
Faccio un esempio più chiaro.
a=Costante
X variabile
Y variabile
b da definire in base a questa tabella di corrispondenze:
X\Y  10    20    30     40
5       1     1.1   1.3    1.4
7      2      1.4    1.8    2.7
15    3       1.3   1.6     2.5
In pratica se il valore della X è 7 e quello della Y è 30, B deve valere 1.8
Come mi consigliate di fare questa cosa in VBA?
Grazie 

 15    3       1.3   1.6     2.5
Matrice sparsa?
-- 
Salutoni
Sergio
C'è il giorno in cui nasci e quello in cui scegli di vivere
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Matrice sparsa?
Che cosa è una matrice sparsa? Come la costruisco e poi come vado a leggere 
il valore? 

Thommino ha scritto:

Matrice (X,Y)
matrice(1,1)=10  matrice(1,2)=20 ...etc
matrice(2,1)=5    matrice(2,2(=1 ... etc
per avere il valore corrispondente in base alla tabella impostata
     B=matrice(x,y)  
ciao

 ha scritto nel messaggio 
news:1149174001.9...@h76g2000cwa.googlegroups.com...
[cut]
<Matrice (X,Y)
<matrice(1,1)=10  matrice(1,2)=20 ...etc
<matrice(2,1)=5    matrice(2,2(=1 ... etc
<per avere il valore corrispondente in base alla tabella <impostata
 <    B=matrice(x,y)
Ah è una matrice normale! Già che pensavo a chissà che cosa.
Solo una cosa volevo sapere. E' possibile creare questa matrice per esempio 
con dei range?
Ovvero riprendendo l'esempio che ho fatto prima:
 X\Y  [0-10]   [11-20]    [21-30]     [31-40]
[0-5]       1         1.1           1.3            1.4
[6-7]      2          1.4           1.8             2.7
[8-15]    3          1.3           1.6             2.5
E quindi se la X va da 0 a 5 allora lavoriamo nella riga 1 della tabella. So 
che potrei fare tutto con tantissimi If per ogni riga, ma vorrei evitare!
Grazie

fufi ha usato la sua tastiera per scrivere :

Guarda che è molto sparsa...
La tua soluzione mi sembra un inutile spreco di risorse, per non 
parlare dei potenziali problemi qualora le due coordinate dovessero 
assumere un valore molto elevato.
La soluzione che proponi, infatti, prevede un utilizzo di Max(X) x 
Max(Y) elementi, che, supponendo siano Currency, significa 8 byte per 
elemento, e se X e Y assumono valori elevati, diventa un carico di RAM 
spaventoso (inutilmente, poi).
Io vedo due strade:
Una, quella di generare un array delle coordinate X e uno delle 
coordinate Y, e poi un array compatto con gli elementi.
Una cosa del tipo
Dim Arr_X (Min(x) TO Max(y)) as Long
Dim Arr_Y (Min(y) TO Max(y)) as Long
Arr_X(10)=1
Arr_X(20)=2
...
Arr_Y(5)=1
Arr_Y(7)=2
Arr_Y(15)=3
...
Dim Array_Elementi(1 to 30, 1 to 30) as Currency
Array_Elementi(1,1)=1
Array_Elementi(2,1)=1.1
Array_Elementi(3,1)=1.3
...
E per avere il valore di una cella (X,Y):
Valore = Array_Elementi(Arr_X(X), Arr_Y(Y))
Seconda strada, creare un Recordset in RAM con tre campi:
X, Y e Valore
Popolarlo come
10 5 1
10 7 2
10 15 3
...
e per ottenere i valori:
RS.Filter="X=" & Str(X) & " AND Y=" & STR(Y)
Valore=RS.Fields.Item("Valore").Value
Ciao
Alberto
-- 
A questo punto hanno trovato un muro,
un muro duro, molto molto duro,
che siamo noi.

 valore molto elevato.
No le variabili X ed Y sono piuttosto limitate
Ti elenco con precisione i range che vorrei creare.
Per la X:
[0-15] [16-30]  [31-45]  [46-60]  [61-90]
Per la Y:
[0-10]  [11-20]  [21-30]  [31-45] [46-60] [61-90]
 Io vorrei sapere il valore dentro la tabella che ha X che vale per esempio 
25 e Y che vale 50.
[cut] 

 25 e Y che vale 50.
Diciamo allora che con la soluzione del recordset, utilizzando 5 campi 
anzichè 3, ossia "X_basso", "X_Alto", "Y_Basso", "Y_Alto" e "Valore", e 
come Filter: "X>=X_Basso AND X<=X_Alto AND Y>=Y_Basso AND Y<=Y_Alto" 
saremmo alla perfezione.
Ma non volendo usare ADO, potresti adeguare anche la prima soluzione 
che davo, alla tua necessità.
Oppure, se ti sta bene anche usare un loop, puoi usare un banale Array 
con N righe (una per ogni elemento della matrice), e 5 colonne 
(corrispondenti ai 5 campi del recordset che dicevo prima), e farti un 
loop in cui testi la condizione concettualmente identica a quella che 
qui sopra ho usato come Filter.
