Esercizio 17 frazioni



  • Esercizio 17: frazioni
    di Vecchio Frac data: 18/09/2015 09:46:53

    Questo esercizio è molto semplice e alla portata di tutti.
    Lo propongo io su "delega" di totygno che si riserva di proporre un'esercizio una prossima volta ^_^

    Si tratta di simulare la formattazione "frazione" che Excel propone tra le formattazioni di "Numero", per cui se una cella contiene la formula "=20/3", la formattazione "frazione a due cifre" presenta questo risultato: "6 2/3").

    Ecco provate a realizzare un meccanismo per cui una divisione venga proposta sotto forma di frazione nel modo suddetto (per semplicità possiamo limitare a due cifre il risultato).

    No limiti su: formule nel foglio, codice vba, magia nera e aiuto del pubblico ^_^
    Basta solo che funzioni nello stesso modo;per la verifica io inserirò una divisione in A1 e in A2 mi aspetto il risultato.
    Non allegate codice o file prima del via; basta solo un post dove annunciate di essere "pronti" :)
    Grazie a tutti e buon lavoro :)





  • di cromagno data: 18/09/2015 12:23:03

    Ok, file allegato
    Scherzo, mi son prima dovuto guardare nella guida come si comporta il formato "frazione" (mai usato prima d'ora ^_^ ).

    [EDIT]
    Mi servirebbe un chiarimento
    In excel, la formattazione "frazione" comprende diverse opzioni:
    a una sola cifra
    a due cifre
    a tre cifre
    etc.....

    Noi quale dobbiamo fare??? (Non dirmi che vuoi una formula che funzioni con ogni opzione scelta ).



  • di ninai data: 18/09/2015 13:01:24

    pronto



  • di Vecchio Frac data: 18/09/2015 13:11:39

    @cromagno
    Ho specificato nel primo post che per semplicità possiamo limitarci alle due cifre ^_^ ma va bene qualsiasi soluzione proposta!





  • di cromagno data: 18/09/2015 13:19:02

    Vero... avevo saltato quella parte e mi stavo già preoccupando



  • di ninai data: 18/09/2015 17:58:58

    ovviamente (spero), si otterrà la stessa rappresentazione ma sarà un testo e non un numero.



  • di Vecchio Frac data: 18/09/2015 18:34:17

    LOL, troverei difficile far digerire a Excel qualcosa come "3 1/4" che possa riconoscere come numero (esclusa chiaramente la formattazione come frazione del risultato). Quindi sì, ovviamente, il risultato sarà di tipo testo.





  • di cromagno data: 18/09/2015 20:16:47

    Pronto...
    anche se non sarà sicuramente la formula più corta...



  • di ninai data: 18/09/2015 20:41:15

    la mia è lunga: 117 (caratteri)



  • di Raffaele_53 data: 18/09/2015 22:02:22

    Non è detto che sia =20/3
    Potrebbe essere qualsiasi numero =999/3 opure 99999/4 oppure 99999/44 (occhio hai spazi)
    Comunque eseguita tramite testo (quasi)



  • di scossa data: 18/09/2015 22:11:26

    cit. ninai: "la mia è lunga: 117 (caratteri)"

    'aspita!

    la mia è lunga 2357 caratteri



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di Raffaele_53 data: 18/09/2015 22:27:18

    Vorrei dire "una parolaccia sul più corto o lungo"
    Stai zitto raffaele....Ninai hai perso (solo per la battuta, adesso vediamo se scossa ci fa fa vedere anche i suoi 2357)
    Cavoli non sapevo che c'erano i decimali???



  • di alfrimpa data: 18/09/2015 22:46:36

    E meno male che son caratteri; se si trattava di cm erano dolori .

    Perdonatemi, ma non sono riuscito a trattenermi

    Alfredo





  • di Raffaele_53 data: 18/09/2015 23:09:27

    Pure io.
    Perdonatemi, ma sono riuscito a dire solo cazzate



  • di cromagno data: 19/09/2015 01:13:47

    La mia era lunga 536... dico era perchè dovrò rivederla in quanto alcune volte non funziona, ma so che parametro cambiare perchè funzioni....
    Mi direte: " e allora adatta quel parametro!"
    Il problema è che non ho capito perchè alcune volte funzioni con un parametro e altre volte con un altro

    Se non dovessi riuscire a risolvere, posterò comunque la formula per farmi aiutare da voi

    P.S.
    @VF
    Io e te abbiamo una concezione un pò diversa riguardo a "molto semplice e alla portata di tutti"
    Oppure è colpa mia che mi sto intestardendo con una logica fallacea...



  • di Vecchio Frac data: 19/09/2015 08:56:59

    Che belle queste stimolazioni da fine settimana ^-ì

    @cromagno
    Mi sembrava molto semplice... quando l'ho scritta io ci ho messo meno di un minuto :)
    A proposito, nessuno mi fa una funzioncina in VBA? senza contare scossa naturalmente? :)





  • di Marius44 data: 19/09/2015 09:03:30

    Beh, se proprio vuoi qualcosa in VBA io l'avrei (vedremo poi se scossa mi tira le orecchie).
    Aspetto il via.

    Ciao,
    Mario



  • di Vecchio Frac data: 19/09/2015 11:35:55

    Per il via, vedo che siamo sempre i soliti.. magari aspettiamo ancora un paio di giorni ^_^





  • di Textomb data: 19/09/2015 22:49:18

    Io ho fatto la mia formuletta. Ma funziona solo di giorno. Di sera non funziona più.



  • di cromagno data: 20/09/2015 00:28:54


    Applicando la stessa logica, ho scritto una Function che sembra funzionare correttamente (non me l'aspettavo)

    Mi toccherà correggere la formula in base a quello che ho scritto in VBA

    [EDIT]
    Anche la Function a volte da risultati differenti, ma per me è il "formato frazione" di excel che sbaglia...
    Le frazioni trovate con la function sono "migliori" (più vicine al valore decimale) di quelle trovate da excel.
    A voi corrispondono esattamente tutte le volte?
    Se fosse così allora ci rinuncio o rischio di buttare il pc dalla finestra



  • di isy data: 20/09/2015 09:12:37

    Ciao cromagno

    Cit: A voi corrispondono esattamente tutte le volte?
    Devono, sono banali formule
    Bell'esercizio



  • di ninai data: 20/09/2015 11:04:46

    altra precisazione:

    stiamo parlando di frazioni fra numeri interi????




  • di Vecchio Frac data: 20/09/2015 11:49:41

    @cromagno
    "ma per me è il "formato frazione" di excel che sbaglia... Le frazioni trovate con la function sono "migliori" (più vicine al valore decimale) di quelle trovate da excel. "
    ---> Sarà questione di approssimazione. Accontentiamoci del valore più vicino possibile, compatibilmente con il formato scelto per la rappresentazione (due cifre per il denominatore vanno bene).

    @Textomb
    "Ma funziona solo di giorno. Di sera non funziona più."
    ---> LOL

    @ninai
    "stiamo parlando di frazioni fra numeri interi?"
    ---> Direi di sì, sul modello "=20/3 --> 6 e 2/3", "=15/5 --> 3", "=188/24 --> 7 e 5/6", "=186/88 --> 2 e 5/44"






  • di ninai data: 20/09/2015 15:14:08

    Attendendo il "permesso" a pubblicare, mi sono deliziato a trovare soluzioni per casi particolari , attualmente non contemplati nell'esercizio:


    esempio: Numeri iniziali, da dividere, non interi (presenza di decimali).
    il tutto alla modica cifra di 679 caratteri (trattabili)

    Però non funziona quando entrano in gioco numeri periodici oppure i numeri iniziali sono minori di 1.



  • di Albatros54 data: 20/09/2015 16:24:00

    Pronti:





  • di Vecchio Frac data: 20/09/2015 19:44:10

    Bravi tutti... resistete ^_^
    Esercizio aperto a tutti, iscritti e non iscritti e, magari, qualche quota rosa ^_^





  • di totygno71 data: 20/09/2015 20:37:19

    Se dico che non ho capito la domanda e invito l'utente Vecchio Frac a pubblicare un file di esempio con il risultato atteso e senza dati sensibili se vuole essere aiutato a risolvere il suo problema... faccio la figura del "Pippa"??? O_o



  • di Vecchio Frac data: 21/09/2015 08:03:11

    Ho una riunione lunga fino alle 13... nel frattempo potete postare le vostre soluzioni!

    @toty
    "faccio la figura del "Pippa"?"
    ---> Non fare figure e fai vedere la tua soluzione ^_^





  • di Luca73 data: 21/09/2015 08:21:19

    Ciao a tutti nei giorni scorsi sono stato un po' preso e atrettanto sarà nei prossimi periodi percio' non vi garantisco la mia assidua presenza.

    Io ho trovato una soluzione che però non mi dà il risultato atteso. La formula è la seguente matriciale
    pero se gli dò in pasto =5+26/37 mi dà come risultato 5 + 130/185? Penso sia un problema di arrotondamenti.
    matriciale =INT($A$1)&" + "& ($A$1-INT($A$1))*MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X")) & "/" & MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X"))

    L'ho modificata per ottenere un risultato corretto ma così diventa un accrocchio con poco senso.
    matriciale =INT($A$1)&" + "& ($A$1-INT($A$1))*MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X"))/MCD(($A$1-INT($A$1))*MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X"));MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X"))) & "/" & MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X"))/MCD(($A$1-INT($A$1))*MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X"));MIN(SE(RESTO(($A$1-INT($A$1))*RIF.RIGA(A:A);1)=0;RIF.RIGA(A:A);"X")))
    Qualcuno mi sa dire perchè la prima formula non mi dà i risultati correti ?

    Ciao
    Luca





  • di ninai data: 21/09/2015 08:33:10

    ciao
    per frazioni fra numeri interi:
    =SE(INT(A1/A2);INT(A1/A2);"")&" "&SE(RESTO(A1;A2);RESTO(A1;A2)/MCD(RESTO(A1;A2);A2)&"/"&A2/MCD(RESTO(A1;A2);A2);"")




    per frazioni fra numeri decimali (escluso periodici e minori di uno)

    =SE(INT(A1/A2);INT(A1/A2);"")&" "&SE(RESTO(A1;A2);SE(INT(((RESTO(A1;A2)/MCD(RESTO(A1;A2);A2))*10000)/(A2/MCD(RESTO(A1;A2);A2)*10000));INT(((RESTO(A1;A2)/MCD(RESTO(A1;A2);A2))*10000)/(A2/MCD(RESTO(A1;A2);A2)*10000));"")&" "&SE(RESTO(((RESTO(A1;A2)/MCD(RESTO(A1;A2);A2))*10000);(A2/MCD(RESTO(A1;A2);A2)*10000));RESTO(((RESTO(A1;A2)/MCD(RESTO(A1;A2);A2))*10000);(A2/MCD(RESTO(A1;A2);A2)*10000))/MCD(RESTO(((RESTO(A1;A2)/MCD(RESTO(A1;A2);A2))*10000);(A2/MCD(RESTO(A1;A2);A2)*10000));(A2/MCD(RESTO(A1;A2);A2)*10000))&"/"&(A2/MCD(RESTO(A1;A2);A2)*10000)/MCD(RESTO(((RESTO(A1;A2)/MCD(RESTO(A1;A2);A2))*10000);(A2/MCD(RESTO(A1;A2);A2)*10000));(A2/MCD(RESTO(A1;A2);A2)*10000));"");"")

    questa seconda formula credo che non sia da prendere in considerazione, neanche io sarei in grado di spiegare come è venuta fuori.



  • di Marius44 data: 21/09/2015 08:44:43

    Ecco una soluzione con VBA
    Ciao,
    Mario



  • di scossa data: 21/09/2015 08:49:35

    cit. Vecchio Frac: ".....per la verifica io inserirò una divisione in A1 e in A2 mi aspetto il risultato."

    Magari non ho capito nulla io, ma:
    edit



  • di scossa data: 21/09/2015 08:51:40

    cit. Vecchio Frac: ".....per la verifica io inserirò una divisione in A1 e in A2 mi aspetto il risultato."

    Magari non ho capito nulla io, ma:



    AB
    1=20/3
    2=TESTO(A1;"# ?/??")6 2/3


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di ninai data: 21/09/2015 09:11:02

    Avevo letto male. La mia é concepita con i numeri da dividere posti in a1 e in a2

    esempio
    in A1: 20
    in A2 : 3



  • di Albatros54 data: 21/09/2015 09:28:46

     
    Giuro, non ho copiato da scossa.  
     
    =TESTO(a1;"# ???/???")






  • di cromagno data: 21/09/2015 09:47:47

    Ciao a tutti,
    come detto nei post precedenti, ho provato con una function (nella quale si può decidere di considerare frazioni a una, due o tre cifre), ma non sempre da risultati uguali....
    Ho provato il codice di Mario e da alcuni problemi come la mia, forse dipende sul serio dalle approssimazioni.
    Se la frazione si trova in A1, in A2 per il risultato con frazioni a 2 cifre:

    =frazioniB(A1;2)


     
    Function frazioniB(ByVal a As Range, n As Single) As String
    Dim b As Double, i As Long, j As Long, diff As Double, comp As Double, nom As Long, denom As Long
    Dim decimali As Double, ndec As Long
    
    b = a.Value
    If n > 0 And n <= 3 Then
      ndec = CLng(String(n, "9"))
      comp = 1
      If b < (1 / 100) Then
        frazioniB = CStr(0)
      Else
        If b <> Int(b) Then
          If Int(b) = 0 Then
              frazioniB = ""
            Else
              frazioniB = Int(b) & "   "
          End If
          If b <> Int(b) Then
            decimali = b - Int(b)
            For i = 1 To ndec
              For j = 1 To ndec
                diff = Abs(i / j - decimali)
                If diff < comp Then
                  nom = i
                  denom = j
                  comp = diff
                End If
              Next j
            Next i
          End If
          frazioniB = frazioniB & nom & "/" & denom
        Else
          frazioniB = Int(b)
        End If
      End If
    Else
      frazioniB = "Err. Input"
    End If
    End Function
    



  • di ninai data: 21/09/2015 09:56:42

    d'accordo, io ho capito male come erano collocati i dati di origine, ma usare il formato personalizzato che usa excel per il formato frazioni, all'interno della funzione testo(), è come mettere il formato frazione.
    Ma in effetti forse è proprio quello che si voleva.

    Io mi ero preoccupato di simulare il procedimento matematico che converte il risultato decimale di una divisione, in risultato frazionario.



  • di Marius44 data: 21/09/2015 10:14:24

    Visto che postate il codice, beccatevi questo (ma il risultato - per VF - lo da in C2)
     
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a As String, b As String, c As String, d As String
        If Not Intersect(Target, Range("A1")) Is Nothing Then
            Cells(2, 3) = "=LeggeTesto(A1)"
            a = Cells(2, 3).Text: If a = "" Then Exit Sub
            b = Application.WorksheetFunction.Find("/", Range("C2"))
            c = Mid(Left(a, b - 1), 2): d = Mid(a, b + 1)
            Cells(2, 3) = Fix(c / d) & " " & Abs(c Mod d) & "/" & Abs(d)
        End If
    End Sub
    
    Function LeggeTesto(RifCella As Range, Optional RifIndice As Integer) As String
    Dim n As Integer, f As Integer
        RifIndice = 2
        LeggeTesto = RifCella.Formula
        n = 1: f = InStr(1, LeggeTesto, "]")
        Do While n <> 2
            If RifIndice = 1 And Mid(LeggeTesto, n, 1) = "$" Then
                LeggeTesto = Trim(Left(LeggeTesto, n - 1) & Mid(LeggeTesto, n + 1, 200))
            End If
            If Mid(LeggeTesto, n, 1) = "," Then
                LeggeTesto = Trim(Left(LeggeTesto, n) & " " & Mid(LeggeTesto, n + 1, 200))
            End If
            n = n + 1
        Loop
    End Function



  • di isy data: 21/09/2015 10:57:34

    Ciao

    Cit: Avevo letto male. La mia é concepita con i numeri da dividere posti in a1 e in a2

    Insisto con questa interpretazione e allego il File: Div.xlsx



  • di Mister_x (utente non iscritto) data: 21/09/2015 11:35:10

    ciao

    una semplice funzione, in base ai dati di V.F.
    quasta si intende come semplice inizio, migliorabile
    in una cella la nostra richiesta
    A1=20/3
    funzione =Frazione1(a1)
    se frazionato Risultato "6 2/3"
    se =20/4 = "5"

    ciao
     
    Function Frazione1(cella As Range) As String
    Dim valcella As Variant
    Dim dividendo As Variant, divisore As Variant
    Dim resto As Double
    valcella = Cells(cella.Row, cella.Column).Formula
    dividendo = Mid(valcella, 2, 2)
    divisore = Mid(valcella, 5, 5)
    If dividendo / divisore - Fix(dividendo / divisore) = 0 Then
      Frazione1 = Format(dividendo / divisore, "#")
    Else
      resto = (dividendo / divisore - Fix(dividendo / divisore)) * 10
      Frazione1 = Format(Fix(dividendo / divisore), "#0") & " " & Format(Fix(resto / divisore), "#/") & divisore
    End If
    End Function
    






  • di scossa data: 21/09/2015 12:42:54

    Due banali UDF, da usarsi così:



    AB
    1=54/754
    2=Frazione(A1)7
    3=Frazione2(B1;B2)
    47 5/7 7 5/7




    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Public Function Frazione(ByRef rng As Range) As Variant
      Frazione = Evaluate("=TEXT(" & rng.Cells(1, 1).Address & ",""# ?/??"")")
    End Function
    
    Public Function Frazione2(ByVal valSup As Double, valInf As Double) As Variant
      Frazione2 = Evaluate("=TEXT(" & valSup & "/" & valInf & ",""# ?/??"")")
    End Function



  • di Vecchio Frac data: 21/09/2015 14:07:36

    Rientrato da poco, vedo che c'è un bel movimento... intanto grazie a tutti i partecipanti... per scossa e albatros il premio speciale "James T. Kirk" che aveva manipolato il test d'esame per essere ammesso all'Accademia ^_^ all'escamotage =TESTO(numero; formato) non avevo pensato, ma può essere una soluzione valida, anche se in effetti è un po' una scorciatoia birichina... come la sua trasposizione in VBA... è come replicare =SOMMA() utilizzando WorksheetFunction.Sum!! :P





  • di scossa data: 21/09/2015 14:11:49

    La colpa però e tua
    cit. Vecchio Frac: "Questo esercizio è molto semplice e alla portata di tutti"

    per cui ho pensato alla soluzione più ovvia



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di Vecchio Frac data: 21/09/2015 16:20:57

    LOL, ma infatti ho detto che va bene certamente... vedremo poi come valutare il workaround :)






  • di cromagno data: 21/09/2015 16:32:10

    Io voglio il premio per "l'indentazione" più brutta...



  • di Raffaele_53 data: 22/09/2015 10:08:15

    Cit: magia nera
    Dovrebbe funzionare per tutti
    Mi piacerebbe vedere quella di VF
     
    Sub test()
    Dim Risp1 As Integer, Risp2 As Integer, Msg As String, Num1 As Double, Num2 As Double
    Dim  n, N1, N2, N3, N4
    Num1 = InputBox("Inserisci numero da dividere", , 0)
    Num2 = InputBox("Diviso per?", , 0)
    N1 = Int(Num1 / Num2)
    For n = 1 To Int(Num1 / Num2)
        If (Num2 * N2) > Num1 Then Exit For Else N3 = (Num2 * n): N4 = N4 + 1
    Next n
    For n = 1 To 5
        Num1 = Num1 - N3
        N2 = Num1 Mod 2
        N3 = Num2 Mod 2
        If N2 = 0 And N3 = 0 Then Msg = N1 & "  " & Num1 / 2 & "/" & Num2 / 2 Else Msg = N1 & "  " & Num1 & "/" & Num2: Exit For
    Next n
    Range("A2") = Msg
    End Sub



  • di scossa data: 22/09/2015 10:44:53

    cit. Raffaele_53: " magia nera"



    A me sembra "fumo nero", nel senso che hai messo (presumo volontariamente per non far capire il nocciolo, anche se non vedo smiles) tante di quelle istruzioni inutili, variabili che non vengono utilizzate etc. .... infatti il codice può essere semplificato come sotto.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Sub test2()
    Dim Msg As String, Num1 As Double, Num2 As Double
    Dim n, N1, N3
    Num1 = InputBox("Inserisci numero da dividere", , 0)
    Num2 = InputBox("Diviso per?", , 0)
    N1 = Int(Num1 / Num2)
    For n = 1 To Int(Num1 / Num2)
        N3 = (Num2 * n)
    Next n
    Num1 = Num1 - N3
    Msg = N1 & " " & Num1 & "/" & Num2
    
    Range("A2") = Msg
    End Sub



  • di Raffaele_53 data: 22/09/2015 12:44:07

    >>>Magia nera
    A scuola quando non riuscivo, tentavo di farlo partendo dal risultato.
    Qui ho fatto la medesima cosa, prima ho capito perchè appariva in quel modo, poi sono andato ritroso.
    Vorrei farlo con formule, abbiamo tre dati ex 20/3
    1)=RESTO(INT(B1);B1) =6
    2)=B1-INT(B1) =0,666666667
    3)=1-RESTO(B1;INT(B1)) =0,333333333

    Per me il dato importante è il 2, mà mi sfugge qualcosa.

    EDIT - Scusami scossa, se metti per ex =186/88 ti risponde 2 5/44 (FRAZIONE),però se guardi il valore di Msg = 2 10/88 . Il mio codice è in formatto testo.

    Se VF dice che và bene allora basta una formula =A1-INT(A1)/100000) però cella Frazione -EDIT



  • di Vecchio Frac data: 23/09/2015 16:03:31

    Al volo vi posto la mia (imperfetta) soluzione.
    Prima o poi spero di riuscire, prima di collassare sotto gli impegni, a fare un riassunto di tutta questa splendida discussione e a proclamare il proponente del prossimo esercizio :)
    A me sembra che la mia funzioni ma non semplifica per cui immettendo ad esempio "=18/24" restituisce "18/24" e non "3/4"... ma non avevo tempo di fare le correzioni :P
     
    Option Explicit
    
    Function fraction(s As String)
    Dim m As String, v As Variant, qz As Single, rest As String
        m = Replace(s, "", "/")
        qz = Evaluate(s)
        If Int(qz) = 0 Then
            fraction = s
        Else
            If (qz - Int(qz)) = 0 Then
                rest = ""
            Else
                rest = " 1/" & 1 / (qz - Int(qz))
            End If
            fraction = CStr(Int(qz)) & " " & rest
        End If
    End Function






  • di Raffaele_53 data: 23/09/2015 20:18:08

    Nel mio codice, mi sono accorto che anche i numeri dispari possono avere un "Minimo comune Multiplo"

    EDIT Come si trova "Minimo comune Multiplo" in vba? EDIT

    Comunque VF, non hai risposto alla domanda del formatto (cella=frazione)
    Deve essere EXCEL a tramutarlo, oppure farlo con una stringa di dati?

    Ps. Io ho usato Inputbox per decifrare il contenuto delle operazioni (potrei farlo tramite VBA)
    PPs se volete vi spiego il calcolo a ritroso

    Però mi piacerebbe farlo solo con la matematica senza VBA.



  • di fcarboni data: 28/10/2015 12:09:09

    Stante la mia soluzione: ,
    credo di non aver capito la domanda o lo scopo del test.
    Nell'immagine allegata, ho preso come esempio qualche variante (int/int, int/dec, dec/dec)


     
    =SE(INT(A1/A2)<(A1/A2);INT(A1/A2)&" "&A1-(INT(A1/A2)*A2)&"/"&A2;A1/A2)



  • di Raffaele_53 data: 28/10/2015 15:26:58

    Non esisteva uno scopo, si trattava solo "di vedere" eventuali soluzioni alternative con numeri interi di due cifre.
    Il problema che alcuni utenti pensavano che si trattava di due celle distinte A1 & A2, altri invece (compreso io di una sola cella A1), con la difficile realtà di ricavare i due numeri da dividere.
    La Tua formula e quasi giusta, però non ricavi il "MASSIMO COMUNE DIVISORE".
    Ex In A1=186 e in A2=88 diventa "2 10/88", però il risultato corretto è "2 5/44"

    Per me, la 1° formula corretta è quella di ninai (data: 21/09/2015 08:33:10)
    Dove usa la funzione MCD



  • di isy data: 01/11/2015 22:24:05

    Cit: Eventuali soluzioni alternative con numeri interi di due cifre.

    Allego un file trovato in rete..
     
    Option Explicit
    
    Function fr$(x, Optional p% = 2) '
    Dim a, b#, c#, d#, f, g00, g01, g10, g11
      fr = x
      If IsNumeric(x) Then
        c = Abs(x)
        If c > 0 And c <> Int(c) Then
          d = 10 ^ p
          b = c: a = Int(c)
          g00 = 1: g10 = 0
          g01 = a: g11 = 1
          Do While Round(a - b, 12) <> 0 And g11 < d
            b = 1 / (b - a): a = Int(b)
            f = a * g01 + g00: g00 = g01: g01 = f
            f = a * g11 + g10: g10 = g11: g11 = f
          Loop
          If g11 < d Then g00 = g01: g10 = g11
          a = Int(g00 / g10): b = g00 - a * g10
          fr = IIf(x < 0, "-", "") & IIf(g00 = 0 Or a > 0, a, "") & IIf(g10 > 1, " " & Right$(Space(p) & b, p) & "/" & Left$(g10 & Space(p), p), Space(2 * (p + 1)))
        Else
          fr = x & Space(2 * (p + 1))
        End If
      End If
    End Function