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

Nummers vervangen door naam

Status
Niet open voor verdere reacties.

danny147

Terugkerende gebruiker
Lid geworden
29 apr 2007
Berichten
4.744
Beste,

Graag zou ik in kolom C de nummer willen vervangen door een naam die staat op Blad2
Niet alle nummers komen voor in de lijst en sommige cellen zijn leeg

Graag in VBA code
 

Bijlagen

Laatst bewerkt:
Beste

Niet het gewenste resultaat
Stopt op rij 8 en de lege cellen mogen gewoon leeg blijven
 
vreemd, werkt bij in Excel2010 mij wel, op de "0" in de lege cellen na dan.

hierbij een nieuwe versie
 

Bijlagen

Beste Edmoor,

Liefst in VBA omdat deze verder verwerkt met de bestaande code
 
Zo?
Code:
Sub VenA()
  ar = Sheets("Blad2").Cells(1).CurrentRegion
  With Sheets("Blad1").Cells(1).CurrentRegion
    ar1 = .Value
    For j = 2 To UBound(ar1)
      For jj = 1 To UBound(ar)
        If ar1(j, 3) = ar(jj, 1) Then
          ar1(j, 3) = ar(jj, 2)
          Exit For
        End If
      Next jj
    Next j
    .Value = ar1
  End With
End Sub
 
Of deze:
Code:
Sub GetNameForNumber()
    For Each cl In Range("C2:C" & Range("A1").CurrentRegion.Rows.Count)
        With Sheets("Blad2").Range("A:A")
            Set Rng = .Find(What:=cl.Value, _
                       After:=.Cells(1, 1), _
                       LookIn:=xlValues, _
                       LookAt:=xlWhole, _
                       SearchOrder:=xlByRows, _
                       SearchDirection:=xlNext)
            If Not Rng Is Nothing Then
                Cells(cl.Row, 3) = .Range(Rng.Address).Offset(, 1)
            End If
        End With
    Next cl
End Sub
 
Laatst bewerkt:
Een iets beter/minder leesbare variant met de Find methode.:d


Code:
Sub GetNameForNumber()
  Dim f As Range
  For Each cl In Columns(3).SpecialCells(2)
    Set f = Sheets("Blad2").Columns(1).SpecialCells(2).Find(cl.Value, , , xlWhole)
    If Not f Is Nothing Then Cells(cl.Row, 3) = f.Offset(, 1)
  Next cl
End Sub

Nb. Meestal werkt code sneller met zo min mogelijk interactie met de werkbladen zelf.
 
De find methode is traag.
Code:
Sub GetNameForNumber()
Dim cl As Range, rw
  With Sheets("Blad2")
    For Each cl In Sheets("blad1").Columns(3).SpecialCells(2)
      rw = Application.Match(cl.Value, .Columns(1), 0)
      If Not IsError(rw) Then Sheets("blad1").Cells(cl.Row, 3) = .Cells(rw, 2)
    Next cl
  End With
End Sub
 
Beste,

Allen bedankt voor het zoeken

Kan uit 5 codes kiezen
- eentje lukte er niet bij mij
- UBound snap ik niet zo goed
- 2 Met Find functie
- Eentje zonder Find functies

Van snelheid bijna allemaal even snel
Aan mij de keuze om te bepalen :D:P
 
Ubound is het hoogste element van een array ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan