Afronden naar dichtstbijzijnde fibonacci reeks in Excel

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Deathchant
  • Registratie: September 2003
  • Laatst online: 01-10 22:45

Deathchant

Don't intend. Do!

Topicstarter
Vooropgesteld: ik ben dus absoluut geen held met Excel. I hate it, maar ik moet er nu toch wat mee.

Ik heb een tabel met 2 kolommen gemaakt, waarbij ik de getallen uit kolom 1 wil afronden naar het dichtstbijzonde fibonacci getal, ongeacht of dit hoger of lager is. In het geval dat het getal even dichtbij het hogere of lagere fibonacci nummer is, dan maakt het niet veel uit welke er gekozen moet worden, maar dan zou ik voor de hogere willen gaan. Het resultaat moet ernaast in kolom 2 terecht komen.

Dus het resultaat moet dan worden:
4 -> 5
6 -> 5
8 -> 8
10 -> 8
12 -> 13
14 -> 13
16 -> 13
17 -> mag naar 13 maar liever naar 21
20 -> 21

Daarvoor heb ik op internet de volgende formule geplukt:
=INDEX(FIBO;1; IF(D48>=(INDEX(FIBO;1;(MATCH(D48;FIBO;1))) + INDEX(FIBO;1;(MATCH(D48;FIBO;1)+1)))/2; MATCH(D48;FIBO;1)+1; MATCH(D48;FIBO;1)))
waarbij D48 dus het eerste getal is uit kolom 1.

FIBO is een name range die ik heb gemaakt middels 2 cellen:
linkercel: FIBO
rechtercel: 0; 1; 1; 2; 3; 5; 8; 13; 21; 34; 55; 89; 144

Ik krijg dus steeds een #N/A error, wat doorgaans een bron-error is, dus vermoedelijk heb ik iets niet goed staan in die name range. Ik heb de puntkomma's vervangen door komma's, maar dat werkt ook niet.
Heeft iemand een idee?

Canon: EOS R6 | EF 16-35/4L IS USM | EF 70-200/2.8L IS II USM
Zeiss: 35/2 Distagon | 50/2 Makro-Planar | 85/1.4 Planar | 100/2 Makro-Planar | 135/2 Apo Sonnar

Beste antwoord (via Deathchant op 03-04-2024 18:02)


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Als je de reeks op deze manier in een cel hebt getikt is het simpelweg een tekst. Plaats elk getal in zijn eigen cel en geef het hele bereik de naam fibo

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Als je de reeks op deze manier in een cel hebt getikt is het simpelweg een tekst. Plaats elk getal in zijn eigen cel en geef het hele bereik de naam fibo

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • +1 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 02-10 12:53

DexterDee

I doubt, therefore I might be

Als je niet schrikt van een stukje VBA code, dan kun je het relatief simpel oplossen.

- Open met ALT - F11 de VBA editor
- Voeg een nieuwe module toe
- Copy/paste onderstaande code
- Sluit de module en sla op

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Function RoundToFibonacci(inputNumber As Double) As Double
    Dim fib1 As Double
    Dim fib2 As Double
    Dim fibTemp As Double
    Dim fibNext As Double
    Dim nearestFib As Double
    
    ' Find the two Fibonacci numbers surrounding the inputNumber
    fib1 = 0
    fib2 = 1
    fibNext = fib1 + fib2
    
    Do While fibNext <= inputNumber
        fibTemp = fib2
        fib2 = fibNext
        fibNext = fibTemp + fib2
    Loop
    
    ' Calculate the nearest Fibonacci number
    If Abs(inputNumber - fib1) < Abs(inputNumber - fib2) Then
        nearestFib = fib1
    Else
        nearestFib = fib2
    End If
    
    ' Return the nearest Fibonacci number
    RoundToFibonacci = nearestFib
End Function

Function Fibonacci(n As Double) As Double
    If n <= 1 Then
        Fibonacci = n
    Else
        Fibonacci = Fibonacci(n - 1) + Fibonacci(n - 2)
    End If
End Function

Je kunt nu de betreffende functie gebruiken in een cel, dus bijvoorbeeld:
=RoundToFibonacci(A1)

* VBA code is ongetest overigens ;)

[ Voor 16% gewijzigd door DexterDee op 03-04-2024 17:58 ]

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • +1 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 22:23

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Je kan het ook simpelweg met een vlookup doen, waarbij je de laatste parameter van de vlookup op true zet, zodat hij een approximate match doet.
Enige nadeel is dat dat zo te zien wel omlaag afrondt in plaats van omhoog.

Edit: Wat dan weer op te lossen is met xlookup ipv vlookup, aangezien je met xlookup kan instellen of ie de eerstvolgende grotere of eerstvolgende kleinere waarde matcht wanneer geen exacte match beschikbaar is. Moet je wel een recente Excel versie hebben.

[ Voor 37% gewijzigd door Orion84 op 03-04-2024 18:07 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Deathchant
  • Registratie: September 2003
  • Laatst online: 01-10 22:45

Deathchant

Don't intend. Do!

Topicstarter
Lustucru schreef op woensdag 3 april 2024 @ 17:38:
Als je de reeks op deze manier in een cel hebt getikt is het simpelweg een tekst. Plaats elk getal in zijn eigen cel en geef het hele bereik de naam fibo
Ow damn, nu voel ik me dus echt dom ;( Dit deed het em. Hartstikke bedankt! Topic mag op slot!

@DexterDee Ik waardeer je input, thanks voor de effort! d:)b

Canon: EOS R6 | EF 16-35/4L IS USM | EF 70-200/2.8L IS II USM
Zeiss: 35/2 Distagon | 50/2 Makro-Planar | 85/1.4 Planar | 100/2 Makro-Planar | 135/2 Apo Sonnar