Pagina 1 di 1

[Risolto] sintassi per statistica

Inviato: martedì 30 aprile 2019, 0:49
da Raoul Duke
Salve,
in una cella per trovare il p-value basta che scrivo
= DISTRIB.T ( A1 ; B1+B2-2 ; 2 )

qual'è la sintassi per scrivere questa formula in una macro?
Grazie

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 8:16
da patel
Tu vuoi che la macro scriva la formula per te ? in questo caso

Codice: Seleziona tutto

oSheet = thisComponent.Sheets(0)
oSheet.getCellByPosition(1, 3).setFormula("DISTRIB.T ( A1 ; B1+B2-2 ; 2 ) ")

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 9:51
da Raoul Duke
Due problemi:

1-con questo mi scrive la formula nella cella come se fosse una stringa.. non mi restituisce il valore dell'espressione (neanche se inserisco "=" prima della'espressione all'interno delle virgolette)

2-se invece di far riferimento a celle volessi far riferimento a variabili che ho già definito nel codice? del tipo: oCell.Value=DISTRIB.T(X;NCa+NCb-2;2)
mi restituisce ovviamente errore di sintassi nelle parentesi

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 10:11
da Gaetanopr
Puoi procedere in diversi modi
1) se usi il metodo formula la formula devi scriverla in inglese

Codice: Seleziona tutto

Foglio1.getCellByPosition(1,17).Formula = "=TDIST(B15;B11+C11-2;2)"
2)Se vuoi usare la formula in italiano devi usare FormulaLocal

Codice: Seleziona tutto

Foglio1.getCellByPosition(1,15).FormulaLocal = "=DISTRIB.T(B15;B11+C11-2;2)"
3)In italiano con variabili

Codice: Seleziona tutto

Foglio1.getCellByPosition(1,16).FormulaLocal = "=DISTRIB.T("& X & ";" & NCa+NCb-2 & ";2)"
Se vuoi il risultato direttamente e non la formula sulla cella puoi agire in 2 modi, una volta inserita la formula nella cella ne copy il risultato

Codice: Seleziona tutto

Foglio1.getCellByPosition(1,15).Value = Foglio1.getCellByPosition(1,15).Value"
oppure tramite le functionAccess senza usare .Formula o FormulaLocal
4)

Codice: Seleziona tutto

Dim svc As Object
   svc = createUnoService("com.sun.star.sheet.FunctionAccess")
   Foglio1.getCellByPosition(1,18).Value = svc.callFunction("TDIST",Array(X, NCa+NCb-2, 2))

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 10:31
da Raoul Duke
:D Grazie mille! ora ho l'imbarazzo della scelta!! :D

Re: [Risolto] sintassi per statistica

Inviato: martedì 30 aprile 2019, 10:50
da Raoul Duke
Cosa stranissima Patel:

alla fine ho utilizzato:

Codice: Seleziona tutto

Foglio.GetCellByPosition(X,Y).Formula = "=TDIST("& X & ";" & NCa+NCb-2 & ";2)"
e effettivamente mi dà inserisce nel doc la formula scritta con i valori delle variabili giusti (come si vede nel campo contenuto della cella selezionata), ma poi mi restituisce #NOME

mentre sul file di prova la stessa formula con gli stessi valori mi restituisce il risultato corretto.

hai idea del perché possa fare una cosa del genere?

Re: [Risolto] sintassi per statistica

Inviato: martedì 30 aprile 2019, 11:08
da Raoul Duke
questo è il file se ti può esser utile

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 11:30
da patel
prova così
STAT.GetCellByPosition(0,2).FormulaLocal = "=DISTRIB.T("& X & ";" & NCa+NCb-2 & ";2)"
però è strano che DISTRIB.T e TDIST producano risultati diversi

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 11:44
da Gaetanopr
Producono risultati diversi, perchè le variabili nella macro sono diversi dai valori sul foglio(se ti riferisci al file che avevo allegato nel mio messaggio precedente).
A me non dà nessun errore, comunque puoi usare le altre varianti che ti ho fornito

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 12:38
da patel
mi riferisco al file che allego

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 12:56
da Gaetanopr
Con openoffice i risultati sono identici.
Su libreoffice la funzione TDIST viene "tradotta" in DISTRIBT(su openoffce non è presente) e non in DISTRIB.T .
Stranamente la funzione DISTRIB.T su libreoffice restituisce un valore diverso dalla funzione DISTRIB.T di openoffice, invece DISTRIBT (presente solo su libre) restituisce lo stesso valore della DISTRIB.T di openoffice.
Come se la funzione DISTRIB.T di openoffice si chiamasse DISTRIBT su libreoffice.

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 13:56
da Raoul Duke
prova così
STAT.GetCellByPosition(0,2).FormulaLocal = "=DISTRIB.T("& X & ";" & NCa+NCb-2 & ";2)"
grazie patel, con questa mi funziona!

non mi dava risultati diversi l'altra... mi restituiva #NOME come risultato! strano... ma vabbè l'importante per ora è che quest'altra mi funziona bene

Re: sintassi per statistica

Inviato: martedì 30 aprile 2019, 14:04
da Gaetanopr
Raoul Duke ha scritto:
grazie patel, con questa mi funziona!

non mi dava risultati diversi l'altra... mi restituiva #NOME come risultato! strano... ma vabbè l'importante per ora è che quest'altra mi funziona bene
Scusami ma forse non ti sei accorto che già avevo fornito questa soluzione tra le 4 nei miei precedenti messaggi assieme al file che avevo allegato

Re: [Risolto] sintassi per statistica

Inviato: martedì 30 aprile 2019, 14:28
da Raoul Duke
si si, avevo provato a usare la tua prima frammentandola con le & , ma come ho visto è meglio per un principiante come me non avventurarsi in modifiche! la terza alla fine è quella che mi ha funzionato per come avevo impostato il codice e non ha bisogno di modifiche! grazie!