• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Meerdere waardes in een tabel opzoeken

Status
Niet open voor verdere reacties.
heb je hier wat aan als je een functie zoekt?

Code:
Function VertragingsBak(Tabel As Range, N2 As Double, MaxForce As Double, N As Integer)
    Dim Oplossingen(100) As String
    Dim x As Integer, y As Integer, z As Integer, zk As Integer
    x = 2
    Do Until Tabel(3, x) >= [N2]
        x = x + 1
    Loop
    For y = 7 To Tabel.Rows.Count
        If Tabel(y, x).Value >= MaxForce Then
            Oplossingen(z) = Tabel(y, 1)
            z = z + 1
        End If
    Next y
    VertragingsBak = Oplossingen(N)
End Function

Bekijk bijlage tandwielkast(2.xls

groet sylvester
 
Als ik het goed begrijp reageert de macro op veranderingen van de geselecteerde cel op het tabblad. De waarde wordt echter niet ingevoerd in betreffende tabblad.

Moet ik target vervangen door een van de celnamen waarin de waardes staan?

Greetz,

Krichaun
 
Die formule werkt :)

Hulde aan de helpers :love:

Ik ga van het weekend miss nog wel kijken of ik er zelf wat moois van kan maken, maar voorlopig werkt dit heel erg prima
 
Als ik het goed begrijp reageert de macro op veranderingen van de geselecteerde cel op het tabblad. De waarde wordt echter niet ingevoerd in betreffende tabblad.
Ik neem aan dat je het hier over mijn macro hebt, of niet?
Die macro reageert op elke verandering in N2 en/of N3 en die doet wat hij móet doen.
 
Ah oke, 't probleem is inmiddels opgelost :), ga nog wel van het weekend nog kijken of ik het zelf kan reproduceren om het zo maar te zeggen, maar 't werkt nu naar behoren.
 
Ey peeps,

ik hoop dat er iemand op reageert nog ook al staat de vraag op opgelost. Ik wil nu de in een tabel zoeken wanneer 2 waardes op dezelfde rij voorkomen (binnen een marge van 5%, mag ook worden vervangen door een 2e waarde) en vervolgens een resultaat daarvan weergeven.

Nu heb ik daarvoor het volgende geschreven / herschreven, maar het werkt niet naar behoren. Ik krijg een witte cel als ik de formule gebruik. Heeft iemand wat tips?

VB:

Function Reductor(Table As Range, Val1 As Variant, Val2 As Variant, Val2Col As Integer, ResultCol As Integer)
Dim i As Integer, z As Integer, Oplossingen(100) As String
Dim rCol As Range
For i = 1 To Table.Rows.Count
If Table.Cells(i, 1) >= Val1 And Table.Cells(i, 1) <= Val1 * 1.05 And Table.Cells(i, Val2Col) = Val2 And Table.Cells(i, Val2Col) <= Val2 * 1.05 Then
Oplossingen(z) = Table.Cells(i, ResultCol)
z = z + 1
End If
Exit For
Next i
Reductor = Oplossingen(N)
End Function

Greetz
 
hoi

bedoel je zo iets?

Code:
Function InRange(Tabel As Range, Cluch As String, MaxForce As Double, Procenten As Double, N As Integer)
    Dim Oplossingen(100) As String, Kolom As Integer, Rij As Integer, Opl As Integer
    Rij = 7
    Do Until Tabel(Rij, 1) = Cluch
        Rij = Rij + 1
    Loop
    For Kolom = 7 To Tabel.Columns.Count
        t = Tabel(Rij, Kolom)
        If Tabel(Rij, Kolom).Value >= MaxForce * (1 - Procenten) And _
           Tabel(Rij, Kolom).Value <= MaxForce * (1 + Procenten) Then
            Oplossingen(Opl) = Tabel(Rij, Kolom)
            Opl = Opl + 1
        End If
    Next Kolom
    InRange = Oplossingen(N)
End Function
Bekijk bijlage tandwielkast(3.xls
groet sylvester
 
heb het nu omgeschreven naar dit:


Public Function InRange(Tabel As Range, N2 As Double, MaxM As Double, Procenten As Double, N As Integer, K As interger, R As interger)
Dim Oplossingen(100) As String, Rij As Integer, Opl As Integer
Rij = 2
Do Until Tabel(Rij, 1).Value >= N2 And _
Tabel(Rij, 1).Value <= N2 * (1 + Procenten)
Rij = Rij + 1
Loop
For Kolom = 7 To Tabel.Columns.Count
t = Tabel(Rij, K)
If Tabel(Rij, K).Value >= MaxM And _
Tabel(Rij, K).Value <= MaxM * (1 + Procenten) Then
Oplossingen(Opl) = Tabel(Rij, R)
Opl = Opl + 1
End If
Next Kolom
InRange = Oplossingen(N)
End Function


De bedoeling is dat ik kan opgegeven in welke kolom de 2e waarde gezocht moet worden en wat de resultaatkolom is.

Ik krijg er echter nu niks uit behalve complimeerfout ... Geen idee wat ik fout doe
 
hoi

voor de zekerheid regeltje toevoegen:
Code:
If Rij > Tabel.Rows.Count Then InRange = "": Exit Function
dus dan wordt het zo iets
Code:
Function InRange(Tabel As Range, Cluch As String, MaxForce As Double, Procenten As Double, N As Integer)
    Dim Oplossingen(100) As String, Kolom As Integer, Rij As Integer, Opl As Integer
    Rij = 7
    Do Until Tabel(Rij, 1) = Cluch
        Rij = Rij + 1
        If Rij > Tabel.Rows.Count Then InRange = "": Exit Function
    Loop
    For Kolom = 7 To Tabel.Columns.Count
        If Tabel(Rij, Kolom).Value >= MaxForce * (1 - Procenten) And _
           Tabel(Rij, Kolom).Value <= MaxForce * (1 + Procenten) Then
            Oplossingen(Opl) = Tabel(Rij, Kolom)
            Opl = Opl + 1
        End If
    Next Kolom
    InRange = Oplossingen(N)
End Function
 
Nog steeds dezelfde foutmelding. Ik de tabel staat op een ander tabblad, maar heb dit al uitgesloten door alles op 1 sheet te zetten. Maar zelfde resultaat. Dit voer ik in achter inrange (de herschreven).
=inrange(tabel;toerental(waarde);koppel(waarde);percentage;KOLOM()-8);3;5)

De tabel waar ik in wil zoeken heeft 6 kolommen, waarvan de 1e waarde overeen moet komen met een waarde uit de 1e, en de 2e waarde uit de 3e kolom. Resultaatkolommen zijn 4,5,6 (kan ik eventueel ook appart doen door 3x formule te gebruiken). Alle regels die aan betreffende voorwaarde voldoen moeten onder elkaar worden opgesomt.
 
voorbeeldje bijgesloten, mooiste zou zijn als de hele regel waar de waardes in voorkomen weer gegeven wordt, al is dat natuurlijk makelijk te doen als je aan kunt geven welke kolom je resultaat is.

Het kan zo zijn dat de posities van de kolomen nog wat veranderen, dat kan ik nu nog niet zeggen.
Hoop dat het mijn probleem duidelijk maakt :o
Bekijk bijlage voorbeeld 2.xlsx
 
hallo Krichaun

is het mogenlijk om in het voorbeeld ook aan geven welke waarden er tevoorschijn moeten komen?

en ik ben ook benieuwd naar het verband tussen deze tabellen.

verzend jij je bestand zonder macro's?
ik zie ze niet op mijn computer.

groet sylvester
 
Laatst bewerkt:
Als de waarde in de gele kolom tussen de waarde van het gele veld en het percentage valt (dus bijv tussen 10 en 11 bij 10 %) en de waarde in de groene kolom tussen de waarde van het groene veld en het percentage valt moet de gehele regel gerapporteerd worden.

De link tussen bijde tabellen is de grote van het type. als je kijkt zie je de aanduiding gks09 bij voorkomen, als die tandwielkast niet geschikt is voor de beoogde krachten meot die uit de lijst met mogelijkheden geschrapt worden.

Bij gegeven input in het voorbeeld moet dus de 1e regel weergegeven worden.

Heb ik de vraag zo voldoende duidelijk beantwoord?
 
Liefst een andere lijst, zoals gezegt moeten de gegevens hierna nog verder worden verwerkt, dus is het niet handig als het in een tabel aangegeven staat ...

Greetz,

Krichaun
 
zo iets?

Code:
Function InRange(Tabel As Range, N2 As Double, MaxM As Double, KoppelPercentage As Double, ToerenPercentage As Double, Opl As Integer, Pos As Integer)
    Dim Oplossingen(100) As Integer, Rij As Integer, Kolom As Integer, Teller As Integer
    Dim Rpm As Double, M As Double
    For Rij = 1 To Tabel.Rows.Count
        Rpm = Tabel(Rij, 1): M = Tabel(Rij, 3)
        If (Rpm >= N2) And (Rpm <= (N2 * (1 + ToerenPercentage))) And _
           (M >= MaxM) And (M <= (MaxM * (1 + KoppelPercentage))) Then
            Oplossingen(Teller) = Rij
            Teller = Teller + 1
         End If
    Next Rij
    If Oplossingen(Opl) = 0 Then InRange = "": Exit Function
    InRange = Tabel(Oplossingen(Opl), Pos + 1)
End Function

Bekijk bijlage tandwielbak4.xls

groet sylvester
 
Hah het werkt :) Moet een beetje geduldig zijn, maar in secondje of 5 kan ik geen catalogus doorlezen en alles opsommen ^^. Nu nog't een en ander proberen ivm matche van de uitkomsten ed, maar dit werkt toppie !:cool:
 
hoi
als het niet snel genoeg gaat
kun je het proces versnellen door hier en daar static variabelen te gebruiken

de functie berekend per oplossing de hele tabel door.
dat hoeft dan nog maar 1 keer. hij onthoud dan de oplossingen, en hoeft ze niet steeds opnieuw te berekenen.
als je interesse hebt maak ik wel een "static functie"

groet sylvester
 
"t zoeken gaat snel genoeg. Ik heb echter nog een probleempje. Ik heb een extra voorwaarde toegevoegd, maar nu krijg ik als uitkomst alleen #waarde.

Dim Rpm As Double, M As Double, P As Double
For Rij = 1 To Tabel.Rows.Count
Rpm = Tabel(Rij, 1): M = Tabel(Rij, 4): P = Tabel(Rij, 8)
If (Rpm >= N2) And (Rpm <= (N2 * (1 + ToerenPercentage))) And _
(P >= ((MaxM * N2) / 8595)) And _
(M >= MaxM) And (M <= (MaxM * (1 + KoppelPercentage))) Then
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan