[Risolto] Sintassi array

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

[Risolto] Sintassi array

Messaggio da Raoul Duke »

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

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
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

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

Doc = ThisComponent
Sheet = Doc.Sheets(0)
CellRange = Sheet.getCellRangeByName("A2:C20")
CellRange.clearContents(5) ' value + string VALUE = 1 STRING = 4 
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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 114 volte
OpenOffice 4.1.5 con MacOS 10.13.6
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1719
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Sintassi array

Messaggio da gioh66 »

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

=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

=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 105 volte
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1719
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Sintassi array

Messaggio da gioh66 »

Di nulla, allora confidiamo in chi il codice lo sa scrivere :D
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

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

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
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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 115 volte
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

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.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

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 ?
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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 100 volte
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

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
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

bene, spero che la prossima volta metterai tutte le sub in module1
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Sintassi array

Messaggio da Raoul Duke »

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
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sintassi array

Messaggio da patel »

usando più moduli come fai a ricordarti in quale modulo hai messo le sub ? comunque se ti trovi bene così continua pure.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi