Vraag & Antwoord

Programmeren

Gegevens opvragen door vergelijk

16 antwoorden
  • Ik heb op blad1 in kolom G unieke getallen staan Ik heb op blad2 in kolom J die unieke getallen ook staan. Op blad1 zou ik en formule willen op Cel H2 die kijkt naar G2 en dat unieke getal opzoekt in Blad2 in kolom J. Als hij dat vindt moet hij het gegeven wat in kolom B staat (de naam) neerzetten. Ik kom er niet uit. niet met vert.zoeken of vergelijken of met als wie?
  • Ik denk dat het fout gaat om dat de waarden waaruit je zoekt, (kolom J op blad 2), de eerste kolom van je zoek bereik moet zijn. Je kan dan niet meer verwijzen naar kolom B die ervoor staat. Verder, als kolom J niet gesorteerd is, moet in de functie zijn: =vert.zoeken(G1,Blad2!J1:K40,2,onwaar) Als je 'onwaar' weglaat, wordt aangenomen dat de waarden gesorteerd staan. Fred
  • Ik ben nog even met die formule aan het stoeien geweest. Het komt er vermoedelijk op neer dat excel het dus niet kan? Dan moet ik het via dBase oplossen die kan het via variabelen, plaatsen door vergelijken wel. maar ik laat me graag overtuigen dat excel het ook kan wie?
  • Natuurlijk kan Excel het wel, alleen met de cel-functies in het wat lastig. In Visual Basic (VBA) lukt veel meer. Heb je een voorbeeld van je spreadsheet en een omschrijving van wat je exact wil? Kun je dat sturen?
  • Waar kan ik het excel bestand heen sturen? naar je email?
  • Hier heb ik een kleine functie die volgens mij doet wat jij zoekt: [code:1:666c16faa1] Public Function SpecialLookup(ByVal nLookup As Long) As String Dim sheetLookup As Worksheet Dim rFound As Range Dim nRow As Long On Error GoTo SpecialLookup_Error Set sheetLookup = ActiveWorkbook.Worksheets("Blad2") Set rFound = sheetLookup.Range("J:J").Find(nLookup, LookIn:=xlValues) nRow = rFound.Row SpecialLookup = rFound.Offset(0, 2 - rFound.Column).Text Exit Function SpecialLookup_Error: MsgBox Err.Description End Function [/code:1:666c16faa1] Uitleg: Je moet deze functie in een VBA module plakken. Je kan hem dan in een cel aanroepen. De functie verwacht 1 numerieke waarde, nLookup. Deze waarde zoekt hij op in de rij J van Blad 2. Let op! Rij 1 wordt overgeslagen, maar ik ga er voor het gemak van uit dat je daar een kop hebt staan. Wanneer de waarde gevonden wordt, dan retourneert de functie de waarde in de 2e kolom (kolom B). Ik hoop dat je er wat aan hebt. Anders hoor ik het wel.
  • Een prima oplossing, die ook zou moeten werken voor tekst, door nLookUp als variant te definieren. Helaas kreeg ik dat niet goed werkend. Ik heb het wat aangepast en een kolom "offset" toegevoegd in de functie, zodat je kunt opgeven uit welke kolom je de gegevens wilt halen. [code:1:9b9c59db58] Public Function SpecialLookup(ByVal nLookup As Variant, OffSet As Integer) As String Dim sheetLookup As Worksheet Dim Data, c As Range On Error GoTo SpecialLookup_Error Set sheetLookup = ActiveWorkbook.Worksheets("Blad1") Set Data = sheetLookup.Range("Data") For Each c In Data If c.Value Like nLookup Then SpecialLookup = c.OffSet(0, OffSet).Value End If Next c Exit Function SpecialLookup_Error: MsgBox Err.Description End Function [/code:1:9b9c59db58]
  • Wat ik fout doe geen idee. Ik heb een loze macro macro1 aangemaakt en daar de macro is geplakt. Als ik deze wil opstarten in H2 krijg ik: dat er een end sub wordt verwacht. Als ik die plaats wordt de macro gescheiden waardoor het geheel niet iig niet bruikbaar is. Sub Macro1() ' ' Macro1() Macro ' De macro is opgenomen op 12-6-2005 door Evert Pierik. Public Function SpecialLookup(ByVal nLookup As Long) As String Dim sheetLookup As Worksheet Dim rFound As Range Dim nRow As Long On Error GoTo SpecialLookup_Error Set sheetLookup = ActiveWorkbook.Worksheets("Blad2") Set rFound = sheetLookup.Range("J:J").Find(nLookup, LookIn:=xlValues) nRow = rFound.Row SpecialLookup = rFound.Offset(0, 2 - rFound.Column).Text Exit Function SpecialLookup_Error: MsgBox Err.Description End Function
  • Wat je nu doet is een functie inkapselen in een sub. Een sub is bijna helemaal hetzelfde als een functie maar een sub geeft geen waarde terug en daarom is wat jij wil een functie. Jouw probleem is dat je een regel 'Sub Macro1()' hebt zodat je programma denkt dat je een sub aan het uitvoeren bent. Uiteraard wil het programma dan ook weten waar de sub eindigt. Probeer het opnieuw maar haal dat 'Sub Macro1()' weg en zet er ook geen 'End Sub' neer. In plaats van de sub moet je dus alleen een function overhouden. Grote kans dat het dan gaat werken. :wink:
  • Als ik het nu goed begrijp wordt de functie nloopup gedefinieerd? Maar hoe geef ik dan aan dat hij die moet gebruiken in H2? Zoals ik het nu heb heb ik alleen over wat door Violist46 is opgegeven en niet via macro op te roepen. Ik hoop dat jullie nog even doorgaan met uitleggen zodat zelfs ik het begrijp.
  • =INDEX(Blad2!B1:J5;VERGELIJKEN(G2;Blad2!J1:J5;0);1) met deze formule in H2 moet het lukken. Aanvulling: B1 tot J5 is het bereik in mijn voorbeeld, hier moet jij uiteraard je eigen gegevens invullen.
  • Dat stukje tekst van Doof werkt prima! Ik denk dat je de hele functie gewoon moet laten voor wat het is, en de tekst van Doof moet gebruiken. Een functie is geen macro en kun je ook niet via macro openen. Wel kun je via invoegen - functie de nieuwe functie vinden en gebruiken.
  • als ik via functieargumenten kijk zie ik een deel van de formule wat met VERGELIJKEN begint eindigen in #N/B. Er gaat bij mij nog iets fout. De vraag was: Ik heb op blad1 in kolom G unieke getallen staan Ik heb op blad2 in kolom J die unieke getallen ook staan. Op blad1 zou ik en formule willen op Cel H2 die kijkt naar G2 en dat unieke getal opzoekt in Blad2 in kolom J. Als hij dat vindt moet hij het gegeven wat in kolom B staat (de naam) neerzetten. misschien als iemand de exacte formule geeft dat ik hem dan ook verder kan toepassen. er volgt nu een melding kan het project of bibliotheek niet vinden als ik de formule sleep komt er af en toe wel een naam te voorschijn, anders #N/B ook als de uniek kode wel bestaat. willekeur? of mis ik iets in de installatie van excel?[/b]
  • [quote:f2916a3c33="Droopy"]als ik via functieargumenten kijk zie ik een deel van de formule wat met VERGELIJKEN begint eindigen in #N/B. Er gaat bij mij nog iets fout. Ik heb op blad2 in kolom J die unieke getallen ook staan. Op blad1 zou ik en formule willen op Cel H2 die kijkt naar G2 en dat unieke getal opzoekt in Blad2 in kolom J. Als hij dat vindt moet hij het gegeven wat in kolom B staat (de naam) neerzetten. misschien als iemand de exacte formule geeft dat ik hem dan ook verder kan toepassen. er volgt nu een melding kan het project of bibliotheek niet vinden[/quote:f2916a3c33] =INDEX(Blad2!B1:J5;VERGELIJKEN(G2;Blad2!J1:J5;0);1) Blad2!B1:J5 Is het bereik vam kolom B (naam) tot en met Kolom J (uniek getal) in mijn voorbeeld 5 rijen G2 = de zoekwaarde Blad2!J1:J5 Is het bereik waarin je de zoekwaarde opzoekt, in mijn voorbeeld weer 5 rijen. Als je het bereik aanpast met je eigenwaarden, dan moet deze formule in cel H2 het gewenste resultaat opleveren. De melding: kan het project of bibliotheek niet vinden kan niet door deze formule veroorzaakt zijn. Is waarschijnlijk een VBA fout.
  • Je moet via de visual basic editor die functie weghalen, de beste methode is om de module1 te verwijderen waarin je de functie hebt staan. Vervolgens voer je op vakje H2 van Blad 1 de onderstaande tekst in. =INDEX(Blad2!B1:[color=red:1e2a85d6de]J5[/color:1e2a85d6de];VERGELIJKEN(G2;Blad2!J1:[color=red:1e2a85d6de]J5[/color:1e2a85d6de];0);1) Nu hoef je alleen nog de twee rode waarden te veranderen om tot helemaal onderaan jouw kolom J van Blad 2 te komen. Dus als je bijvoorbeeld 24 getallen onder elkaar hebt staan dan wordt de formule dus =INDEX(Blad2!B1:[color=red:1e2a85d6de]J24[/color:1e2a85d6de];VERGELIJKEN(G2;Blad2!J1:[color=red:1e2a85d6de]J24[/color:1e2a85d6de];0);1) Vervolgens kijk je waar jouw kolom J op Blad 2 begint want als deze niet op J1 begint dan moet je alle verwijzingen naar J1 in die formule wijzigen in die locatie waar jouw kolom J dan wel begint. De namen die hij dan in cel H2 op Blad1 zet bevinden zich uiteraard in kolom B op Blad 2 en cel H2 moet breed genoeg zijn om de volledige naam er in te kunnen zetten. Uitgaande dat jouw kolom J op J3 begint en op J24 eindigt krijg je dan het volgende formule =INDEX(Blad2![color=blue:1e2a85d6de]B3[/color:1e2a85d6de]:[color=red:1e2a85d6de]J24[/color:1e2a85d6de];VERGELIJKEN(G2;Blad2![color=blue:1e2a85d6de]J3[/color:1e2a85d6de]:[color=red:1e2a85d6de]J24[/color:1e2a85d6de];0);1) waarbij blauw de beginwaarde is en rood de eindwaarde. Als je deze formule ook nog eens naar beneden wilt kopiëren terwijl de gegevens in Blad2 op; dezelfde plaats blijven staan dan moet je de formule als volgt opschrijven =INDEX(Blad2![color=blue:1e2a85d6de]B$3[/color:1e2a85d6de]:[color=red:1e2a85d6de]J$24[/color:1e2a85d6de];VERGELIJKEN(G2;Blad2![color=blue:1e2a85d6de]J$3[/color:1e2a85d6de]:[color=red:1e2a85d6de]J$24[/color:1e2a85d6de];0);1) De $ tekens geven aan dat de waarde er achter een vaste waarde is en verandert dus niet wanneer je naar beneden kopiëert.
  • Ik ben er eindelijk uit. Dat de formule niet altijd werkte lag aan het feit dat de celeigenschappen niet altijd overeenkwamen en dat soms het uniek nog niet aanwezig was. Daarom kreeg ik die #N/B thanks

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.