• 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.

Cellen makkelijk vullen

Status
Niet open voor verdere reacties.

jellevanbruggen

Gebruiker
Lid geworden
15 jul 2009
Berichten
28
Ik weet niet of het kan maar:

in de rijen 2 t/m 39 heb ik een aantal gegevens staan in 3 tabellen (verschillende talen). Nu zou het mooi zijn als ik in A42, alleen maar wat getallen hoef te typen en dat dan in B, C en D42 automatisch de koppeling wordt gemaakt naar de omschrijving.

Het klinkt heel onduidelijke maar ik hoop dat het voorbeeld bestand genoeg zegt

Bekijk bijlage voorbeeld.xls
 
Ik zat aan iets te denken als een Vlookup, maar met die getallen die je scheidt met een komma gaat dat niet. Zou je getallen niet in aparte cellen kunnen intypen? Andere excel goeroe's?
 
jellevanbruggen,

Met vert.zoeken kan je maar op 1 ding zoeken.
In cel B42 de volgende formule.
Code:
=VERT.ZOEKEN(A42;A2:D39;2;0)& " - " & VERT.ZOEKEN(A42;A2:D39;3;0)& " - " & VERT.ZOEKEN(A42;A2:D39;4;0)
Vul een getal in en zie het resultaat.

Of zo als in de file
 

Bijlagen

  • voorbeeld(EA).xls
    22 KB · Weergaven: 19
Laatst bewerkt:
Code:
Sub tst()
    sq = Range("A44")
    j = 1
    For c = 2 To 4
        For i = 0 To UBound(Split(sq, ","))
            msg = msg & Sheets("Blad1").Columns(1).Find(CInt(Split(sq, ",")(i)), , xlValues, xlWhole).Offset(, j).Value & ", "
        Next
        msg = Left(msg, Len(msg) - 2)
        Cells(44, c) = msg
        msg = ""
        j = j + 1
    Next
End Sub
 
Bij wijziging van cel A42:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("a42")) Is Nothing Then
waarde = Split(Range("a42").Value, ",")
For x = 2 To 4
For Z = 0 To UBound(waarde)
y = y & Cells(waarde(Z) + 1, x).Value & ","
Next
Cells(42, x).Value = y
y = ""
Next
End If
End Sub
 
Zie bijlage. De te wijzigen cel is A42.
 

Bijlagen

  • voorbeeld_Jelle.xls
    44 KB · Weergaven: 22
Code:
Sub tst()
    sq = Range("A44")
    j = 1
    For c = 2 To 4
        For i = 0 To UBound(Split(sq, ","))
            msg = msg & Sheets("Blad1").Columns(1).Find(CInt(Split(sq, ",")(i)), , xlValues, xlWhole).Offset(, j).Value & ", "
        Next
        msg = Left(msg, Len(msg) - 2)
        Cells(44, c) = msg
        msg = ""
        j = j + 1
    Next
End Sub

Ik heb de bovenstaande code gebruikt, deze kon ik toch het makkelijkste aanpassen mbt tot een aantal variabelen (meer rijen en meer cellen) en het werkt nu goed.
Ik vroeg me alleen af of het makkelijk uit te leggen is hoe de code is opgebouwd en wat het allemaal betekend.
 
De split functie verdeeld de inhoud van (in dit geval cel A44).
De komma is het scheidingsteken.
Vervolgens wordt elk gedeelte in de A-kolom gezocht en het resultaat in msg geplaatst.
Zodra dit klaar is, dan wordt msg in de volgende cel geplaatst.
Hierna wordt in de C- en D-kolom naar de inhoud van cel A44 gezocht.

Dus:
In A-kolom wordt gezocht naar achtereenvolgens 1, 3, 9 en 12 en de bijbehorende waardes in de B-kolom worden in B44 geplaatst.
Vervolgens wordt in de A-kolom opnieuw gezocht naar 1, 3, 9 en 12 en de bijbehorende waardes van de C-kolom worden in C44 geplaatst.
etc.

Met vriendelijke groet,


Roncancio
 
@ Roncancio
Bedankt voor heterschaffen v/d verhelderende uitleg aan Jelle :thumb:

@ Jelle
Daarom had ik in het voorbeeld dat ik gepost had ook gekozen voor deze
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$42" Then
    For c = 2 To 4
        For i = 0 To UBound(Split(Target, ","))
            msg = msg & Cells(Split(Target, ",")(i) + 1, c).Value & ", "
        Next
        msg = Left(msg, Len(msg) - 2)
        msg = msg & "|"
    Next
    Cells(42, 2).Resize(, 3) = Split(msg, "|")
    End If
End Sub
1. De code wordt automatisch uitgevoerd na het invullen van A42. Je moet dus niet meer handmatig de macro starten
2. Deze code doet in principe hetzelfde als de eerdere, met dit verschil dat de resultaten eerst worden verzameld in het werkgeheugen en daarna in 1 schrijfbewerking naar het werkblad worden geschreven, terwijl je met de eerdere code 3 schrijfbewerkingen hebt. Dit resulteert dan weer in snelheidswinst bij uitvoering.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan