Tabella numeri primi Excel

    Schermata Microsoft Excel Tabella Numeri Primi Recap

    In questo articolo scoprirai come creare da zero un file Excel in grado di creare la tabella dei numeri primi in maniera dinamica.

    Ricordiamo che “In matematica, un numero primo (in breve anche primo) è un numero intero positivo che abbia esattamente due divisori distinti”. Quindi ad esempio 3, 5 e 7 sono numeri primi – mentre 10 (2×5) oppure 15 (3×5) non lo sono.

    Il file è compatibile esclusivamente con Excel 365 viste le funzioni utilizzate ma se scarichi il file e hai una versione precedente potrai comunque scaricare e stampare due fogli ottimizzati per la stampa:

    • Foglio 1_100 con l’intero elenco di numeri da 1 a 100 (ed evidenziati i numeri primi)
    • Foglio SOLO_PRIMI_1_1000 che presenta unicamente i numeri primi da 1 a 1000

    Prima di tutto, se vuoi utilizzare questo file ricordati di abilitare le macro. Se ti appare una schermata con “Le macro sono state disabilitate” devi cliccare su “Abilita contenuto” per farla funzionare.

    Basta andare sul foglio NUMERI_PRIMI per poi:

    • Cliccare su PARTENZA MACRO (il pulsante rosso in alto a destra)
    • Inserire il numero più piccolo dell’intervallo che ci interessa (numero iniziale)
    • Inserire il numero più grande dell’intervallo che ci interessa (numero finale)
    • Et voilà: il file ci restituirà nella colonna D la fila di numeri primi dell’intervallo desiderato, mentre nelle celle F7, G7 e I7 ci sarà un breve recap (numero iniziale, numero finale, numero totale di numeri primi trovati nell’intervallo)

    Se vuoi sapere di più su come è stato creato il file, continua a leggere.

    NB: questo articolo e il relativo file sono stati ispirati da questo video di Bill Jelen che racconta come creare un file con numeri primi su Excel. Bill è un MVP di Excel molto conosciuto (tanto da meritarsi il soprannome Mr Excel) e il suo canale Youtube merita sicuramente una visita se stai cercando utilizzi specifici di Microsoft Excel. In particolare, Bill spiega con calma e precisione permettendo di seguirlo facilmente anche nei passaggi più complessi.

    Come creare il file per la tabella dei numeri primi

    Vediamo come funziona la creazione del file separandolo in diverse sezioni specifiche:

    Come creare una sequenza di numeri su Microsoft Excel

    Schermata Microsoft Excel Tabella Numeri Primi sequenza numeri variabile

    Il punto di partenza è creare una sequenza di numeri con la funzione SEQUENZA. Questa funzione è un po’ particolare dato che come sintassi presenta:

    =SEQUENZA(righe;[colonne];[inizio];[passaggio])

    Proviamo a metterla in termini più comprensibili:

    • La prima parte chiamata righe ci indica quanti numeri ci interessano avere nell’intera sequenza (se 3 saranno 3, se 4 saranno 4 e così via)
    • La seconda parte chiamata colonne indica quanto deve essere lunga la sequenza in colonna. Se inseriamo 1, la sequenza sarà su una sola colonna, se inseriamo 2 invece comprenderà due celle (ad esempio A6 e B6)
    • La terza parte chiamata inizio è il primo valore della sequenza (se inseriamo 4, inizierà da 4)
    • La quarta e ultima parte, passaggio, descrive di quanto bisogna incrementare la sequenza (ad esempio se inseriamo 12 e come inizio mettiamo 4, la sequenza inizierà da 4 per poi andare a 16 e poi 28 e così via)

    La progressione avviene sempre da sinistra verso destra e poi verso il basso (se avessimo più colonne). In questo caso non ci interessa dato che abbiamo una sola colonna, ma dobbiamo fare in modo di creare una sequenza dinamica che tenga conto dei valori in F7 e G7:

    =SEQUENZA(G7-F7+1;;F7)

    Righe sarà la differenza fra il numero più piccolo e il più grande (+1), colonne sarà vuota (dato che non ci interessa), inizio sarà invece il valore in F7. Se inseriamo 12 e 25, la sequenza sarebbe (25-12+1;;12) che diventerebbe =SEQUENZA(14;;12). Avremmo quindi una sequenza da 12 a 25 come desiderato (12 conta come 1, 13 come 2 e così via).

    Come trovare i numeri primi su Microsoft Excel

    Schermata Microsoft Excel Tabella Numeri Primi funzione per determinare il resto minimo

    Per il momento abbiamo trovato solamente la sequenza di numeri, che abbiamo reso dinamica collegandola con F7 e G7. Ma come facciamo per trovare i numeri primi?

    =SE.ERRORE(MIN(RESTO(A2/SEQUENZA(1;INT(RADQ(A2))-1;2);1));1)

    Questa formula è veramente complicata ma aiuta a comprendere meglio la funzione SEQUENZA. In sostanza per evidenziare se un numero è primo, potremmo trovare il resto dividendolo con tutti i numeri interi precedenti (ad esempio 16 andrebbe diviso per 2,3,4,5,6,7… fino a 15). Se almeno una volta il resto è 0, allora il numero non è primo (16 non è primo perchè 16/2 = 8 con 0 di resto, 16/4 = 4 con 0 di resto etc). Per evitare però di rifare gli stessi calcoli (ad esempio 16/2 oppure 16/8), possiamo impostare così la sequenza per la divisione sfruttando la radice quadrata e la funzione RADQ.

    Per numeri grandi (ad esempio 80) ciò significa che, se non c’è un valore per il quale il numero può essere diviso fino a 8 senza resti (la radice quadrata di 80 è inferiore a 9, quindi arriviamo massimo a 8 prima di ripeterci), sicuramente non lo troveremo oltre (avendo già fatto i calcoli precedenti fino a 8, sappiamo che non possiamo ad esempio avere 15 come unico numero possibile perchè avremmo già trovato l’altro valore minore nei calcoli precedenti).

    L’immagine riassume quello che succede con i resti (evidenziati in verde). Possiamo ridurre il numero di calcoli totali necessari, come vediamo dall’immagine [quando dividiamo per 10, l’altro divisore diventa 8, quindi non c’è bisogno di dividere ad esempio per 11 dato che era già contenuto fra 7 e 8]:

    Schermata Tabella numeri primi Excel radice quadrata per ridurre i calcoli

    Facciamo l’esempio con il numero 16:

    =SEQUENZA(1;INT(RADQ(A2))-1;2) -> =SEQUENZA(1;3;2) -> = {2\3\4}

    Se il numero fosse 16, il valore sarebbe =SEQUENZA(1;INT(RADQ(16))-1;2) per poi arrivare a =SEQUENZA(1;INT(4))-1;2) e quindi =SEQUENZA(1;3;2).

    In questo caso i numeri da dividere sarebbero 2 (che è il valore di partenza), 3 (perchè ci spostiamo di uno) e 4 (perchè il valore in colonna è 3, quindi dobbiamo contare tre numeri).

    Abbiamo quindi un numero che viene diviso per un intervallo di valori. In questo caso vediamo come trovare la soluzione al nostro problema:

    =MIN(RESTO(A2/SEQUENZA(1;INT(RADQ(A2))-1;2);1)

    La funzione RESTO divide il nostro numero (16) per la sequenza che abbiamo trovato (2,3,4). Successivamente, tutti questi valori vengono divisi per 1 (che è il divisore della funzione RESTO). Poi, troviamo il valore minimo (MIN) fra tutti questi.

    Vediamo sempre l’esempio con 16:

    =MIN(RESTO(16/{2\3\4};1)

    Il minimo in questo caso (dato che 16 può essere diviso sia per 4 sia per 2) è sicuramente 0. Possiamo quindi dire che 16 non è un numero primo.

    =MIN(RESTO({8\5,33\4};1) -> =MIN({0\0,33\0}) => 0

    Terminata questa parte, dobbiamo inserire il SE.ERRORE per indicare che 2 e 3 sono numeri primi. Il problema è che utilizzando la funzione con RADQ la sequenza diventa negativa quindi ci genera un errore (con 2 diventerebbe =SEQUENZA(1;INT(RADQ(2))-1;2) -> =SEQUENZA(1;INT(0,4142);2) -> =SEQUENZA(1;0;2).

    La formula definitiva è quella segnalata in precedenza, che dobbiamo ricordarci di trascinare in fondo seguendo le celle valide della colonna A.

    Creare un nome definito con Microsoft Excel

    In questo caso vogliamo facilitarci nella restituzione dei valori nella colonna D, quindi creiamo due nomi definiti che comprenderanno rispettivamente la colonna A (NUMERI) e la colonna B (RESTI). La particolarità è che creeremo dei nomi dinamici che comprendano unicamente le celle che ci interessano, ovvero quelle con dei valori all’interno.

    Clicchiamo su Formule -> Gestione Nomi -> Nuovo:

    Schermata Microsoft Excel creazione nomi definiti

    Vediamo come trovare la formula per NUMERI. Come dicevamo vogliamo che la formula sia dinamica e che prenda in considerazione solo celle che abbiano un valore:

    Schermata Microsoft Excel Tabella Numeri Primi nome definito NUMERI

    La formula riassunta è:

    =SCARTO(NUMERI_PRIMI!$A$2;0; 0;CONTA.VALORI(NUMERI_PRIMI!$A:$A)-1; 1)

    Iniziamo dalla funzione SCARTO, che parte da A2 dato che è il punto di partenza che ci interessa. Stiamo dicendo a Excel di non muoversi nè di righe nè di colonne (sono entrambi pari a 0), però stiamo anche contando i singoli valori con CONTA.VALORI dell’intera colonna togliendone solo 1 (che è A1) e di non muoversi in larghezza. La funzione riassume tutti i valori da A2 in poi, che sono dipendenti da quello che inseriamo in F7 e G7.

    Schermata Microsoft Excel Tabella Numeri Primi nome definito RESTI

    Vediamo il nome RESTI:

    =SCARTO(NUMERI_PRIMI!$B$2;0; 0;CONTA.VALORI(NUMERI_PRIMI!$B:$B)-1; 1)

    Il calcolo è lo stesso, solo che in questo caso stiamo iniziando da B2 dato che ci interessa la colonna B.

    Come restituire unicamente i valori dei numeri primi con Excel

    Schermata Microsoft Excel Tabella Numeri Primi con funzione FILTRO

    In questo caso dobbiamo utilizzare la funzione FILTRO per recuperare, fra i numeri della colonna A, quelli che abbiano un resto maggiore di zero ed ignorare i numeri uguali a 1 (dato che ci viene restituito, erroneamente, come numero primo):

    =FILTRO(A2#;(RESTI>0)*(NUMERI<>1))

    Stiamo utilizzando i nomi RESTI e NUMERI che abbiamo trovato in precedenza, in modo da poterli utilizzare all’interno dei calcoli senza problemi essendo dinamici (comprendono solo le celle con dei valori). Notiamo come ci sia un # che indica un intervallo di grandezza variabile, questo è uno dei grandi vantaggi di Excel 365 rispetto alle versioni precedenti di Excel perchè non dobbiamo definire ogni volta la grandezza dell’intervallo (array dinamico).

    Come contare i numeri primi in un intervallo con Excel

    Schermata Microsoft Excel Tabella Numeri Primi contare i numeri primi

    In questo caso vogliamo fare una piccola modifica per aggiungere anche il totale dei numeri primi validi nella colonna D partendo da D2:

    =CONTA.VALORI(D2#)

    Il cancelletto # lavora in maniera dinamica e ci restituirà il numero totale di valori che troveremo da D2 in poi.

    Come creare la tabella dei numeri primi con VBA su Excel

    Per il momento il file funziona e se inseriamo dei nuovi valori in F7 e G7 possiamo trovare in autonomia tutti i numeri primi che desideriamo. Nel file è stata però inserita una macro per velocizzare questo passaggio creando un’interfaccia più comoda per l’inserimento, vediamo come.

    Ho riassunto il codice che trovi nella macro per permetterti di capire meglio come funziona. Mi pare che questo approfondimento ti possa essere utile per modificarlo come preferisci, dato che non sempre il codice in VBA è facile da comprendere. Se vuoi visionarlo sul file, puoi cliccare su Sviluppo -> Macro -> Modifica.

    Tutte le righe che iniziano con ‘ sono commenti che puoi tranquillamente ignorare se sai programmare con Visual Basic for Applications (o VBA).

    Option Explicit
    
    Sub Numeri_Primi()
    
    Application.ScreenUpdating = False
    
    'Evitiamo che ci siano calcoli sullo schermo
    
    Dim iniziale As Variant
    Dim finale As Variant
    
    'Definiamo iniziale e finale quali punto iniziale e finale del nostro intervallo
    
    Dim my_range As Range
    Dim my_sheet As Worksheet
    Dim last_row As Long
    
    'Definiamo l'intervallo, il foglio di riferimento e l'ultimo valore che ci interessa per le formule
    
    Set my_sheet = ThisWorkbook.Worksheets("NUMERI_PRIMI")
    
    'Definiamo che il foglio che ci interessa è quello chiamato NUMERI_PRIMI
    
        Range("B3").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
        
        'Cancella il contenuto da B3 in poi
        
        Range("F7").Select
        Selection.ClearContents
        
        'Cancella il contenuto di F7
        
        Range("G7").Select
        Selection.ClearContents
        
        'Cancella il contenuto di G7
        
        iniziale = InputBox("Inserisci il numero iniziale")
    
        'Crea la maschera per inserire il primo valore
        
        Range("F7").Select
    
        Range("F7").Value = iniziale
        
        'Seleziona la cella F7 e la rende uguale al valore inserito
        
        finale = InputBox("Inserisci il numero finale")
    
        Range("G7").Select
        Range("G7").Value = finale
        
        'Seleziona la cella G7 e la rende uguale al valore inserito
           
        last_row = my_sheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    'Definisce l'ultimo valore che ci interessa per i calcoli, ovvero l'ultima cella con un valore valido nella colonna A
    
    Set my_range = my_sheet.Range("B2:B" & last_row)
    
    'Definisce l'intervallo come l'intervallo fra B2 e B[ultimo_valore]. Ad esempio B2:B100
    
        my_sheet.Range("B2").Select
        Selection.Copy
    
        my_range.PasteSpecial Paste:=xlPasteFormulas, operation:=xlPasteSpecialOperationNone
    
    'Seleziona la formula in B2 e la copia in fondo fino all'ultima cella che ci interessa
    
    Application.CutCopyMode = False
    
    'Cancella i valori che abbiamo nel copia
        
    Application.Goto Reference:=my_sheet.Range("I7")
    
    'Terminata la macro, torna al nostro foglio nella cella I7
    
    End Sub
    

    Come assegnare la macro a una forma su Microsoft Excel

    Per velocizzare la parte di utilizzo della macro, abbiamo creato una forma (Inserisci -> Forma) e abbiamo scritto “PARTENZA MACRO” modificandone lo stile. Se vogliamo far partire la macro cliccando questa forma, dobbiamo quindi cliccare con il tasto destro sulla forma stessa:

    Schermata Microsoft Excel Tabella Numeri Primi forma per partenza macro

    Nel menu contestuale che si aprirà, notiamo che c’è una sezione chiamata “Assegna macro…” che è proprio quella che ci interessa:

    Schermata Microsoft Excel Tabella Numeri Primi assegnare macro a forma

    A questo punto selezioniamo la macro Numeri_Primi, che abbiamo creato in precedenza:

    Schermata Microsoft Excel Tabella Numeri Primi assegnare macro a forma

    Ora, tutte le volte che cliccheremo sulla forma “PARTENZA MACRO”, la macro ripartirà permettendoci nuovi calcoli.

    Come utilizzare il file per creare la tabella dei numeri primi

    Abbiamo visto come è stato creato il file e come possiamo replicarlo da zero, utilizzando varie formule complesse e un po’ di VBA. Sicuramente lo stesso file si può creare anche in versioni di Excel precedenti alla 365, ma molte delle funzionalità dell’ultima versione sul mercato aiutano parecchio nella semplicità di creazione. Se vuoi scaricarlo, clicca sul pulsante!

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *