Gedeelte tekst vergelijken met lijst met woorden

Status
Niet open voor verdere reacties.

henkhoogerbrug

Gebruiker
Lid geworden
25 sep 2008
Berichten
107
Ik heb in Word een tabel (met 1 rij, zelfs geen kolomkoppen) met daarin een cel met contactgegevens van de projectmanager.
Bijv. Cel 14 van de tabel bevat de volgende contactgegevens (nr.'s staan voor de regelnr.'s):
1.Stadsdeel="Centrum (tram)" (of stadsdelen (="Centrum / Oost (tram)"), project kan in meerdere stadsdelen zijn)
2.Naam="Jansma"
3.
4.Tel.nr.="0123456789"

Ik zou de eerste regel kunnen nemen, maar soms staat daar ook info (in het voorbeeld is dat "(tram)") op die niet met het stadsdeel te maken heeft (en ik wil de zoek-/vergelijkfunctie op meerdere cellen toepassen).

Ik heb ook een lijst met stadsdelen (bijv. "Centrum", "Noord", "Oost", "Zuid", "West").


De vraag is nu:
Ik wil een variabele Stadsdeel declareren die uiteindelijk gevuld moet worden met een waarde uit de lijst met beschikbare stadsdelen (of meerdere waarden).
Ik dacht eerst de lijst met stadsdelen in een array te zetten, maar hoe kan ik zoeken/vergelijken in een array?

Code:
Dim Stadsdelen As Variant
Stadsdelen = Array("Centrum", "Noord", "Oost", "Zuid", "West")

Volgens het voorbeeld zou de macro dus het volgende moeten doen:
Tekst = "Centrum (tram)"
Vergelijk dit met de eerste waarde van de Array -> is er een overeenkomst dan moet de variabele Stadsdeel gevuld worden met de eerste waarde van de Array. Is er geen overeenkomst, dan moet de Tekst vergeleken worden met de tweede waarde van de Array, etc.

Ik kom er niet ut hoe ik dit moet doen in VBA, hopelijk weet iemand het?
 
Ik kom er niet ut hoe ik dit moet doen in VBA, hopelijk weet iemand het?

Met een For Each ... Next structuur kan je een lus maken doorheen de array. Aangezien die maar 4 elementen telt, en geen duizenden of zo, is dit vlug gedaan in code.

Wigi
 
Code:
sq=split("Centrum|Noord|Oost|Zuid|West","|")
With activedocument.tables(1)
  for j=1 to .rows.count
    for jj=0 to ubound(sq)
      if instr(.cell(j,1),sq(jj))>0 
        then .cell(j,1)=sq(jj)
        exit for
     end if
    Next
  next
end with
 
Wigi en SNB bedankt voor jullie reacties.
Omdat ik nog niet zo heel erg ervaren ben met VBA heb ik gekozen voor de optie van Wigi.

Code van SNB ziet er ook goed uit, maar als er later nog een keer vragen over komen, dan ben ik bang dat het te lang duurt voordat ik weer weet hoe die code werkt...

Ik heb nu de volgende code:

Code:
Stadsdelen = Array("Westpoort", "Centrum", "Noord", "Oost/Watergraafsmeer")

For Each i In Stadsdelen
    If i = Cell(14) Then
        Stadsdeel = i
        Exit For
    End If
Next

Cell(14) verwijst naar de inhoud van cel 14 (waarin dus de naam van het stadsdeel voorkomt). Aan het begin van de macro wordt deze variabele gevuld via een array, dus gegevenstype variant.

Hoe kan ik nu het If-statement zo maken dat de tekst niet exact overeen hoeft te komen? Ik heb al geprobeerd om * voor en achter Cell(14) te plaatsen, maar dat werkt niet.
Heeft dat ermee te maken dat variabele Cell(14) van het type variant is?
Hoe kan ik dit oplossen?
 
dat werkt inderdaad, alleen loop ik dan verderop in de code vast. ik heb daar namelijk een andere array:

Code:
Cellen = Array("CocuwoNr", "Stadsdeel", "StartWenstrace", "SoortWerk")
Celteksten = Array(Cocuwonr, Stadsdeel, StartWenstrace, SoortWerk)

For Each CelNaam In Cellen
    xlApp.Application.Range(CelNaam).Value = Celteksten(i)
    i = i + 1
Next

Met array Cellen worden alle bereiken in Excel aangegeven.
Met array Celteksten wordt de inhoud van die cellen aangegeven.

Volgens mij loopt het fout door het gebruik van InStr().
 
Waarom gebruik je i terug?

En staat de i+1 niet op een verkeerde plaats?

Wigi
 
de i = i + 1 staat op de goede plaats, ik wil namelijk in de array Celteksten ook steeds één plaats opschuiven.

Ik heb er nu onderstaande code voor in de plaats gezet en dat werkt wel goed (als ik de ..+1 vergeet dan krijg ik in iedere cel hetzelfde te zien).

Code:
Cellen = Array("CocuwoNr", "Stadsdeel", "StartWenstrace", "SoortWerk")
Celteksten = Array(Cocuwonr, Stadsdeel, StartWenstrace, SoortWerk)

For Each CelNaam In Cellen
    xlApp.Application.Range(CelNaam).Value = Celteksten(Cel_tekst)
    Cel_tekst = Cel_tekst + 1
Next

Of is het in dit geval beter om met meerdere dimensies te werken in een array? Zoals je aan de omschrijvingen kunt zien is de volgorde ook erg belangrijk.

(voor de test heb ik de array klein gehouden, er komen nog ongeveer 20 waarden bij)
 
Meerdere dimensies zeker, maar ik zou dit in een (verborgen) tabblad in het bestand zetten.

Dat is veel flexibeler naar onderhoud van de code toe, en ook gemakkelijker om code voor te schrijven.

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan