Newsgroup: it.comp.os.win.software
Titolo: excel - lentezza esasperante (+ altre cose)

Sono alle prese con una formula che devo copiare in circa 15.000 righe per
25 colonne. Alla velocita' in cui la formula viene copiata, ho stimato che
il mio excel per terminare il lavoro ci mettera' circa 8 ore.
Vi sembra una cosa normale?
Ah, naturalmente non posso copiare la formula direttamente in tutti i
records ma devo farlo a tranche di circa 1000 per volta, altrimenti excel si
blocca.
La formula utilizza le funzioni di ricerca e riferimento, va a prendersi le
informazioni su un foglio e li mette in un altro foglio, specificando anche
una condizione che si deve avverare. Tutto questo puo' giustificare questa
tremenda lentezza?  O forse puo' dipendere dal connubio tra RAM (32MB) e
processore (pentium 233)?
Ne approfitto per farvi partecipi di qualche altro problema.
Se effettuo una normale divisione di un  numero fratto 10, ogni tanto,
seppur il formato delle celle e' per tutte generale, excel mi arrotonda il
risultato della divisione al primo numero intero e per visualizzare il
decimale (divido un numero intero per 10 per cui al massimo c'e' un
decimale) devo formattare la cella come numero con decimale 1.
Capirei se accadesse sempre, potrebbe essere un'impostazione di excel, ma
accade solo a poche celle su migliaia. Perche'?
Altro piccolo problema che ho gia' risolto ma temo in un modo che farebbe
inorridire i puristi.
Ho due colonne di numeri in ordine crescente. Nella seconda ci sono solo una
parte dei numeri della prima colonna. Io ho bisogno di ricavare una terza
colonna in cui avere i numeri che ci sono nella prima e che non sono nella
seconda. Come detto una soluzione l'ho trovata, ma ho l'impressione si possa
fare di meglio. Voi come fareste?
Infine, ho voluto seguire il consiglio che mi e' stato dato e utilizzare
access per gestire un archivio di dati poi da analizzare. Il problema e' che
il mio access, ogni volta che tento di importare il file di testo coi dati
(circa 25MB), si blocca e non effettua l'importazione. Potrebbe essere anche
questo un problema di RAM?
Grazie a chi avra' avuto la pazienza di leggere tutto.
Max
lucamax{*ola}
supereva.it

 ha scritto nel messaggio news:93f6im$9uajq$1...@ID-46161.news.dfncis.de...


per quanto concerne le due colonne da confrontare io farei quanto >segue in
una routine di VBA:...
Grazie innanzitutto per avermi risposto. Veniamo al problema.
VBA tu dici...non credevo fosse necessario arrivare a tanto. Io ho risolto
in un modo piu' semplice. Te lo spiego e poi se vuoi giudicalo:
Nella colonna A ho tutti i numeri in ordine crescente. Nessun numero e'
ripetuto. Nella colonna B ho solo una parte dei numeri della colonna A,
anche qui non ripetuti. Per ottenere in un'altra colonna i numeri della
colonna A che non sono nella B,  supponendo di avere nella colonna A i
numeri dall'1 al 10, e nella colonna B 5 tra quei 10 numeri, faccio cosi':
in C1 scrivo =CERCA.VERT(A1;$B$1:$B$10;1;VERO)
e in D1 =SE(VAL.ERRORE(C1)=VERO;A1;SE(A1=C1;"";A1))
copio le formule in tutte le righe e nella colonna D ottengo i numeri
presenti solo in colonna A. Funzionare funziona, ma non so perche' non mi
convince molto.
Intanto la questione della lentezza di excel e' peggiorata. Dopo tre giorni
che lavoravo sul file e dopo che e' cresciuto troppo di dimensioni, non si
apre piu'. Tre giorni di lavoro buttati :-(((
Ciao, Max

 Infine, ho voluto seguire il consiglio che mi e' stato dato e utilizzare
access per gestire un archivio di dati poi da analizzare. Il problema e' che
il mio access, ogni volta che tento di importare il file di testo coi dati
(circa 25MB), si blocca e non effettua l'importazione. Potrebbe essere anche
questo un problema di RAM?
Formato del file?
Procedura usata?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 Procedura usata?
Formato del file .txt
Procedura usata, da un database vuoto, ho clickato su Nuovo e quindi su
Importazione Tabella. Ho scelto il file .txt e ho dato l'OK. A questo punto
non parte nemmeno il wizard di importazione e Access si blocca. Preciso che
uso l'Office 97. Preciso anche che il file importato non e' all'origine un
.txt, ma un semplice file senza estensione penso in ascii, che pero'
rinominato in .txt, a tranche, non ho mai avuto problemi ad importare in
excel e che se apro con word presenta dati in colonne separate da
tabulazioni.
Grazie per l'attenzione.
Ciao, Max

 ma un semplice file senza estensione penso in ascii, che pero' rinominato
in .txt, a tranche, non ho mai avuto problemi ad importare in excel e che se
apro con word presenta dati in colonne separate da tabulazioni.
Importazione Tabella non va bene. Si intende con questo l'importazione di
una Tabella di un file di un database in formato access.
Non ho sottomano MSO97 quindi non posso essere preciso. In Access 2000
sarebbe:
    File
    > Carica dati esterni
      > Importa...
        Tipo file: File di testo (*.txt;*.csv;*.tab;*.asc)
Poi segui le istruzioni della procedura guidata.


         Tipo file: File di testo (*.txt;*.csv;*.tab;*.asc)
Si' scusami, scrivendo mi sono confuso con l'altra procedura, ma quella che
dici tu e' quella che ho usato. Per sicurezza ho riprovato, togliendo tutte
le applicazioni in background per liberare memoria, ma il risultato e'
sempre lo stesso. Appena parte la procedura d'importazione Access si blocca.
A questo punto non mi rimane che provare ad aggiungere un modulo di RAM e
sperare che il problema sia li'.
Ti rubo ancora un'istante (a te o ad altri che vorranno leggere). Ricordi le
formule in forma di matrice che mi hai spiegato solo pochi giorni fa?
FANTASTICHE, mi permettono di accorciare enormemente il lavoro. Pero' ho dei
problemi con la funzione 
CONTA.SE
, non riesco a farla funzionare.
Prendi questa funzione:
{=SE(CONTA.NUMERI(SE($A2=Foglio1!$A$2:$A$17024;Foglio1!$AH$2:$AH$17024))>=20
;SOMMA(SE($A2=Foglio1!$A$2:$A$17024;Foglio1!$AH$2:$AH$17024));"N.D.")}
Funziona egregiamente e cosi' anche se al posto di SOMMA metto MEDIA o
DEV.ST
, aggiungo ad esempio ARROTONDA, o altre operazioni in seguito. Nessun
problema. Se invece scrivo 
CONTA.SE
 non c'e' verso di farle restituire un
valore valido. Semplificando le cose e scrivendo solo:
=
CONTA.SE
((SE($A2=Foglio1!$A$2:$A$17024;Foglio1!$AH$2:$AH$17024));">0")
ottengo semplicemente #VALORE!
anche se la scrivo cosi':
{=
CONTA.SE
(SE($A2=Foglio1!$A$2:$A$17024;Foglio1!$AH$2:$AH$17024);">0")}
Ho provato a variare ancora il numero e la posizione delle parentesi, senza
risultati se non quello di peggiorare la situazione (la formula digitata
contiene un errore...)
Il punto e' che e' una funzione molto importante per me che se non ricordo
male non e' presente nemmeno tra le formule che si possono scegliere con la
tabella pivot.
Siccome gia' le formule in forma di matrice hanno problemi con la funzione
CONTA.NUMERI e sballano completamente con CONTA.VALORI, ho l'impressione
agiscano ancora peggio con 
CONTA.SE
.
O sbaglio ancora una volta io qualcosa?
Grazie
Ciao, Max

 ha scritto nel messaggio news:93g8mp$9vb4f$1...@ID-46161.news.dfncis.de...


 O sbaglio ancora una volta io qualcosa?
Spero di essere stato esaustivo. Esausto lo sono sicuramente, come forse chi
mi ha letto fin qui. :-)


 Vediamo prima di capire come funzionano tali formule. Esempio:

Mamma mia che complicazioni!!! Cmq grazie mille di questa spiegazione. Ho
capito che 
conta.se
 non la posso applicare come volevo, ma ho trovato un
modo lo stesso.
In pratica io ho un file cosi' strutturato.
Foglio 1
               A            B            C      ...
1         cod1        15            18
2         cod1        20            15
3         cod1        18            18
..         ...              ...             ...
50       cod2        17           16
51       cod2        24            9
...         ...             ...             ...
Nel foglio 2 traggo informazioni attraverso le formule in forma di matrice
tipo la media dei numeri in colonna B che in colonna A hanno come riferimeto
un particolare codice (es. cod1), ecc.
Visto l'impossibilita' di costruire una funzione con 
conta.se
, ipotizzando
di dover trattare i numeri in colonna B, ho fatto cosi'. In una colonna nel
foglio uno ho inserito la formula 
CONTA.SE
(B1;">x") copiandola poi in tutte
le righe. se nelle celle della colonna B e' presente un numero superiore a
quello scelto ottengo nella nuova colonna 1 altrimenti 0. A questo punto nel
foglio 2 mi basta costruire una formula in forma di matrice con la funzione
SOMMA della nuova colonna.
Ancora grazie mille.
Ciao, Max

 Ancora grazie mille.
Prego. Grazie a te per la piacevole conversazione.


 Sicuro di aver scritto proprio cosi`?
Qui non capisco se ti riferisci alla x, che ovviamente sostituisce
nell'esempio il numero che immetto (che puo' cambiare), oppure al
considerare come intervallo una sola cella. Non e' corretto?
Perche' l'alternativa puo' essere SE(B1>x;1;0)
Ciao, Max

 Perche' l'alternativa puo' essere SE(B1>x;1;0)
Esatto. Mi domandavo solo se ci fosse qualcos'altro che mi sfuggisse.


 Esatto. Mi domandavo solo se ci fosse qualcos'altro che mi sfuggisse.
Io mi domando perche' se la formula funziona e funziona in ogni caso non la
si deve considerare corretta. Non credi che i programmatori abbiano previsto
un uso simile della funzione? Se non l'avessero previsto darebbe un
risultato sbagliato. O sbaglio io?
Ciao e grazie ancora per la tua disponibilita'
Max

 Io mi domando perche' se la formula funziona e funziona in ogni caso non
la si deve considerare corretta. Non credi che i programmatori abbiano
previsto un uso simile della funzione? Se non l'avessero previsto darebbe un
risultato sbagliato. O sbaglio io?
Non ho sollevato obiezioni! ;-)
Infatti ti ho chiesto spiegazioni perche', dato l'uso insolito o se vogliamo
eccessivo della funzione, ma pur sempre legittimo e coerente, mi era venuto
il dubbio che dietro ci fossero altri discorsi che non avevo colto. Come
appunto gia` ho precisato.


 appunto gia` ho precisato.
Perche' ho pensato di utilizzare 
CONTA.SE
? Semplicemente perche' mi sembrava
semanticamente piu' appropriata. Suona meglio proprio a pronunciarla :-)
Poi avevo la necessita' di costruire una formula del tipo
CONTA.SE.CONSECUTIVE e ho cominciato a pensare in termini di 
CONTA.SE
,
piuttosto che di SE. Ho pensato che potesse non funzionare considerando come
intervallo una sola cella, ma quando ho visto che funzionava non ci ho piu'
pensato.
Ciao, Max

 ma quando ho visto che funzionava non ci ho piu' pensato.
Guarda che anche se mi permetto di prenderti amichevolmente in giro capisco
perfettamente cosa vuoi dire e quali siano le tue intenzioni. Mi sembra che
sappiamo benissimo entrambi che, alla fine, l'importante e` che "la cosa"
funzioni, che funzioni bene e che funzioni quando serve, non quando non
serve piu`. :-)
Pero`, riprendendo il discorso della "correttezza" che facevi tu, tale
concetto non e` assoluto: non si puo` dire che una cosa sia sbagliata o
corretta se produce il risultato atteso. Bisogna valutare in termini di
costi e benefici, considerati non in un certo istante ma per la durata
stimata della vita della realizzazione.
