Excel: laagste waarde uit een cel halen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • RF1000
  • Registratie: Januari 2018
  • Laatst online: 12:39
Ik heb een export vanuit een 3D programma met afmetingen van componenten ingelezen in Excel en wil uit deze combinatie van letters en getallen de laagste waarde halen. Het getal is altijd 100 of groter, nooit lager.

ø250
150x300
1200x300-1200x300


Dus met bovenstaande moet onderstaand uitgevoerd worden. Met welke formule zou dat moeten lukken?

250
150
300

Alle reacties


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 15:42

Reinier

\o/

Worden de waardes altijd gescheiden met ø, x of -? Dan zou je iets met TEXTSPLIT() kunnen proberen, wat je een x-aantal nieuwe kolommen oplevert. Op die kolommen kun je een MIN() loslaten.

Of VBA, of een regex-plugin.

Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
RF1000 schreef op vrijdag 19 april 2024 @ 10:05:
Het getal is altijd een honderdtal, nooit lager.
250
150
300
250 en 150 zijn geen honderdtallen!

Acties:
  • 0 Henk 'm!

  • TrafficBandit
  • Registratie: December 2019
  • Laatst online: 31-01 14:00
Ik zou dit oplossen met een custom functie in VBA die een regular expression gebruikt om de getallen uit de string te halen.

Om dit te doen moet je:
1.) In Excel in de "Developer" menu optie het "Visual Basic" icoon selecteren.
2.) In de VBA editor kan je dan rechts klikken op het VBAProject en insert "Module" selecteren.
3.) Selecteer de Module en plak daar de volgende code in:

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
37
38
Public Function GetLowestValue(strInputText As String) As Integer

    Dim objRegEx As Object
    Dim objRegExMatches As Object
    Dim intCounter As Integer
    Dim intReturnValue As Integer
    
    Set objRegEx = CreateObject("VBScript.RegExp")
    
    objRegEx.pattern = "\d+"
    objRegEx.Global = True
    objRegEx.MultiLine = True
    objRegEx.ignorecase = True

    Set objRegExMatches = objRegEx.Execute(strInputText)
    
    If objRegExMatches.Count > 0 Then
    
        For intCounter = 0 To objRegExMatches.Count - 1
        
            If intCounter = 0 Then
                intReturnValue = objRegExMatches.Item(intCounter)
            Else
                If objRegExMatches.Item(intCounter) < intReturnValue Then
                    intReturnValue = objRegExMatches.Item(intCounter)
                End If
            End If
        
        Next
    
    End If
    
    GetLowestValue = intReturnValue
    
    Set objRegExMatches = Nothing
    Set objRegEx = Nothing
    
End Function


4.) In excel zelf kan je nu de custom functie "GetLowestValue" aanroepen (=GetLowestValue(E2)), met als argument de text uit jouw voorbeeld. Je krijgt als uitkomst van de formule het laagste getal.

Acties:
  • 0 Henk 'm!

  • RF1000
  • Registratie: Januari 2018
  • Laatst online: 12:39
dix-neuf schreef op vrijdag 19 april 2024 @ 13:47:
[...]

250 en 150 zijn geen honderdtallen!
Ik bedoelde eigenlijk getallen groter of gelijk aan 100.

Acties:
  • 0 Henk 'm!

  • RF1000
  • Registratie: Januari 2018
  • Laatst online: 12:39
TrafficBandit schreef op vrijdag 19 april 2024 @ 15:02:
Ik zou dit oplossen met een custom functie in VBA die een regular expression gebruikt om de getallen uit de string te halen.

Om dit te doen moet je:
1.) In Excel in de "Developer" menu optie het "Visual Basic" icoon selecteren.
2.) In de VBA editor kan je dan rechts klikken op het VBAProject en insert "Module" selecteren.
3.) Selecteer de Module en plak daar de volgende code in:

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
37
38
Public Function GetLowestValue(strInputText As String) As Integer

    Dim objRegEx As Object
    Dim objRegExMatches As Object
    Dim intCounter As Integer
    Dim intReturnValue As Integer
    
    Set objRegEx = CreateObject("VBScript.RegExp")
    
    objRegEx.pattern = "\d+"
    objRegEx.Global = True
    objRegEx.MultiLine = True
    objRegEx.ignorecase = True

    Set objRegExMatches = objRegEx.Execute(strInputText)
    
    If objRegExMatches.Count > 0 Then
    
        For intCounter = 0 To objRegExMatches.Count - 1
        
            If intCounter = 0 Then
                intReturnValue = objRegExMatches.Item(intCounter)
            Else
                If objRegExMatches.Item(intCounter) < intReturnValue Then
                    intReturnValue = objRegExMatches.Item(intCounter)
                End If
            End If
        
        Next
    
    End If
    
    GetLowestValue = intReturnValue
    
    Set objRegExMatches = Nothing
    Set objRegEx = Nothing
    
End Function


4.) In excel zelf kan je nu de custom functie "GetLowestValue" aanroepen (=GetLowestValue(E2)), met als argument de text uit jouw voorbeeld. Je krijgt als uitkomst van de formule het laagste getal.
thx! Ik ga er eens mee aan de slag

Acties:
  • +1 Henk 'm!

  • Cheesy
  • Registratie: Mei 2006
  • Niet online
Reinier schreef op vrijdag 19 april 2024 @ 10:11:
Worden de waardes altijd gescheiden met ø, x of -? Dan zou je iets met TEXTSPLIT() kunnen proberen, wat je een x-aantal nieuwe kolommen oplevert. Op die kolommen kun je een MIN() loslaten.
Dat dacht ik ook, maar die laatste stap (MIN) geeft als uitvoer 0.

Afbeeldingslocatie: https://i.ibb.co/vVG9qYh/excel01.png

[ Voor 10% gewijzigd door Cheesy op 19-04-2024 15:47 ]


Acties:
  • +2 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 15:26

g0tanks

Moderator CSA
Cheesy schreef op vrijdag 19 april 2024 @ 15:46:
[...]

Dat dacht ik ook, maar die laatste stap (MIN) geeft als uitvoer 0.

[Afbeelding]
Omdat TEXTSPLIT() als output tekst heeft waardoor MIN() het niet herkent. Zet er VALUE() omheen om het te converteren naar een getal.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • +2 Henk 'm!

  • dixet
  • Registratie: Februari 2010
  • Laatst online: 13:24
Cheesy schreef op vrijdag 19 april 2024 @ 15:46:
[...]

Dat dacht ik ook, maar die laatste stap (MIN) geeft als uitvoer 0.

[Afbeelding]
Dat komt omdat het resultaat van TEXTSPLIT() tekst is. Dat moet je eerst naar nummers omzetten

Deze werkt bij mij (en in 1 formule)

code:
1
=MIN(VALUE(TEXTSPLIT(A2;$A$7:$A$9;;TRUE)))


Afbeeldingslocatie: https://tweakers.net/i/kn4tIHWs0w1S1N9BI_Xy8Rgb96o=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/MzjcNqRSFQIsipabtPewNV1d.png?f=user_large

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 15:42

Reinier

\o/

Ja da wou ik zegge ja

Acties:
  • 0 Henk 'm!

  • Cheesy
  • Registratie: Mei 2006
  • Niet online
g0tanks schreef op vrijdag 19 april 2024 @ 15:57:
[...]


Omdat TEXTSPLIT() als output tekst heeft waardoor MIN() het niet herkent. Zet er VALUE() omheen om het te converteren naar een getal.
Tnx, achteraf gezien logisch natuurlijk. Ik had celeigenschap al op 'getal' gezet, dus het was in de richting ;)
Pagina: 1