Copilot in Excel 365

Dicevo che Copilot in Microsoft 365 è un disastro in Excel mentre è abbastanza utile in Word e in PowerPoint, ma mi sto ricredendo.

Premessa: Copilot si attiva solo se il file è salvato in OneDrive con il salvataggio automatico attivo.

Una funzionalità nuova a cui mi sto abituando e che mi piace: “Copilot, spiega questa formula“. Esempio: ho chiesto di spiegare la formula in R59

Anche su Python in Excel ero molto scettico e mi dicevo: se sai fare i grafici in Excel te li fai in Excel, non hai bisogno di Python; e se sai fare i grafici con Python, non hai bisogno di usare Excel.

Ma succede che gli LLM sono deboli con i numeri e forti con il testo, e Python è testo. Per cui Copilot risolve con Python quei problemi che con Excel non sa risolvere.

Per esempio, in questa tabella (formattata come tabella) selezionando una cella qualsiasi compare l’icona di Copilot che propone “Ottieni risultati di analisi più approfonditi con Python

Selezionando quel comando, mi dice che creerà un nuovo foglio con formule Python

Questo è il risultato, suscettibile di ulteriore approfondimento:

D’accordo, il tuo falegname con 30.000 Lire (cit.), ma a me sembra un buon inizio.

Excel: Quando finisce il mio evento?

Ho dovuto affrontare un interessante problema in Excel, legato alla durata di un evento, e lo metto qui che magari può servire a qualcuno

1 – Il problema

Una serie di lavorazioni vengono eseguite una dopo l’altra da una macchina, e la responsabile vuole creare in Excel una tabella di programmazione, dove ogni riga è una lavorazione.

2 – La situazione

La tabella contiene

  • La colonna INIZIO con la data ora di inizio
  • La colonna DURATA con la durata nel formato hh:mm
  • La colonna FINE con la data ora di fine

Il primo INIZIO è inserito a mano, così come tutte le durate. Occorre calcolare la FINE di ogni lavorazione, e l’INIZIO della lavorazione successiva.

3 – L’intoppo

La macchina lavora 24 ore al giorno, con una interruzione da Sabato alle 12:00 fino a Lunedì alle 06:00.
La lavorazione che a mezzogiorno del Sabato è ancora in macchina viene interrotta e il tempo restante viene completato a partire dalle ore 6 del Lunedì successivo
La lavorazione successiva inizia dopo aver completato la lavorazione interrotta.

4 – La soluzione

Calcolo della FINE:

=SE(E(GIORNO.SETTIMANA(B2; 2) = 6; B2 + C2 > (ARROTONDA.PER.DIF(B2; 0) + 0,5)); ARROTONDA.PER.DIF(B2; 0) + 0,5; B2 + C2)

Il primo INIZIO è inserito a mano; i successivi sono calcolati con la seguente formula:

=SE(B2+C2-D2;B2+C2+1,75;D2)

Guidare una Panda Cross

Tra Ottobre e Novembre 2024 ho guidato per 788km, consumando 225 litri di benzina, con una velocità media di 41,2 km/h con un consumo medio di 11,8 km per litro.

Per tre quarti del tempo ho viaggiato a velocità inferiori a 50 km/h:

Il consumo effettivo alle basse velocità è assai maggiore rispetto ai dati strombazzati della casa madre:

La sesta marcia è una opzione di cui si potrebbe tranquillamente fare a meno. L’ho usata in qualche lunga discesa in autostrada, giusto perché sapevo che stavo registrando:

Tutto ciò è stato registrato con un ODB2 collegato ad Android:

L’app Torque permette di registrare e scaricare i dati in formato .csv, per poterli poi elaborare con Excel o Power BI.

Questi sono i campi che io raccolgo:

Device Time
  G(x)
  G(y)
 G(z)
  G(calibrated)
  Fuel Remaining (Calculated from vehicle profile)(%)
Kilometers Per Litre(Instant)(kpl)
Kilometers Per Litre(Long Term Average)(kpl)
Litres Per 100 Kilometer(Long Term Average)(l/100km)
Fuel flow rate/minute(cc/min)
Engine RPM(rpm)
Throttle Position(Manifold)(%)
Barometric pressure (from vehicle)(psi)
Intake Manifold Pressure(psi)
Air Fuel Ratio(Measured)(:1)
Torque(Nm)
Engine kW (At the wheels)(kW)
Intake Air Temperature(°C)
Engine Coolant Temperature(°C)
Speed (OBD)(km/h)

Il baco e l’elefante

Come saprai, in la data è un numero seriale positivo dove 1 è il primo di gennaio del 1900. Oggi, 15 marzo 2023, corrisponde al numero 45000.

In Excel c’è un baco: l’anno 1900 è trattato come bisestile, per cui il 29/02/1900, che non è esistito, viene riconosciuto come data e corrisponde al numero 60.

Come si vede in questa tabella, le date anteriori al 01/01/1900 non vengono riconosciute come data e vengono gestite come testo: invece il 29/02/1900 viene riconosciuto (la formula nella colonna B è =A2 con formato numero senza decimali):

I fogli di Google invece, gestiscono correttamente il 1900 come anno non bisestile, e sono anche capaci di utilizzale le date anteriori al primo gennaio del 1900.

Ma non possono permettersi di dichiarare che oggi è il numero 45001, diventando così incompatibili con Excel.

Quindi cosa si sono inventati: per Google il numero 1 corrisponde al 31/12/1899 invece che al 01/01/1900, la numerazione rimane sfalsata fino al 28/02/1900, e comincia a corrispondere dal primo di marzo 1900 in poi:

Conversazione con ChatGPT

In Excel, I have a column of IP addresses that sometimes are recognized as text and sometimes as number. In another column I have written a formula that will convert the IP address as text in 4 groups of 3 digits, separated by a fullstop. The formula is quite complex and I wonder if a simpler version is possible. Here it is:

=IF(ISNUMBER(A2);RIGHT(“00″&LEFT(A2;LEN(A2)-9);3)&”.”&MID(A2;LEN(A2)-8;3)&”.”&MID(A2;LEN(A2)-5;3)&”.”&RIGHT(A2;3);RIGHT(“00″&LEFT(A2;FIND(“.”;A2)-1);3)&”.”&RIGHT(“00″&MID(A2;FIND(“.”;A2)+1;FIND(“.”;A2;(FIND(“.”;A2))+1)-FIND(“.”;A2)-1);3)&”.”&RIGHT(“00″&MID($A2;FIND(“.”;A2;(FIND(“.”;A2))+1)+1;FIND(“.”;A2;FIND(“.”;A2;(FIND(“.”;A2))+1)+1)-FIND(“.”;A2;(FIND(“.”;A2))+1)-1);3)&”.”&RIGHT(“00″&MID(A2;FIND(“.”;A2;FIND(“.”;A2;(FIND(“.”;A2))+1)+1)+1;LEN(A2)-FIND(“.”;A2;FIND(“.”;A2;(FIND(“.”;A2))+1)+1));3))

Yes, a simpler version of the formula is possible. Here’s an alternative:

 =TEXT(A2,”000.000.000.000″)

 This formula converts the value in cell A2 to text using the format “000.000.000.000”, which separates the IP address into 4 groups of 3 digits separated by fullstops.

Thanks, but your formula only works when the IP address is recognized as a number, like in 147.161.232.179. It does not work when the number is recognized as text, like 147.161.232.1

You’re correct, my previous formula will only work if the IP address is recognized as a number. Here’s a modified version of the formula that works for both text and number formatted IP addresses:

 =IF(ISNUMBER(A2),TEXT(A2,”000.000.000.000″),SUBSTITUTE(A2,”.”,”.00″,3)&”.00″)

 This formula checks if the value in cell A2 is recognized as a number, and if so, converts it to text using the format “000.000.000.000”. If it’s recognized as text, the formula uses the SUBSTITUTE function to replace the third instance of “.” with “.00”. This ensures that all IP addresses are formatted as 4 groups of 3 digits separated by fullstops, regardless of their original format.

Good, but IP addresses are recognized as text when any of the second, third or fourh group contains one or two digits. Your formula only works if the fourth group contains precisely one digit

You’re correct, my previous formula does not handle IP addresses where any of the second, third, or fourth groups contain one or two digits. Here’s a modified version of the formula that works for all IP addresses:

 =TEXTJOIN(“.”,TRUE,IF(LEN(A2)<=12,LEFT(A2,3),LEFT(A2,FIND(“.”,A2)-1)),MID(A2,FIND(“.”,A2)+1,3),MID(A2,FIND(“.”,A2,FIND(“.”,A2)+1)+1,3),IF(LEN(A2)<=12,RIGHT(A2,3),RIGHT(A2,LEN(A2)-FIND(“.”,A2,FIND(“.”,A2,FIND(“.”,A2)+1)+1))))

This formula uses the LEN function to determine the length of the IP address, and the FIND function to locate the position of the “.” characters. It uses the LEFT and RIGHT functions to extract the first and last groups of the IP address, and the MID function to extract the second and third groups. Finally, it uses the TEXTJOIN function to concatenate the groups with “.” as the separator. This formula can handle IP addresses with one or two digits in any of the second, third, or fourth groups.

Good, so now we can put together this formula with the one in case the IP address is recognized as a number

Yes, here’s a combined formula that handles both text and number formatted IP addresses:

 =IF(ISNUMBER(A2),TEXT(A2,”000.000.000.000″),TEXTJOIN(“.”,TRUE,IF(LEN(A2)<=12,LEFT(A2,3),LEFT(A2,FIND(“.”,A2)-1)),MID(A2,FIND(“.”,A2)+1,3),MID(A2,FIND(“.”,A2,FIND(“.”,A2)+1)+1,3),IF(LEN(A2)<=12,RIGHT(A2,3),RIGHT(A2,LEN(A2)-FIND(“.”,A2,FIND(“.”,A2,FIND(“.”,A2)+1)+1)))))

This formula first checks if the value in cell A2 is recognized as a number, and if so, converts it to text using the format “000.000.000.000”. If it’s recognized as text, it uses the TEXTJOIN function to format the IP address as described in my previous answer. This formula can handle both text and number formatted IP addresses, regardless of the number of digits in each group.

Can you translate the formula for the Italian version of Excel? Keep in mind that you need to separate the arguments with a semicolon

Yes, here’s the equivalent formula for the Italian version of Excel, where the arguments are separated with a semicolon:

=SE(ÈNUMERO(A2);TESTO(A2;”000.000.000.000″);UNISCI.TESTO(“.”,VERO,SE(LUNGHEZZA(A2)<=12;SINISTRA(A2;3);SINISTRA(A2;TROVA(“.”;A2)-1));MEDIO(A2;TROVA(“.”;A2)+1;3);MEDIO(A2;TROVA(“.”;A2;TROVA(“.”;A2)+1)+1;3);SE(LUNGHEZZA(A2)<=12;DESTRA(A2;3);DESTRA(A2;LUNGHEZZA(A2)-TROVA(“.”;A2;TROVA(“.”;A2;TROVA(“.”;A2)+1)+1)))))

This formula uses the same logic as the original formula, but with the equivalent functions for the Italian version of Excel. The functions used include:

SE (IF)

ÈNUMERO (ISNUMBER)

TESTO (TEXT)

UNISCI.TESTO (TEXTJOIN)

LUNGHEZZA (LEN)

TROVA (FIND)

SINISTRA (LEFT)

DESTRA (RIGHT)

MEDIO (MID)