Spreadsheet: deel van tekst zoeken in lijst

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Zwartkijker
  • Registratie: Juni 2007
  • Laatst online: 13:00
Jongens, ik heb nog eens hulp nodig :)
Ik ben nog steeds bezig met een "geautomatiseerd" huishoudboekje. Hier heb een lijst met de omschrijving van verrichtingen, bij elke verrichting wil ik zoeken naar een zoekterm die in een lijst staat en de waarde ernaast, waarin staat welk type het is, als resultaat geven.

Bijvoorbeeld:

Kolom 1
1 "hier staat een tekst enzo"
2 "iets anders"
3 "23456 met nog wat tekens"
4 "tekst kan ook vooraan staan"
5 "bla bla anders bla bla"
6 "water 09824"

Kolom 2 (zoeken op) - Kolom 3 (type)
tekst - boodschappen
anders - restaurant
23456 - verzekering
09824 - water

Resultaat zou dan zijn, per waarde uit kolom 1 de passende type:
1 boodschappen
2 restaurant
3 verzekering
4 boodschappen
5 restaurant
6 water

Iemand enig idee? Met vert.zoeken en vergelijken kom ik er niet, of overzie ik iets.

PSN: Zwartkijker


Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 12-10 22:16
Met een stukje vba is dit zo gefixt...

voor de snelheid even alle bereiken 'vast' ingesteld.. dat is nog wel mooi en dynamisch te maken. het gaat er nu even over dat je snapt hoe het werkt.

Kolom B is de uitkomst van de macro.

Afbeeldingslocatie: https://tweakers.net/ext/f/kVtnaDvn240nDXMYpxhkp9wB/full.png


Visual Basic:
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
Option Explicit

Sub ZoekDeKostenpost()

  Dim arrZoekterm As Variant, arrPosten As Variant
  Dim rngTekst As Range, c As Range
  Dim i As Long
  
  'instellen zoektermen en hun bijbehorende posten.
  'stop deze in een array
  arrZoekterm = ActiveSheet.Range("I1:I4").Value
  arrPosten = ActiveSheet.Range("J1:J4").Value
  'stel het bereik met te doorzoeken tekst in
  Set rngTekst = ActiveSheet.Range("A1:A6")
  
  'loop regel voor regel door de te doorzoeken tekst
  For Each c In rngTekst
    'loop door de array met zoektermen, en kijk of er één voorkomt in de tekst
    For i = LBound(arrZoekterm, 1) To UBound(arrZoekterm, 1)
      If InStr(1, c.Value, arrZoekterm(i, 1), vbTextCompare) > 0 Then
        c.Offset(0, 1).Value = arrPosten(i, 1)
      End If
    Next i
  Next c

End Sub

[ Voor 3% gewijzigd door breew op 11-07-2018 07:53 ]


Acties:
  • 0 Henk 'm!

  • Zwartkijker
  • Registratie: Juni 2007
  • Laatst online: 13:00
Bedankt voor de hulp! Ik was al bang dat het via vba moet, maar daarmee kan ik (nog) niet overweg.
Voor ik hiermee begonnen ben had ik enkel huis/tuin/keuken-kennis van spreadsheets, ondertussen al zo veel bijgeleerd. Dan kan ik ook wel wat vba uitpluizen :)

Edit: zie net dat vba niet gebruikt wordt bij Google Sheets... Is hiervoor een oplossing?

[ Voor 15% gewijzigd door Zwartkijker op 11-07-2018 12:26 ]

PSN: Zwartkijker


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zwartkijker schreef op woensdag 11 juli 2018 @ 12:18:
Edit: zie net dat vba niet gebruikt wordt bij Google Sheets... Is hiervoor een oplossing?
daarom is het wel handig om het platform te vermelden in topictitel en topicstart. ;)
Anyway, sinds april dit jaar is er google app script voor google sheets, maar wat dat wel en niet kan, geen idee. Ook zonder vba kan het, met een hulptabel of met een matrixfunctie. Je bouwt een tabel op met in de kolomkoppen het trefwoord en per rij of het trefwoord van de kolomkop gevonden is. vervolgens haal je daar met vergelijken op 'true' de eerste match uit.

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


Acties:
  • 0 Henk 'm!

  • Zwartkijker
  • Registratie: Juni 2007
  • Laatst online: 13:00
Inderdaad, daar zal ik volgende keer op letten. Bedankt voor de tip 8)

Wat je daar zegt om het zonder vba op te lossen begrijp ik wel, maar ik zou niet weten hoe ik dat om moet zetten.
De lijst die ik heb transponeren zodat de zoekwaardes in de kolomkoppen staan, maar hoe gaat het dan verder?

[ Voor 98% gewijzigd door Zwartkijker op 11-07-2018 20:01 ]

PSN: Zwartkijker


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dit is het idee:


Afbeeldingslocatie: https://tweakers.net/ext/f/pIFIubv9Bm7ForbjAmLbwiEX/thumb.png

en dit is de uitvoering als matrixformule (bv voor de vertaling van cel A1; waarbij de trefwoorden in A10:a20 staan en de vertaling in B10:B20)

code:
1
{=INDEX($B$10:$B$20;VERGELIJKEN(ONWAAR;ISFOUT(VIND.SPEC($A$10:$A$20;A1;1))))}

[ Voor 46% gewijzigd door Lustucru op 12-07-2018 08:17 ]

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


Acties:
  • 0 Henk 'm!

  • Zwartkijker
  • Registratie: Juni 2007
  • Laatst online: 13:00
Super, op die manier is het gelukt! Bedankt voor de hulp, Lustucru :)

PSN: Zwartkijker

Pagina: 1