Verticaal zoeken vanuit meerdere posities in vba

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
947
Beste Helpmij'ers,

Ik gebruik sinds geruime tijde een vba-code om een bepaalde waarde op te zoeken vanuit een andere sheet, dit gaat overigens prima. Het enige nadeel is dat ik altijd in dezelfde kolom (Kolom G) moet staan. Nu komt het ook voor dat de cursor in bepaalde gevallen in een andere kolom staat en dan werkt de code niet.

De huidig code is:
Code:
Range("G" & Target.Row).Offset(, 20).Value = Sheets("Persoonlijke instelling").Columns(12).Find(Target.Value).Offset(, -1).Value 'Saldo zoeken

Alvast bedankt.

Robert
 
De code zal meer zijn dan alleen die ene regel.
De regel die je laat zien is niet verantwoordelijk voor het feit dat je in kolom G moet staan zoals je zegt.
 
Dat klopt, dit is de regel die de waarde vanuit kolom G zoekt in een andere sheet. Ik vind het vreemd waarom dan ook de cursor in kolom G moet staan en niet willekeurig in een andere kolom mag staan. Eerder gebruikte ik de volgende code:

Code:
Target.Offset(, 20).Value = Sheets("Persoonlijke instelling").Columns(12).Find(Target.Value).Offset(, -1).Value 'Saldo zoeken

Hier begrijp ik dat het systeem er vanuit gaat in welke kolom je op dat moment staat en een enter geeft. Daarom heb ik "Target" ook gewijzigd in "Range("G" & Target.Row)", alleen is dan het effect nog steeds hetzelfde.
 
Je zoekt in kolom 12 (L) naar target.value van het andere blad.
Stel dat target.value niet gevonden wordt geeft dat een foutmelding.

Zo los je dat op.

Code:
set c = Sheets("Persoonlijke instelling").Columns(12).Find(Target.Value).Offset(, -1).Value 'Saldo zoeken
if not c is nothing then Range("AA" & Target.Row).Value = c.value
 
Bedankt voor jouw antwoord, helaas werkt deze (nog) niet.

Ik denk dat het beter is dat ik de formule eerst benoem zoals die in kolom AA staat.

In kolom AA staat:
Code:
=VERT.ZOEKEN(G14;KIEZEN({1\2};'Persoonlijke instelling'!L9:L11;'Persoonlijke instelling'!K9:K11);2;ONWAAR)

Bovenstaande code is van toepassing op alle regels in kolom AA en G14 is als voorbeeld voor regel 14 maar heeft ook betrekking op alle regels.
Misschien dat het nu lukt om hier een VBA-code van te maken.
 
Laatst bewerkt:
Beter?
Code:
Set c = Sheets("Persoonlijke instelling").Columns("K:L").Find(Target.Value) 'Saldo zoeken
If Not c Is Nothing Then Range("AA" & Target.Row).Value = c.Offset(, 2)
 
Sorry, het gaat nog steeds niet goed. Ik zal even een voorbeeldbestand maken, deze is veel te groot.
 
Ik heb een voorbeeldbestand gemaakt en hoop dat het nu lukt.
 
Laatst bewerkt:
Dat is een voorbeeld met persoonlijke gegevens.
Daar zal iemand niet blij van worden.
 
Gelukkig was dit grotendeels een fake voorbeeld, ik heb toch maar even het e.e.a. verwijderd. In ieder geval bedankt voor jouw opmerkzaamheid.
 

Bijlagen

Je gebruikte wel een hele ingewikkelde formule.
Daarvoor was Index en Vergelijken veel eenvoudiger geweest.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G13:G1500")) Is Nothing Then
 Application.EnableEvents = False
  Set c = Sheets("Persoonlijke instelling").Columns("L").Find(Target.Value) 'Saldo zoeken
  If Not c Is Nothing Then Range("AA" & Target.Row).Value = c.Offset(, -1)
 Application.EnableEvents = True
End If
End Sub
 
Bedankt voor jouw antwoord.

Deze formule werkt alleen wanneer ik met de cursor in kolom G sta en niet wanneer ik in een willekeurige andere kolom sta (wel dezelfde regel), hetgeen wel de bedoeling is.

Jouw formule werkt, voor zover ik kan beoordelen, op dezelfde wijze als de code die ik in het begin van deze Topic al aangaf.
Code:
Range("G" & Target.Row).Offset(, 20).Value = Sheets("Persoonlijke instelling").Columns(12).Find(Target.Value).Offset(, -1).Value 'Saldo zoeken

Hopelijk is er toch een mogelijkheid.
 
Ik begrijp niet wat je bedoelt met dat het alleen werkt als je met de cursor in kolom G staat.
De Private Sub Worksheet_Change(ByVal Target As Range) wordt geactiveerd bij een wijziging in elke willekeurige cel op het werkblad.
Het maakt dus niet uit in welke kolom of regel je staat.
 
Bij welke wijziging in wat voor kolom wil je een resultaat zien in welke cel?
 
In kolom AA zou ik graag het resultaat willen zien.

Het gaat erom dat ik per boeking het banksaldo (van dat moment) in kolom AA genoteerd wil hebben. Het actuele banksaldo staat in het werkblad "Persoonlijke instelling" in kolom K. Maar omdat het soms ook om een kassaldo kan gaan, zal het systeem vanuit kolom G van het Mutatieblad moeten kijken of het om de bank of kas gaat.

Mocht je meer informatie nodig hebben, dan hoor ik het graag.

Alvast heel erg bedankt.
 
In antwoord op Edmoor.

Ik heb de code van Harry getest en die deed het prima wanneer ik in kolom G sta, echter wanneer ik in een willekeurige andere kolom sta (van dezelfde regel), dan werkt de code niet. Eigenlijk doet de code van Harry precies hetzelfde als de code die ik in het begin heb gepost.
 
Je wilt altijd het banksaldo ongeacht welke keuze je hebt gemaakt in kolom G?
 
Het actuele bank- of kassaldo dient vermeld te worden in kolom AA. In kolom G staat of het om bank of kas gaat, daarom is deze kolom van belang.
 
Als je een keuze hebt gemaakt in kolom G verkrijg je automatisch het te verwachten saldo van Bank of Kas.
 
Dat klopt, alleen moet ik dan altijd in kolom G staan. In de praktijk vul ik eerst bank of kas en dan de bedragen. Op dat moment weet het systeem wat het saldo is. Daarom het verzoek dat het systeem zoekt op een bepaald moment te weten:
Code:
If (Range("Q" & Target.Row) <> "" Or Range("S" & Target.Row) <> "") And Range("AA" & Target.Row) = "" Then
vanaf hier komt dan de code dat hij gaat zoeken naar het betreffende saldo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan