Pannello di Controllo Moderatore ]

[Risolto] Sintassi array

Discussioni sull'applicazione per i fogli di calcolo

[Risolto] Sintassi array

Messaggioda Raoul Duke » domenica 21 aprile 2019, 13:49

Salve a tutti
non sono pratico di sintassi array, quindi vi chiedo cortesemente (visto che questo codice era una prova ma in realtà le dimensioni saranno molto maggiori) come si può scrivere in maniera più compatta questo codice?
grazie a tutti e buona pasqua

Codice: Seleziona tutto   Espandi visualeStringi visuale
Sub SelezionaM

Doc      = thisComponent
Foglio1   = Doc.sheets(0)

for i=1 to 5

x1=Foglio1.getCellByPosition (4,i)
y1=Foglio1.getCellByPosition (5,i)
z1=Foglio1.getCellByPosition (6,i)

   x1.String=""
   y1.string=""
   z1.string=""

   j=j+1
next

j=1

for i=1 to 5

a1=Foglio1.getCellByPosition (0,i)
b1=Foglio1.getCellByPosition (1,i)
c1=Foglio1.getCellByPosition (2,i)

a2=Foglio1.getCellByPosition (4,i)
b2=Foglio1.getCellByPosition (5,i)
c2=Foglio1.getCellByPosition (6,i)

If b1.String = "M" Then
   
   a2=Foglio1.getCellByPosition (4,j)
   b2=Foglio1.getCellByPosition (5,j)
   c2=Foglio1.getCellByPosition (6,j)
   
   a2.String=a1.string
   b2.string=b1.string
   c2.string=c1.string
   
   j=j+1

End if

next

end sub
Ultima modifica di Raoul Duke il sabato 27 aprile 2019, 1:31, modificato 1 volta in totale.
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda patel » domenica 21 aprile 2019, 21:01

Ciao, cosa c'entrano gli array ? tu stai usando celle, magari range di celle, faresti meglio ad allegare un file di esempio con i dati di partenza, il risultato desiderato e qualche spiegazione sul tuo obiettivo.
Per cancellare un range puoi usare questo codice invece di fare un ciclo.
Codice: Seleziona tutto   Espandi visualeStringi visuale
Doc = ThisComponent
Sheet = Doc.Sheets(0)
CellRange = Sheet.getCellRangeByName("A2:C20")
CellRange.clearContents(5) ' value + string VALUE = 1 STRING = 4
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggioda Raoul Duke » domenica 21 aprile 2019, 21:28

hai ragione, credo di fare un pò di confusione...
cmq ho cambiato leggermente la funzione che deve eseguire il codice.
così com'è non mi funziona perché non sono capace a creare un array di valori (misti numeri e stringhe), e poi selezionarli per inserirli in un range di celle.
allego il file che forse si capisce meglio....
Allegati
PROVA.ods
(12.25 KiB) Scaricato 7 volte
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda gioh66 » domenica 21 aprile 2019, 21:49

Intanto buona Pasqua, poi premetto che io non so scrivere codice, ma quello che vorresti fare tu si può ottenere con delle formule matriciali:
in A2 di Foglio2 metti
Codice: Seleziona tutto   Espandi visualeStringi visuale
=SE(VAL.ERRORE(INDICE(Foglio1!A$2:A$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))));"";INDICE(Foglio1!A$2:A$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))))

inserisci la formula nella cella conferma con ctrl+maiuscolo+invio e copia incolla in basso
In B2 invece metti
Codice: Seleziona tutto   Espandi visualeStringi visuale
=SE(VAL.ERRORE(INDICE(Foglio1!C$2:C$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))));"";INDICE(Foglio1!C$2:C$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))))

matriciale come la prima.
Allegati
PROVA(bis).ods
(12.8 KiB) Scaricato 8 volte
Libreoffice 6 / Ubuntu 18.04 - PcLinuxOS
Libreoffice 5.1 / Ubuntu 16.04 - LinuxMint 18
Avatar utente
gioh66
Volontario
Volontario
 
Messaggi: 779
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Sintassi array

Messaggioda Raoul Duke » domenica 21 aprile 2019, 22:22

Grazie gioh,
Si so che si può fare con le matriciali, ma avrei bisogno di farlo col codice. Grazie comunque della disponibilità!
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda gioh66 » domenica 21 aprile 2019, 22:32

Di nulla, allora confidiamo in chi il codice lo sa scrivere :D
Libreoffice 6 / Ubuntu 18.04 - PcLinuxOS
Libreoffice 5.1 / Ubuntu 16.04 - LinuxMint 18
Avatar utente
gioh66
Volontario
Volontario
 
Messaggi: 779
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Sintassi array

Messaggioda patel » lunedì 22 aprile 2019, 8:23

non capisco la tua ostinazione nell'usare array, è inutile salvare il contenuto di un range in un array e poi trasferire l'array in altro range, i range sono già array, nel tuo caso io copierei il range che ti interessa nel foglio 2 e poi eliminerei le righe che non vuoi vedere:
Codice: Seleziona tutto   Espandi visualeStringi visuale
sub copia
  Doc = thisComponent
  oSheet1 = Doc.Sheets.getByIndex(0)
  oSheet2 = Doc.Sheets.getByIndex(1)
  CellaSesso = oSheet1.getCellByPosition (1,14)
  Sex = CellaSesso.String
  oRange = oSheet1.getCellRangeByName("A1:C8").RangeAddress ' range da copiare
  oCellCpy = oSheet2.getCellByPosition(0,0).CellAddress ' destinazione
  oSheet1.CopyRange(oCellCpy, oRange) ' copia il range

  for riga = 5 to 1 step -1
     if oSheet2.getCellByPosition (1,riga).String <> Sex then
       oSheet2.getRows.removeByIndex(riga, 1)
     end if
  next
End Sub
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggioda Raoul Duke » martedì 23 aprile 2019, 2:09

grazie
patel
, ho fatto come mi dicevi, in effetti funziona.
ora ho un problema però con le call... come mai quando avvio la sub main non mi esegue la coll alle sub degli altri moduli?
grazie della pazienza
Allegati
Database con MACRO.ods
(167.43 KiB) Scaricato 10 volte
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda patel » martedì 23 aprile 2019, 8:16

Mettere le varie sub in altri moduli non è la cosa miglore per un principiante, non ti rendi conto se le variabili che usi sono valorizzate. Qundo c'è qualcosa che non funziona avvia la sub Main con F8 step by step, così vedi il flusso del programma e posizionando il cursore sulle variabili ne vedi il valore.
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggioda Raoul Duke » martedì 23 aprile 2019, 10:35

col cursore mi mostra solo il valore delle variabili numeriche (non le variabili Doc, sheet, ecc... che sono quelle messe in argomento alle funzioni che chiamo).
ma cmq sono talmente poche le variabili che ho impostato che mi sembra strano che sia un problema di dimenticanza di valorizzazione.
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda patel » martedì 23 aprile 2019, 10:49

resta il fatto che anch'io, con un codice così frammentato, non riesco a capire cosa c'è che non funziona.
Cosa vuoi fare dopo aver copiato i dati filtrati nel foglio2 ?
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggioda Raoul Duke » martedì 23 aprile 2019, 11:05

capisco, scusami.
ho creato un doc di prova molto più semplificato (che mi da lo stesso problema con le call). per caso potresti vedere se riesci a capire dove starebbe il problema adesso?
grazie mille in ogni caso.
Allegati
PROVA 2.ods
(31.17 KiB) Scaricato 9 volte
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda patel » martedì 23 aprile 2019, 11:15

Ma allora parlo al vento, non si tratta del documento semplificato o no, ti ho chiesto cosa vuoi fare e tu mi alleghi un nuovo file con le macro sempre sparpagliate in moduli diversi
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggioda Raoul Duke » martedì 23 aprile 2019, 11:27

ah, beh, dentro la macro main ho inserito una riga "call selezione", ma quando eseguo la main sembra che questa chiamata la salti proprio. invece vorrei che la eseguisse.
la sub selezione dovrebbe copiarmi i dati nel foglio TRATT, ma invece non me lo fa: rimane vuota la pagina TRATT.
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda Raoul Duke » martedì 23 aprile 2019, 16:13

non so come mai ma è bastato nominare il modulo dove c'è il main con un nome che alfabeticamente viene prima di quello dove ci stanno le sub che vengono chiamate e ora funziona... bah.
grazie a tutti in ogni caso :)
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda patel » martedì 23 aprile 2019, 19:16

bene, spero che la prossima volta metterai tutte le sub in module1
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggioda Raoul Duke » martedì 23 aprile 2019, 21:05

ma se le metto tutte in un modulo quando il codice si allunga poi per trovarle devo scorrere migliaia di righe no? non è più comodo usare più moduli?
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Sintassi array

Messaggioda patel » mercoledì 24 aprile 2019, 17:40

usando più moduli come fai a ricordarti in quale modulo hai messo le sub ? comunque se ti trovi bene così continua pure.
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3275
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno


Torna a Calc

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti