Excel VBA vraag

Status
Niet open voor verdere reacties.

MartinHelleman

Gebruiker
Lid geworden
9 apr 2012
Berichten
13
Ik heb een excel bestand waarin vanuit een ander programma Excel gegevens worden geïmporteerd t.b.v. taken voor medewerkers.
In de geïmporteerde gegevens staan geen Email adressen.
Nu heb ik in een andere werkblad de werknemer nummer met Emails staan.

Nu wil dat in het werkblad met de geïmporteerde data het Emailadres komt te staan van de desbetreffende medewerker waarvoor de taak bedoeld is.

Ik heb al verschillende YouTube filmpjes bekeken maar krijg het niet voor elkaar.

Kan iemand mij helpen?

Ik heb een voorbeeldbestand bijgevoegd met data.

Bekijk bijlage LookUp Data.xlsm
 
Laatst bewerkt:
Daar is geen VBA voor nodig.
Deze in D5 en dan doortrekken (of dubbelklik op het dikke vierkantje rechts onderin D5):
Code:
=VERT.ZOEKEN(INTEGER(C5);LOOKUP!$A$2:$B$81;2;ONWAAR)

NB:
Een aantal medewerkernummers in het blad DATA komen niet voor in het blad LOOKUP.
Daar zal de formule dan #N/B op terug geven.
 
Missende werknemers

Goed opgemerkt:thumb:, ik heb de bijlage aangepast.

De functies VLOOKUP INDEX MATCH zijn bij mij bekend maar ik krijg het d.m.v. VBA niet voor elkaar.

In de echte werkmap kunnen de gebruikers geen gegevens aanpassen of formules invoeren.

Grt. Martin
 
En hoe moeten die gebruikers de VBA routine daarvoor dan activeren?
D.m.v. een knop? Of heb je daar een ander idee voor?

Test deze eens:
Code:
Sub GetMailAddress()
    Dim Drow As Long
    Dim Lrow As Long
    Dim c As Object
    Dim i As Long
    
    With Sheets("DATA")
        Drow = .Cells(.Rows.Count, "C").End(xlUp).Row
    End With
    
    With Sheets("LOOKUP")
        Lrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    
    For i = 5 To Drow
        With Sheets("LOOKUP").Range("A1:A" & Lrow)
            Set c = .Find(Sheets("DATA").Cells(i, 3), LookIn:=xlValues)
            If Not c Is Nothing Then
                Sheets("DATA").Cells(i, 4) = .Cells(c.Row, 2)
            End If
        End With
    Next i
End Sub
 
Laatst bewerkt:
Volgens mij is het voorbeeldbestand nog steeds niet compleet.

Code:
Sub VenA()
With Range("D5")
  .FormulaR1C1 = "=VLOOKUP(INT(RC[-1]),LOOKUP!R2C1:R81C2,2,FALSE)"
  .AutoFill Range("D5:D" & Cells(Rows.Count, 1).End(xlUp).Row)
End With
End Sub
 
Excel vraag

Ik ben op dit moment even weg, zodra ik thuis kom controleer ik of het werkt.

In ieder geval bedankt voor jullie hulp.

Grt Martin
 
Beste edmoor,

macro getest en hij doet precies wat ik wil.

Beste VenA,

macro getest en hij doet het ook.

Heel erg bedankt voor het delen van jullie kennis:thumb:

Grt. Martin
 
Beste Edmoor,

kan je een toelichting geven hoe jou macro werkt, met name in het ?:(
Het lukt mij niet om hem in mijn werkblad te gebruiken.

Stel dat (in sheet DATA) de emails in kolom AE moeten komen en de werknemers staan in kolom D.

Grt. Martin
 
Code:
Sub GetMailAddress()
Dim Drow As Long
Dim Lrow As Long
Dim c As Object
Dim i As Long

With Sheets("DATA")
Drow = .Cells(.Rows.Count, "C").End(xlUp).Row
End With

With Sheets("LOOKUP")
Lrow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

For i = 5 To Drow
With Sheets("LOOKUP").Range("A1:A" & Lrow)
Set c = .Find(Sheets("DATA").Cells(i, 3), LookIn:=xlValues)
If Not c Is Nothing Then
Sheets("DATA").Cells(i, 4) = .Cells(c.Row, 2)
End If
End With
Next i
End Sub

Je plaatst deze VBA-code in je werkblad "data". dan voegt het de emailadressen toe. Mocht je de e-mail-adressen in kolom E willen zetten, dan maak je van de 4 een 5 in volgende regel

Code:
Sheets("DATA").Cells(i, 4) = .Cells(c.Row, 2)

De 4 staat voor de vierde kolom.

Als je de medewerkers in kolom D hebt staan, zal je de C in de D moeten wijzigen

Code:
Drow = .Cells(.Rows.Count, "D").End(xlUp).Row
 
Laatst bewerkt:
Dat lijkt mij niet zo'n complexe aanpassing. Maak van de tabel in het blad 'LOOKUP' een echte tabel.

Code:
Sub VenA()
With Range("AE5")
  .FormulaR1C1 = "=VLOOKUP(--RC[-27],Table1,2,0)"
  .AutoFill Range("AE5:AE" & Cells(Rows.Count, 1).End(xlUp).Row)
End With
End Sub

Het kan zijn dat je de naam van Table1 even aan moet passen.
 
@alphamax

Bedankt voor de tip. Ik vroeg me al af hoe het moest.
 
Maak van beide werkbladen van de gegevens een 'intelligente' tabel.

zorg dat medewerkergegevens als tekst opgemaakt zijn.

gebruik dan
PHP:
=INDEX(Table1[Email];MATCH([@Medewerker];Table1[Medewerker];0);1)
 
Beste SjonR,

bedankt voor je uitleg het is hiermee gelukt.:d

Beste VenA,

ook jou code werkte weer zoals gehoopt.:eek:

Beste snb,

ik begreep niet precies hoe ik jou code moest gebruiken, misschien kan je het me uitleggen.:confused:
Ben er wel benieuwd naar.

Met vriendelijke groet,

Martin
 
Exel VBA vraag

Beste snb,

dit is een handige manier zeg, die ga ik vaak gebruiken in mijn werkbladen.

het blijkt wel weer dat vele wegen naar Rome wijzen.

ik heb er weer een paar gevonden dankzij iedereen die op mijn vraag heeft gereageerd.

dus nogmaals iedereen bedankt voor het delen van jullie kennis.

helemaal TOP!:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan