DA POSIZIONE A COMBINAZIONE

72 views
Skip to first unread message

Zipper

unread,
Sep 14, 2022, 7:18:40 AMSep 14
to
Buongiorno N. Jones
per introdurre il mio quesito ti rimando ad una discussione che tu
avesti il 16 giugno 2017 con Nelson Cavazzuti e Paoloard, ma che poi
non ha avuto seguito.

https://answers.microsoft.com/it-it/msoffice/forum/all/formula-per-calcolare-l-indice-di-posizione-per/c12019bc-fd5b-4b55-8025-aa7303a26761

Da lì ho preso lo spunto per il problema inverso.
Immaginiamo un insieme di 90 numeri (N = 90), esempio quelli del lotto,
e immaginiamo di elencare le combinazioni delle cinquine (k = 5) in
ordine LESSICOGRAFICO, quindi avremo
1,2,3,4,5
1,2,3,4,6
.........
86,87,88,89,90
OK

Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad ogni
cinquina corrisponde in modo UNIVOCO un numero che potremmo chiamare
anche numero di posizione.
1 - 1,2,3,4,5
2 - 1,2,3,4,6
43949268 - 86,87,88,89,90

Ora il mio problema, a tuttora non risolto, è:
dato un numero in input, e stabilito che il numero (posizionale) si
riferisce allo sviluppo di 90 numeri presi 5 alla volta,
è possibile costruire una formula che in 5 caselle restituisca i 5
numeri della combinazione che occupa appunto quella posizione ?
Io ho diverse soluzioni fatte con MACRO, ma io cerco, se possibile, se
esiste, una soluzione SOLO con FORMULE.
Ho provato diverse strade, compresa quella del Risolutore, e chiesto a
diverse persone, niente da fare.
ESEMPIO:
Se in A1 impongo il numero 1.000.000 (posizione della milionesima
cinquina), in A2, A3, A4, A5, A6 dovrebbero comparire i numeri della
combinazione milionesima, che sono esattamente 1,12,44,83,90.
Non ho preparato un file perchè l'esempio mi sembra chiaro.
Ti ringrazio a prescindere per qualsiasi risposta tu sappia darmi.

LEO

Ammammata

unread,
Sep 14, 2022, 10:49:26 AMSep 14
to
Il giorno Wed 14 Sep 2022 01:18:22p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfsdac$5ci$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad ogni
> cinquina corrisponde in modo UNIVOCO un numero che potremmo chiamare
> anche numero di posizione.
> 1 - 1,2,3,4,5
> 2 - 1,2,3,4,6
> 43949268 - 86,87,88,89,90
>
> Ora il mio problema, a tuttora non risolto, è:
> dato un numero in input, e stabilito che il numero (posizionale) si
> riferisce allo sviluppo di 90 numeri presi 5 alla volta,
> è possibile costruire una formula che in 5 caselle restituisca i 5
> numeri della combinazione che occupa appunto quella posizione ?
> Io ho diverse soluzioni fatte con MACRO, ma io cerco, se possibile, se
> esiste, una soluzione SOLO con FORMULE.
>

i miei 2 cent

invece di usare un progressivo da 1 a 43.949.268 perchè non usi una
semplice stringa con i 5 numeri formattati a due cifre?

> 0102030405 - 1,2,3,4,5
> 0102030406 - 1,2,3,4,6
> 8687888990 - 86,87,88,89,90

avresti l'univocità del codice e una diretta corrispondenza con i numeri
estratti: forse ti aiuterebbe

issdr

unread,
Sep 15, 2022, 2:58:31 AMSep 15
to
Zipper wrote:

> Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad
> ogni cinquina corrisponde in modo UNIVOCO un numero che potremmo
> chiamare anche numero di posizione.

senza avere la tabella, tramite un algoritmo? ho generato la tabella con
python, su un buon PC la cinquina è molto impegnativa. non sono nemmeno
convinto che si possa "risalire la corrente" (posizione -> quintupla)

per me l soluzione pratica è tenere la tavola in un file di testo,
pescando la cinquina con un'UDF o una macro autoinnescante (cambi la
cella della posizione e cicciano fuori i 5 numeri relativi)

Zipper

unread,
Sep 15, 2022, 3:05:17 AMSep 15
to
Scriveva issdr nel messaggio
<87pmfx8...@ID-313311.news.uni-berlin.de>
cio, intanto grazie per la risposta, ma vorrei dire che poichè esiste
benissimo la formula che da 5 numeri restituisce il numero di
posizione, ne deriva che potrebbe essere possibile il contrario
il contrario, e cioè da un numero, che appartiene all'insieme di 90,
ricavare la cinquina è ben possibile con un algoritmo che però vorrebbe
una macro, e questo algo già ce l'ho, ecco perchè ho chiesto se sarebbe
possibile con una formula, cioè senza macro
LEO

issdr

unread,
Sep 15, 2022, 4:50:34 AMSep 15
to
Zipper wrote:

> questo algo già ce l'ho, ecco perchè ho chiesto se sarebbe possibile
> con una formula, cioè senza macro

puoi condividerlo? (curiosità, dubito sarò d'aiuto)

grazie

Ammammata

unread,
Sep 15, 2022, 5:07:28 AMSep 15
to
Il giorno Thu 15 Sep 2022 10:50:17a, *issdr* ha inviato su
microsoft.public.it.office.excel il messaggio news:87leql81iu.fsf@ID-
313311.news.uni-berlin.de. Vediamo cosa ha scritto:
ma poi excel le regge 44 milioni di righe? il mio 2021 si ferma a poco più
di un milione

Zipper

unread,
Sep 15, 2022, 6:35:10 AMSep 15
to
issdr scriveva il 15/09/2022 :
è il banale algo dello sviluppo combinazioni, in questo caso la
cinquina
-----
posizione = 0
for a = 1 to 86
for b = a+1 to 87
for c = b+1 to 88
for d = c+1 to 89
for e = d+1 to 90
posizione = posizione + 1
if posizione = numero scritto in Excel, allora è evidente
che la cinquina è fatta da a,b,c,d,e
next e,d,c,b,a
non c'è proprio niente da scrivere, come pensa Ammammata

LEO

issdr

unread,
Sep 15, 2022, 9:00:05 AMSep 15
to
Zipper wrote:

> è il banale algo dello sviluppo combinazioni, in questo caso la
> cinquina

il tuo pseudo non mi dice nulla, sarò limitato io. puoi indicarmi un
esempio funzionante in un linguaggio qualsiasi? grazie.

ho già costruito la tabella, con un algoritmo funzionante. non mi sembra
scontato che il percorso inverso, posizione -> quintupla (senza passare
dalla tabella) abbia la stessa complessità computazionale

Zipper

unread,
Sep 15, 2022, 9:15:02 AMSep 15
to
Scriveva issdr giovedì, 15/09/2022:
pensavo che tu sapessi estrapolare dallo pseudolinguaggio
--------
Sub lotto()
Dim a, b, c, d, e As Byte
Dim p, k As Long
Dim T
p = Range("A1").Value
Range("B1:F1").Cells.Clear
Range("A1:H1").HorizontalAlignment = xlCenter
T = Now
For a = 1 To 86: For b = a + 1 To 87: For c = b + 1 To 88: For d = c +
1 To 89: For e = d + 1 To 90
k = k + 1
If k = p Then

Cells(1, 2).Value = a
Cells(1, 3).Value = b
Cells(1, 4).Value = c
Cells(1, 5).Value = d
Cells(1, 6).Value = e
GoTo fine
End If
Next: Next: Next: Next: Next
fine:

Range("H1").Value = Now - T
Range("A1").Select
End Sub
--------------
la tua seconda affermazione non mi è chiara

Zipper

unread,
Sep 15, 2022, 9:15:49 AMSep 15
to
Zipper nel messaggio <tfv8ge$3n1$1...@gioia.aioe.org> ha pontificato
e non c'è bisogno di nessuna ma proprio nessuna tabella

issdr

unread,
Sep 15, 2022, 9:20:05 AMSep 15
to
Ammammata wrote:

> ma poi excel le regge 44 milioni di righe? il mio 2021 si ferma a poco più
> di un milione

ho proposto di leggere la tabella da un file di testo. penso sia la
soluzione più rapida e indolore

Ammammata

unread,
Sep 15, 2022, 9:26:09 AMSep 15
to
Il giorno Thu 15 Sep 2022 03:05:42p, *issdr* ha inviato su
microsoft.public.it.office.excel il messaggio
news:87leqkk...@ID-313311.news.uni-berlin.de. Vediamo cosa ha
scritto:
ma se usasse semplicemente il codice corrispondente ai 5 numeri (come
scrivevo sopra, 0102030405 per la prima cinquina) non avrebbe nemmeno
bisogno della tabella; certo, dovrebbe però ordinarli dal piccolo al grande
per avere la corrispondenza

Ammammata

unread,
Sep 15, 2022, 9:29:30 AMSep 15
to
Il giorno Thu 15 Sep 2022 03:14:38p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfv8ge$3n1$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> For a = 1 To 86: For b = a + 1 To 87: For c = b + 1 To 88: For d = c +
> 1 To 89: For e = d + 1 To 90
> k = k + 1
> If k = p Then
>
> Cells(1, 2).Value = a
> Cells(1, 3).Value = b
> Cells(1, 4).Value = c
> Cells(1, 5).Value = d
> Cells(1, 6).Value = e
> GoTo fine
> End If
> Next: Next: Next: Next: Next
>

qualcosa non mi quadra: scrivi sempre nelle stesse celle? ti serve come
test di velocità?

Zipper

unread,
Sep 15, 2022, 9:35:55 AMSep 15
to
Dopo dura riflessione, Ammammata ha scritto :
credo che parliamo 2 lingue diverse, o che tu non abbia letto bene
ilmio codice
c'è un IF, che è l'unico momento in cui scrive qualcosa

issdr

unread,
Sep 15, 2022, 9:41:11 AMSep 15
to
Zipper wrote:

> e non c'è bisogno di nessuna ma proprio nessuna tabella

più chiaro in vba, grazie. bello, ma non saprei come fare con le
formule, quelle iterazioni...

Zipper

unread,
Sep 15, 2022, 9:46:16 AMSep 15
to
Scriveva issdr giovedì, 15/09/2022:
ecco perchè l'altro ieri ho scritto a Norman Jones, lui aveva iniziato
una conversazione 5 anni fa e quindi è già pratico del problema.
come hai potuto vedere io ho scritto il VBA, migliorabile in velocità,
c'è poi che quest oalgo vale solo per le cinquine,quindi non è
universale,ma soprattutto io sto cercando, se esiste, la FORMULA, al
posto della macro, ed hoil sospetto che si possa fare, non la certezza

Ammammata

unread,
Sep 15, 2022, 10:04:35 AMSep 15
to
Il giorno Thu 15 Sep 2022 03:35:37p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfv9np$mbp$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> credo che parliamo 2 lingue diverse, o che tu non abbia letto bene
> ilmio codice
> c'è un IF, che è l'unico momento in cui scrive qualcosa
>

vada per la seconda :)
resto comunque dell'idea che gestire una eventuale tabella di 44 milioni di
record non sia la soluzione migliore
mi vien da pensare che forse, con un po' di divisioni e di calcoli dei
resti, si potrebbe arrivare allo stesso risultato in un millisecondo,
invece di ciclare, p.e., per 35milioni di volte
se stanotte non riesco a dormire ci penso su seriamente

Zipper

unread,
Sep 15, 2022, 10:14:28 AMSep 15
to
Dopo dura riflessione, Ammammata ha scritto :
forse non sai che io rimugino da anni su questa materia, le ho provate
tutte, ma la tabella è una idea tua, la tabella, e ancor meno il file
di testo, non serve a niente.
i miei programmini oltre ad usare i relativi linguaggi stanno attenti
anche alla ergonomia e velocità
E proprio per la velocità massima io ipotizzo l'esistenza di una
formula che dia all'istante i 5 estratti, nulla puo' essere più veloce

issdr

unread,
Sep 15, 2022, 10:23:21 AMSep 15
to
Zipper wrote:

> ecco perchè l'altro ieri ho scritto a Norman Jones, lui aveva iniziato
> una conversazione 5 anni fa e quindi è già pratico del problema.
> come hai potuto vedere io ho scritto il VBA, migliorabile in velocità,
> c'è poi che quest oalgo vale solo per le cinquine,quindi non è
> universale,ma soprattutto io sto cercando, se esiste, la FORMULA, al
> posto della macro, ed hoil sospetto che si possa fare, non la certezza

magari hai già l'UDF, ma ho pensato sta cosa per la cinquina. qui 365,
credo vada ovunque ci sia lo spillover. altrove penso funzioni se si
selezionano 5 celle adiacenti, ma è da provare.

--8<---------------cut here---------------start------------->8---
Function lotto(ByVal pos As Long)
Dim a, b, c, d, e As Integer
Dim k As Long
Dim aVett(0 To 4) As String
k = 0
For a = 1 To 86: For b = a + 1 To 87: For c = b + 1 To 88: For d = c + 1 To 89: For e = d + 1 To 90
k = k + 1
If k = pos Then
aVett(0) = CStr(a)
aVett(1) = CStr(b)
aVett(2) = CStr(c)
aVett(3) = CStr(d)
aVett(4) = CStr(e)
GoTo fine
End If
Next: Next: Next: Next: Next
fine:
lotto = aVett
End Function
--8<---------------cut here---------------end--------------->8---

sarebbe interessante generalizzarla

Zipper

unread,
Sep 15, 2022, 10:26:25 AMSep 15
to
Dopo dura riflessione, issdr ha scritto :
> --8<---------------cut here---------------end--------------->8---

> sarebbe interessante generalizzarla

io ho Excel 2007, non farmi fare fatiche inutili, vuoi dire che quello
che hai scritto ci mette meno di 1 secondo ?

Ammammata

unread,
Sep 15, 2022, 10:28:01 AMSep 15
to
Il giorno Thu 15 Sep 2022 04:14:10p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfvc02$1qmm$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> forse non sai che io rimugino da anni su questa materia,

io no :)

> le ho provate
> tutte, ma la tabella è una idea tua, la tabella, e ancor meno il file
> di testo, non serve a niente.
>

ne sono quasi convinto, l'idea di arrivarci senza 5 cicli for/next
innestati è intrigante

Ammammata

unread,
Sep 15, 2022, 10:31:09 AMSep 15
to
Il giorno Thu 15 Sep 2022 04:27:59p, *Ammammata* ha inviato su
microsoft.public.it.office.excel il messaggio
news:XnsAF13A7814BE8am...@127.0.0.1. Vediamo cosa ha
scritto:

>> forse non sai che io rimugino da anni su questa materia,
>

ancora una domanda: da dove nasce la necessità, come nell'esempio OP, di
sapere che la posizione 1.000.000 corrisponde a 1,12,44,83,90 ?
oppure il contrario, ovviamente, dalla combinazione di 5 numeri risalire
alla posizione?

Zipper

unread,
Sep 15, 2022, 10:36:18 AMSep 15
to
Ammammata ha sputacchiato:
non nasce da niente, è come mangiare i wurstel, non ce n'è nessuna
necessità, è una delle tante cose che si possono fare-mangiare
Chiaramente se io da quasi 40 anni faccio programmini di eleborazione
matematica-combinatoria e simili, prima o poi mi trovo nella
necessità/utilità di sapere all'istante la risposta ad una domanda, è
esattamente comue una qualsiasi formula matematica

issdr

unread,
Sep 15, 2022, 10:41:35 AMSep 15
to
Zipper wrote:

> io ho Excel 2007, non farmi fare fatiche inutili, vuoi dire che quello
> che hai scritto ci mette meno di 1 secondo ?

provato con posizione 25000000ᵃ, sì sun un i7. provato su un 2019 (non
ha lo spillover), selezioni 5 celle, tipo B1:F1, in B1 metti l’UDF
riferito ad A1, poi ctrl+shift+return. Cambi pos in A1...

oppure dai il valore direttamente nella formula, ma devi avere
l’accortezza di selezionare l’intervallo e confermare in quel modo ogni
volta


Zipper

unread,
Sep 15, 2022, 10:51:07 AMSep 15
to
Scriveva issdr nel messaggio
<87v8poi...@ID-313311.news.uni-berlin.de>
io ho 2007 e non so cosa sia lo spillover, è un gioiello per vecchie
signore ?
la tua macro impiega meno di 1 secondo '

Ammammata

unread,
Sep 15, 2022, 10:54:27 AMSep 15
to
Il giorno Thu 15 Sep 2022 04:36:00p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfvd90$ek1$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> non nasce da niente, è come mangiare i wurstel, non ce n'è nessuna
> necessità

ah, ok, bene, ho una domanda anche io, già fatta su un altro gruppo, ma
senza aver trovato una soluzione "semplice e lineare" (poi boh, forse la
avevo fatta anche qui); ne avevo trovata una (da solo) ma non mi piaceva
molto

colonna A il nome della persona
colonna B la data di nascita

in due celle (posizionate altrove, p.e. in un'altra tab) metto un range di
date che può anche essere a cavallo del cambio anno
quindi dal 15 marzo al 18 giugno come pure dal 28 novembre al 14 febbraio

selezionare le persone che compiono gli anni in quel range di date

Ammammata

unread,
Sep 15, 2022, 10:56:19 AMSep 15
to
Il giorno Thu 15 Sep 2022 04:54:24p, *Ammammata* ha inviato su
microsoft.public.it.office.excel il messaggio
news:XnsAF13ABFC3E77Bam...@127.0.0.1. Vediamo cosa ha
scritto:

> in due celle (posizionate altrove, p.e. in un'altra tab) metto un
> range di date che può anche essere a cavallo del cambio anno
> quindi dal 15 marzo al 18 giugno come pure dal 28 novembre al 14
> febbraio
>

nota: si considera solo il giorno e il mese, l'anno (eventualmente
aggiunto) non ha importanza
le celle possono anche essere 4, separando giorno e mese, senza l'anno

Zipper

unread,
Sep 15, 2022, 11:01:33 AMSep 15
to
Sembra che Ammammata abbia detto :

> ah, ok, bene, ho una domanda anche io, già fatta su un altro gruppo, ma
> senza aver trovato una soluzione "semplice e lineare" (poi boh, forse la
> avevo fatta anche qui); ne avevo trovata una (da solo) ma non mi piaceva
> molto

> colonna A il nome della persona
> colonna B la data di nascita

> in due celle (posizionate altrove, p.e. in un'altra tab) metto un range di
> date che può anche essere a cavallo del cambio anno
> quindi dal 15 marzo al 18 giugno come pure dal 28 novembre al 14 febbraio

> selezionare le persone che compiono gli anni in quel range di date

perchè la domanda la fai a me ? onestamente non ho una grande
dimestichezza con le formule EXCEL, quando mi serve o studio su google
o chiedo sui forum

Zipper

unread,
Sep 15, 2022, 11:06:04 AMSep 15
to
issdr ha detto questo giovedì :
io ho E 2007, W7 HP e un i3
inoltre piu che altro io ragiono ed escogito algoritmi, il mio ambiente
è il Power Basic, ma meccanicamente non conosco troppe manovre di
Excel, dove devo posizionare esattamente la function ?
dove e che cosa esattamente devo chiedere ? le UDF ....poca
dimestichezza

Ammammata

unread,
Sep 15, 2022, 11:15:19 AMSep 15
to
Il giorno Thu 15 Sep 2022 05:01:16p, *Zipper* ha inviato su
microsoft.public.it.office.excel il messaggio
news:tfveob$17k3$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> perchč la domanda la fai a me ? onestamente non ho una grande
> dimestichezza con le formule EXCEL, quando mi serve o studio su google
> o chiedo sui forum
>

non era "per te": dato che smanacci in powerbasic prova a scrivere un pezzo
di codice che effettui questa ricerca, cercando di farlo il piů semplice
che riesci

poi lo confronto con il mio (che, ripeto, non mi piace neanche un po' ma
funziona, scritto in SQL)

Zipper

unread,
Sep 15, 2022, 11:28:55 AMSep 15
to
Ammammata ha pensato forte :
> Il giorno Thu 15 Sep 2022 05:01:16p, *Zipper* ha inviato su
> microsoft.public.it.office.excel il messaggio
> news:tfveob$17k3$1...@gioia.aioe.org. Vediamo cosa ha scritto:

>> perchè la domanda la fai a me ? onestamente non ho una grande
>> dimestichezza con le formule EXCEL, quando mi serve o studio su google
>> o chiedo sui forum
>>

> non era "per te": dato che smanacci in powerbasic prova a scrivere un pezzo
> di codice che effettui questa ricerca, cercando di farlo il più semplice
> che riesci

> poi lo confronto con il mio (che, ripeto, non mi piace neanche un po' ma
> funziona, scritto in SQL)

è difficile che su 2 piedi io mi metta a scrivere codice da zero, con
tutti i casini che ho in questi giorni
poi c'è da dire che io uso la versione CONSOLE di PowerBasic, cioè
quella che usa input da DOS e restituisce in DOS,ovviamente per i miei
usi posso fargli scrivere o prelevare i files CSV
E dovrei inventarmi io quelli che fanno i compleanni e le loro date ?
per adesso proprio no, scusami
Ora stavo seguendo il mio quesito disperato che va avanti da troppo
tempo

issdr

unread,
Sep 15, 2022, 11:32:26 AMSep 15
to
Zipper wrote:

>> provato con posizione 25000000ᵃ, sì sun un i7. provato su un 2019 (non
>> ha lo spillover), selezioni 5 celle, tipo B1:F1, in B1 metti l’UDF
>> riferito ad A1, poi ctrl+shift+return. Cambi pos in A1...
>
>> oppure dai il valore direttamente nella formula, ma devi avere
>> l’accortezza di selezionare l’intervallo e confermare in quel modo ogni
>> volta
>
> io ho E 2007, W7 HP e un i3

dovrebbe andare

> inoltre piu che altro io ragiono ed escogito algoritmi, il mio
> ambiente è il Power Basic, ma meccanicamente non conosco troppe
> manovre di Excel, dove devo posizionare esattamente la function ?
> dove e che cosa esattamente devo chiedere ? le UDF ....poca
> dimestichezza

la function va al posto della macro, in un modulo o nel codice del
foglio.

selezioni B1:F1 e scrivi in B1:

=lotto(A1)

confermando la formula con control+shift+invio

in A1 scrivi la posizione voluta

Bruno Campanini

unread,
Sep 15, 2022, 11:45:54 AMSep 15
to
Zipper formulated the question :
> Buongiorno N. Jones
> per introdurre il mio quesito ti rimando ad una discussione che tu avesti il
> 16 giugno 2017 con Nelson Cavazzuti e Paoloard, ma che poi non ha avuto
> seguito.
>
> https://answers.microsoft.com/it-it/msoffice/forum/all/formula-per-calcolare-l-indice-di-posizione-per/c12019bc-fd5b-4b55-8025-aa7303a26761
>
> Da lì ho preso lo spunto per il problema inverso.
> Immaginiamo un insieme di 90 numeri (N = 90), esempio quelli del lotto, e
> immaginiamo di elencare le combinazioni delle cinquine (k = 5) in ordine
> LESSICOGRAFICO, quindi avremo
> 1,2,3,4,5
> 1,2,3,4,6
> .........
> 86,87,88,89,90
> OK
>
> Se nello sviluppo inseriamo anche un numero d'ordine avremo che ad ogni
> cinquina corrisponde in modo UNIVOCO un numero che potremmo chiamare anche
> numero di posizione.
> 1 - 1,2,3,4,5
> 2 - 1,2,3,4,6
> 43949268 - 86,87,88,89,90
>
> Ora il mio problema, a tuttora non risolto, è:
> dato un numero in input, e stabilito che il numero (posizionale) si riferisce
> allo sviluppo di 90 numeri presi 5 alla volta,
> è possibile costruire una formula che in 5 caselle restituisca i 5 numeri
> della combinazione che occupa appunto quella posizione ?
> Io ho diverse soluzioni fatte con MACRO, ma io cerco, se possibile, se
> esiste, una soluzione SOLO con FORMULE.
> Ho provato diverse strade, compresa quella del Risolutore, e chiesto a
> diverse persone, niente da fare.
> ESEMPIO:
> Se in A1 impongo il numero 1.000.000 (posizione della milionesima cinquina),
> in A2, A3, A4, A5, A6 dovrebbero comparire i numeri della combinazione
> milionesima, che sono esattamente 1,12,44,83,90.
> Non ho preparato un file perchè l'esempio mi sembra chiaro.
> Ti ringrazio a prescindere per qualsiasi risposta tu sappia darmi.
>
> LEO

Io ho una routine in Excel-VBA che in una frazione di secondo
pesca qualunque cinquina corrispondente alla posizione
lexicografica definita.
Senza necessità di alcuna tabella contenente le 43 949 268 cinquine.

Con le formule non cavi un ragno da un buco se non hai la
tabella contenente tutte le cinquine.
Poi, avendola, farne la scansione fino al ritrovamento dev'esser
proprio una delizia...

Bruno

issdr

unread,
Sep 15, 2022, 11:59:10 AMSep 15
to
Bruno Campanini wrote:

> Io ho una routine in Excel-VBA che in una frazione di secondo
> pesca qualunque cinquina corrispondente alla posizione
> lexicografica definita.

se è diversa da quella di zipper la condivideresti?

grazie

Zipper

unread,
Sep 15, 2022, 12:50:02 PMSep 15
to
Nel messaggio <tfvhbd$jo6$1...@gioia.aioe.org> , Bruno Campanini ha detto:

> Io ho una routine in Excel-VBA che in una frazione di secondo
> pesca qualunque cinquina corrispondente alla posizione
> lexicografica definita.
> Senza necessità di alcuna tabella contenente le 43 949 268 cinquine.

> Con le formule non cavi un ragno da un buco se non hai la
> tabella contenente tutte le cinquine.
> Poi, avendola, farne la scansione fino al ritrovamento dev'esser
> proprio una delizia...

> Bruno

se hai letto i miei post avrai visto che io non uso tabelle, anzi le
rifiuto.
inoltre anche io ho un'altra routine che oltre ad essere generalizzata
impiega meno di una frazione di secondo per pescare qualsiasi
combinazione corrispondente alla posizione lexicografica definita.
E con questo ?
Io, come OP, ho chiesto se sia possibile usare formule invece di macro,
è diventato un mio pallino, un mio piccio, un cruccio.
O c'è o non c'è, il resto lo so
e se io postassi un certo esempio di cio che dico dovreste
riconsiderare molte cose, ma preferisco mantenere il quesito sulla
falsariga della domanda primitiva, non si puo' dare sempre tutto per
scontato.
LEO

Zipper

unread,
Sep 15, 2022, 1:24:29 PMSep 15
to
issdr ha detto questo giovedì :

> dovrebbe andare
infatti va

> la function va al posto della macro, in un modulo o nel codice del
> foglio.
> selezioni B1:F1 e scrivi in B1:
> =lotto(A1)
> confermando la formula con control+shift+invio
> in A1 scrivi la posizione voluta

buona, ma guardando il codice che differenza ha con la mia ?

issdr

unread,
Sep 15, 2022, 1:38:01 PMSep 15
to
Zipper wrote:

> buona, ma guardando il codice che differenza ha con la mia ?

è la tua sub, riadattata come UDF (la modifica principale è l'utilizzo
di un array per raccogliere la tupla e passarla all'output della
function). se non ti è chiaro qualche dettaglio chiedi pure

Zipper

unread,
Sep 15, 2022, 1:44:14 PMSep 15
to
Scriveva issdr giovedì, 15/09/2022:
no no, mi è chiaro
rilevo soltanto che qui è necessario selezionare 5 celle e cliccare 3
tasti mentre nella mia niente di ciò, insomma è la mia abitudine di
fare sempre le cose più semplici.
Aspettiamo la bomba Campanini, sono curioso

casanmaner

unread,
Sep 15, 2022, 2:02:18 PMSep 15
to
Il giorno giovedì 15 settembre 2022 alle 16:23:21 UTC+2 issdr ha scritto:

> --8<---------------cut here---------------start------------->8---
> Function lotto(ByVal pos As Long)
> Dim a, b, c, d, e As Integer

Una curiosità ...
Perché ti sei limitato a dichiarare "Integer" solo l'ultima delle variabili?

Bruno Campanini

unread,
Sep 15, 2022, 2:33:11 PMSep 15
to
It happens that casanmaner formulated :
Lo so io il perché...

Come ti va vecchio volpone?

Bruno

issdr

unread,
Sep 15, 2022, 2:44:18 PMSep 15
to
Zipper wrote:

> rilevo soltanto che qui è necessario selezionare 5 celle e cliccare 3
> tasti mentre nella mia niente di ciò, insomma è la mia abitudine di
> fare sempre le cose più semplici.

lo fai una volta e poi scrivi la posizione voluta nella cella argomento
dell'UDF

issdr

unread,
Sep 15, 2022, 2:51:46 PMSep 15
to
beccato. sarebbe bello poterlo fare però

Bruno Campanini

unread,
Sep 15, 2022, 3:00:34 PMSep 15
to
After serious thinking issdr wrote :
Non ne conosco tanti, anzi ne conosco pochi, ma di quei pochi
VBA è l'unico che non lo consente.

Bruno

Bruno Campanini

unread,
Sep 15, 2022, 3:18:24 PMSep 15
to
After serious thinking issdr wrote :
Io non so se sia diversa da quella di Zipper, non capisco
il codice altrui... faccio già fatica a capire il mio
il giorno dopo.

Se vuoi ti mando quella che fa il contrario: una funzione
che definisce la posizione lexicografica di una combinazione.
Sempre senza l'uso di tabelle chilometriche.

Eventualmente mandami un indirizzo eMail.

Bruno

Zipper

unread,
Sep 15, 2022, 3:32:53 PMSep 15
to
Scriveva Bruno Campanini giovedì, 15/09/2022:
sbaglio o tu hai 87 anni ?

issdr

unread,
Sep 15, 2022, 4:37:47 PMSep 15
to
Bruno Campanini wrote:

> Se vuoi ti mando quella che fa il contrario: una funzione
> che definisce la posizione lexicografica di una combinazione.
> Sempre senza l'uso di tabelle chilometriche.
>
> Eventualmente mandami un indirizzo eMail.

non sembra, ma questo qua è pronto uso. grazie

Bruno Campanini

unread,
Sep 16, 2022, 1:35:25 AMSep 16
to
Bruno Campanini wrote on 15-09-22 :
> After serious thinking issdr wrote :
>> Bruno Campanini wrote:
>>
>>> Io ho una routine in Excel-VBA che in una frazione di secondo
>>> pesca qualunque cinquina corrispondente alla posizione
>>> lexicografica definita.
>>
>> se è diversa da quella di zipper la condivideresti?
>>
>> grazie
> Io non so se sia diversa da quella di Zipper, non capisco
> il codice altrui... faccio già fatica a capire il mio
> il giorno dopo.

Ripensandoci, ho esaminato la versione di Zipper: è semplicissima
e facilissima da riscrivere.
Ma vale solo per le combinazioni 90C5.
Se hai 300C100... ti diverti a riscriverla!
Quella che ho io, e che non ho ancor trovato nel casino di
file non organizzati, vale per ogni nCk, dove k>0 AND n>k.
Però ne ho un'altra, rozzamente generata da un matematico
con le palle formato icosaedro, avente le stesse identiche
funzionalità, ma non è farina del mio sacco....

Quella che fa il contrario è di produzione casalinga.
Sono 2 funzioni per complessive 16 righe di codice
che trovi impostate a n=300, k=20.
I numerosi zeri del risultato conseguono alle limitate
capacità numeriche di Excel.
Per la circostanza (90, 5 ) ed oltre il risultato è corretto.

Ti invio il file.

Bruno

Bruno Campanini

unread,
Sep 16, 2022, 1:42:53 AMSep 16
to
Zipper has brought this to us :
Sbagli di poco.
Ne ho quasi 87 (1936).

Bruno

issdr

unread,
Sep 16, 2022, 2:03:37 AMSep 16
to
Bruno Campanini wrote:

> Ti invio il file.

ricevuto, grazie mille Bruno

Zipper

unread,
Sep 16, 2022, 2:22:07 AMSep 16
to
Scriveva issdr nel messaggio
<87tu577...@ID-313311.news.uni-berlin.de>
> Bruno Campanini wrote:

>> Ti invio il file.

> ricevuto, grazie mille Bruno

ed ora che hai ricevuto questo X-file , mi diresti almeno che cosa fa,
come lo fa ?

LEO

issdr

unread,
Sep 16, 2022, 3:45:22 AMSep 16
to
lo ha già spiegato Bruno in nuce.

la soluzione migliore rimane l'UDF, forse a pari merito con la tua sub
se resa autoinnescante. scegli tu la via, perché ho la sensazione che
non hai ancora realizzato. posso guidarti, ma ti devi sporcare le mani
per il setup

issdr

unread,
Sep 16, 2022, 4:20:05 AMSep 16
to
Bruno Campanini wrote:

> Ripensandoci, ho esaminato la versione di Zipper: è semplicissima
> e facilissima da riscrivere.
> Ma vale solo per le combinazioni 90C5.
> Se hai 300C100... ti diverti a riscriverla!

non penso gli serva. invece sto pensando che parametrizzandola si riesce
a generalizzarla per le altre combinazioni vincenti. next pc time

Zipper

unread,
Sep 16, 2022, 4:54:00 AMSep 16
to
Scriveva issdr venerdì, 16/09/2022:
forse non è sottinteso ma ho anche la versione generalizzata della
macro che data la posizione estrae gli elementi, quanti che siano, da
qualsiasi insieme long.
E' anche ovvio che se devo combinare tutte le stelle del firmamento
andrei incontro a qualcosa di inutile e pesantissimo (overflow)
perciò la mia macro presenta Dim as long per tutte le variabili, tranne
posizione e totale combinazioni che sono Variant.
hai ben detto che oltre certi limiti di un uso "giornaliero" la cosa
non serve.
quanto al file da te ricevuto via mail, mi sembrava che facesse il
lavoro contrario, cioè da combinazione a posizione.
anche qui ho una formula che adatto a mano al bisogno.
certo, avere una function generalizzata per me sarebbe comodo, ma pare
che sia un segreto militare, vuol dire che me la costruirò quando
servirà
la tua UDF funziona, ma per qualche motivo, forse anche la tastiera,
spesso si inceppa, ma credo di averla setta bene
LEO

issdr

unread,
Sep 16, 2022, 6:20:04 AMSep 16
to
Zipper wrote:

> E' anche ovvio che se devo combinare tutte le stelle del firmamento
> andrei incontro a qualcosa di inutile e pesantissimo (overflow)
> perciò la mia macro presenta Dim as long per tutte le variabili,
> tranne posizione e totale combinazioni che sono Variant.

no, la mia idea grezza è di utilizzare il tuo codice cinquina, inibendo
i cicli non necessari, quindi stesse risorse per le 5-tuple, meno a
scendere.

> la tua UDF funziona, ma per qualche motivo, forse anche la tastiera,
> spesso si inceppa, ma credo di averla setta bene

da me risultati in frazioni di secondo, ho anche trascinato il range per
inserire altre pos, incollo una serie di interi grandicelli, va.

unica cosa, prova a dichiarare le variabili da "a" a "d" come integer
(nella tua sub come byte), è l'errore fatto notare da casanmaner, sono
variant (spazio allocato per nulla)

Bruno Campanini

unread,
Sep 16, 2022, 7:21:27 AMSep 16
to
Zipper was thinking very hard :
> Scriveva issdr venerdì, 16/09/2022:
>> Bruno Campanini wrote:
>
>>> Ripensandoci, ho esaminato la versione di Zipper: è semplicissima
>>> e facilissima da riscrivere.
>>> Ma vale solo per le combinazioni 90C5.
>>> Se hai 300C100... ti diverti a riscriverla!
>
>> non penso gli serva. invece sto pensando che parametrizzandola si riesce
>> a generalizzarla per le altre combinazioni vincenti. next pc time
>
> forse non è sottinteso ma ho anche la versione generalizzata della macro che
> data la posizione estrae gli elementi, quanti che siano, da qualsiasi insieme
> long.
> E' anche ovvio che se devo combinare tutte le stelle del firmamento andrei
> incontro a qualcosa di inutile e pesantissimo (overflow)
> perciò la mia macro presenta Dim as long per tutte le variabili, tranne
> posizione e totale combinazioni che sono Variant.
> hai ben detto che oltre certi limiti di un uso "giornaliero" la cosa non
> serve.
> quanto al file da te ricevuto via mail, mi sembrava che facesse il lavoro
> contrario, cioè da combinazione a posizione.
> anche qui ho una formula che adatto a mano al bisogno.
> certo, avere una function generalizzata per me sarebbe comodo, ma pare che
> sia un segreto militare

Nessun segreto militare:

https://1drv.ms/x/s!AvTaMfd5-b2o2xRSjOZr4lg7vEQ9

chiedo solo rispetto per la produzione non mia.
La quale deriva tutta da quelle 11 righe...

Bruno

Zipper

unread,
Sep 16, 2022, 7:49:27 AMSep 16
to
Bruno Campanini ha detto questo venerdì :

> Nessun segreto militare:
grazie, ad una prima scorsa ho trovato l'algo dell'impareggiabile El
Filibustero, che lui stesso mi diede anni fa sul quel NG, poi guarderò
meglio ma è materia che già conosco in varie salse
oltretutto da lui ho avuto conferma del fatto che non ha senso
sviluppare e scrivere l'integrale di ogni cosa, è necessario,
sufficiente ed elegante sviluppare ed esporre solo il range di
interesse, sia di combinazioni, o permutazioni o altro

> chiedo solo rispetto per la produzione non mia.
> La quale deriva tutta da quelle 11 righe...
che vuol dire ?
io ho sempre rispetto per tutto e tutti

LEO

Zipper

unread,
Sep 16, 2022, 7:53:58 AMSep 16
to
Dopo dura riflessione, Zipper ha scritto :
> oltretutto da lui ho avuto conferma del fatto che non ha senso sviluppare e
> scrivere l'integrale di ogni cosa, è necessario, sufficiente ed elegante
> sviluppare ed esporre solo il range di interesse, sia di combinazioni, o
> permutazioni o altro

e quindi per questo motivo la macro elementare che ho scritto non mi
soddisfa piu delminimo perchè per rispondermi deve conteggiare
l'integrale
e cioè per questo cerco da sempre l'ipotetica possibilità di una
formula che applicata ad un numero posizionale restituisca di colpo gli
elementi dell'insieme

LEO

issdr

unread,
Sep 16, 2022, 8:53:38 AMSep 16
to
Zipper wrote:

> e cioè per questo cerco da sempre l'ipotetica possibilità di una
> formula che applicata ad un numero posizionale restituisca di colpo
> gli elementi dell'insieme

inizialmente ragionavo in questi termini, ad intuito mi sembra difficile
da fare. credo c'entrino i grafi, ma li ho visti solo superficialmente
quando ho studiato teoria delle funzioni ricorsive (decenni fa). di
base, in un albero si può avere una certa complessità computazionale
nello "scendere" lungo i nodi, ed averne un'altra a "salire" (che
talvolta rasenta l'incomputabilità, es. della fattorizzazione dei primi)

Zipper

unread,
Sep 16, 2022, 9:37:44 AMSep 16
to
Sembra che issdr abbia detto :
a questo punto morto devo sconvolgerti
EXCEL: lotto 90 numeri, 4005 ambi

in A1 scrivi un qualsiasi numero fra 1 e 4005

in A2 metti
=(89+1)-ARROTONDA.ECCESSO((RADQ(8*(4005-A1+1)+1)-1)/2;1)

in A3 metti
=A1+B1-(2*89*(B1-1)-(B1-1)^2-(B1-1))/2-(B1-1)

ora vedrai che qualsiasi numero tra 1 e 4005 tu metta in A1 avrai in A2
e A3 i 2 elementi dell'ambo

sono giusti ? siiiiiiiiii
sono formule ? sìììììììììì
ho usato il VBA ? noooooooo

e allora, se esiste questo giochetto per l'ambo
perchè non potrebbe esistere per il terno,la quaterna, la cinquina ecc
?
Qui sta la mia cocciutaggine, ma non ho tempo, calma e concentrazione,
e neppure un vero bagaglio matematico

Ragionateci sopra, come dice Zaia
LEO

Zipper

unread,
Sep 16, 2022, 9:54:05 AMSep 16
to
Dopo dura riflessione, Zipper ha scritto :

> in A1 scrivi un qualsiasi numero fra 1 e 4005

> in A2 metti
> =(89+1)-ARROTONDA.ECCESSO((RADQ(8*(4005-A1+1)+1)-1)/2;1)

> in A3 metti
> =A1+B1-(2*89*(B1-1)-(B1-1)^2-(B1-1))/2-(B1-1)

> LEO

PARDON: A1;B1;C1

Zipper

unread,
Sep 16, 2022, 10:17:03 AMSep 16
to
Scriveva Zipper nel messaggio <tg1v5q$s76$1...@gioia.aioe.org>

> PARDON: A1;B1;C1

CHE CASINO, RISCRIVO TUTTO
in A1 scrivi un qualsiasi numero fra 1 e 4005

in B1 metti
=(89+1)-ARROTONDA.ECCESSO((RADQ(8*(4005-A1+1)+1)-1)/2;1)

in C1 metti
=A1+B1-(2*89*(B1-1)-(B1-1)^2-(B1-1))/2-(B1-1)

ora vedrai che qualsiasi numero tra 1 e 4005 tu metta in A1 avrai in B1
e C1 i 2 elementi dell'ambo

issdr

unread,
Sep 16, 2022, 10:17:48 AMSep 16
to
Zipper wrote:

> e allora, se esiste questo giochetto per l'ambo perchè non potrebbe
> esistere per il terno,la quaterna, la cinquina ecc

non escludo possa esistere, ho solo la sensazione che l'aumento di
complessità non sia lineare per le altre vincenti

Zipper

unread,
Sep 16, 2022, 10:20:57 AMSep 16
to
issdr scriveva il 16/09/2022 :
> complessità non sia lineare per le altre vincentI

lo penso anche io, ma potrebbe trattarsi anche solo di allungare le
formule con non molte sigle, problema di pazienza ma soprattutto di
preparazione e inventiva (e BEGGround)

issdr

unread,
Sep 16, 2022, 3:50:05 PMSep 16
to
ok, trovato teoria, pseudo e codice in rete: sono ancora più scettico
sull'implementazione tramite formule standard.

ho trovato un'UDF, ma fa riferimento alla tabella colessicografica;
forse ci tornerò su.

simpatico questo widget, che però è zero based:

https://planetcalc.com/8594/#fn:1

anche l'ideatore dell'algoritmo ha questo approccio, ma è sufficiente
sommare 1 alla tupla (n - 1)ª per ottenere l'nª (in soldoni, avendo
un'UDF chiamata unRank, si scriverà:

=unRank(n;k;pos)+1

). il paper citato nel widget, l'autore è colui che ha coniato il
termine "combinadic":

https://www.redperegrine.net/2021/04/10/software-algorithms-for-k-combinations/Generating-the-mth-Lexicographical-Element-of-a-Mathematical-Combination-Dr-James-McCaffrey.pdf

non in VBA, ma la spiega di questa persona è molto chiara, tra l'altro
ribasata su 1:

https://www.redperegrine.net/2021/04/10/software-algorithms-for-k-combinations/

un'UDF:

https://www.mrexcel.com/board/threads/lexicographic-index-numbers-combination-sequence-numbers.726642/post-3575701

0 based, colessicografica; abbastanza efficiente con i numeri che ho
provato

Zipper

unread,
Sep 16, 2022, 4:24:56 PMSep 16
to
issdr ha pensato forte :