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

Waarde zoeken in volledig werkblad

Status
Niet open voor verdere reacties.

msipower

Gebruiker
Lid geworden
22 aug 2007
Berichten
7
Hallo iedereen,

Ik hoop dat jullie mij kunnen helpen :). Ik heb 2 werkbladen:

1. 'Input' werkblad (hier plak ik Excel formulieren in die niet altijd dezelfde opmaak hebben)
2. 'Summary' werkblad (geeft een overzicht van de belangrijkste waarden van het Input-wb)

Nu bijv. "FREIGHT TERM", een waarde die ergens op het 'Input' werkblad staat. Nu ben ik op zoek naar een formule die deze waarde op het 'Input' werkblad opzoekt, en als uitkomst de cel-locatie geeft. Deze kan ik dan gebruiken i.c.m. H/V LOOKUP om de desbetreffende waarde uit te lezen (bijv. "FREE" of "NO INSURANCE").

Het probleem is alleen dat (zover ik weet) dergelijke formules altijd met een beperkte range werken en niet op een totaal werkblad kunnen zoeken...

Ik hoop dat jullie mij kunnen helpen. Alvast hartelijk bedankt! :)
 
Neem het zoeken eens op met de macrorecorder en bekijk de code.

Of probeer onderstaande macro.
Code:
Sub zoekmaar()
'
Dim zoeknaar As String
zoeknaar = InputBox("U Zoekt: ")

    Cells.Find(What:=zoeknaar, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    MsgBox ("Zoekstring " & zoeknaar & " gevonden op " & ActiveCell.Address)
End Sub

Zoekwaarde moet wel bestaan in blad, foutcontrole is hier niet ingebouwd.
 
Bedankt voor je snelle reactie :)

Nog een vraag: kan ik een dergelijke macro gebruiken in een cel (dat deze praktisch net als een formule werkt? (in een context van =MACRO1). Dat deze automatisch (net als een formule) 'uitgerekend' of 'geactiveerd' word?

(Zo ja, kan ik me verder in het macro-verhaal gaan verdiepen :))

EDIT: Ik meen dat je ook je eigen functions (formules) kunt maken in Excel, wellicht dat dit een oplossing biedt?
 
Laatst bewerkt:
Je kunt dan gebruik maken van bijv.
Code:
Worksheet_SelectionChange(ByVal Target As Range)
Hiermee kun je afhankelijk van wat je in een cel invoert een macro laten starten.
Kijk eens in de help van vba voor uitgebreidere uitleg en voorbeelden.

Op de site van wigi, hier ook zeer actief, vind je ook een alles_zoeken macro en nog veel meer interessante zaken.
 
Sub zoekmaar()
'
Dim zoeknaar As String
zoeknaar = InputBox("U Zoekt: ")

Cells.Find(What:=zoeknaar, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
MsgBox ("Zoekstring " & zoeknaar & " gevonden op " & ActiveCell.Address)
End Sub[/CODE]



Is deze macro voor jullie makkelijk om te zetten dat hij input krijgt van een functie (bijv. =ZOEKMAAR(appels). En dat 'ie als resultaat de cell aangeeft? Bvd! :)
 
Laatst bewerkt:
Dat is mogelijk ja.

Code:
Function zoekmaar(s As String) As String
    
    Dim rTemp As Range
    
    Set rTemp = Cells.Find(s, After:=Application.Caller, LookIn:=xlFormulas, LookAt:=xlPart)
    
    If rTemp Is Nothing Then
        zoekmaar = "niet gevonden"
    Else
        If rTemp.Address = Application.Caller.Address Then
            zoekmaar = "niet gevonden"
        Else
            zoekmaar = rTemp.Address(0, 0)
        End If
    End If
End Function

Wigi
 
Goed man!
Is deze functie ook aan te passen dat ie alle werkbladen afzoekt en een result geeft in trend van:

=Werkblad!C19


Ontzettend bedankt voor je hulp Wigi, kan hier heel goed mee vooruit :D
 
Goed man!
Is deze functie ook aan te passen dat ie alle werkbladen afzoekt en een result geeft in trend van:

=Werkblad!C19

Ontzettend bedankt voor je hulp Wigi, kan hier heel goed mee vooruit :D

U vraagt, wij draaien

Code:
Function zoekmaar(s As String) As String
    
    Dim rTemp As Range
    Dim ws As Worksheet
    Dim rThisCell As Range
    
    Set rThisCell = Application.Caller
    
    For Each ws In ThisWorkbook.Worksheets
    
        Set rTemp = ws.Cells.Find(s, After:=ws.Cells(1), LookIn:=xlFormulas, LookAt:=xlPart)
        
        If Not rTemp Is Nothing Then
            
            If rTemp.Address = rThisCell.Address And rTemp.Parent.Name = rThisCell.Parent.Name Then
                Set rTemp = Nothing
            Else
                zoekmaar = "=" & rTemp.Parent.Name & "!" & rTemp.Address(0, 0)
                Exit Function
            End If
        End If
        
    Next ws
       
    If rTemp Is Nothing Then zoekmaar = "niet gevonden"
    
End Function

Wigi
 
Hartelijk dank!

Wist je dat ik al jaren naar een dergelijke functie op zoek was?
Vreemd dat dit standaard niet in Excel 'ingebouwd' zit...

Nogmaals bedankt! :)
 
Graag gedaan.

Ctrl-F doet iets gelijkaardigs.

Zet de vraag nog op opgelost aub.
 
Wigi,

Handige zoekmethode, echter 1 probleem (uitgangspunt is #8).

Stel ik zet het op te zoeken woord op blad2 cel A12 terwijl het gezochte woord
ergens op blad 3 staat dan stopt de zoekopdracht toch op blad2 cel A12.
Ik zou verwachten dat de code:
Code:
  If rTemp.Address = rThisCell.Address And rTemp.Parent.Name = rThisCell.Parent.Name Then
                Set rTemp = Nothing
ervoor zou zorgen dat het zoekveld zelf wordt overgeslagen bij de zoektocht.

Doe ik hier een verkeerde aanname resp. hoe voorkom ik dat de zoekopdracht
stopt bij het opgegeven veld terwijl hij daarna nog verder zou moeten zoeken ?
 
Ik zou verwachten dat de code:
Code:
  If rTemp.Address = rThisCell.Address And rTemp.Parent.Name = rThisCell.Parent.Name Then
                Set rTemp = Nothing
ervoor zou zorgen dat het zoekveld zelf wordt overgeslagen bij de zoektocht.

Als het te zoeken woord in de formule zelf staat, werkt de code. Staat er een celverwijzing naar het te zoeken woord in de formule zelf, dan doet dit probleem zich inderdaad voor.

De oplossing zou dan kunnen zijn om altijd een bereik (celverwijzing) te vragen als argument in de formule, en geen string. En de code aanpassen door te checken op het celadres en de tabbladnaam van de celverwijzing.

Dit heeft wel tot gevolg dat de zoekstring zelf altijd in een cel moet staan, en niet zelf tussen " " kan getypt worden in de functie zelf. Al valt dat wellicht wel op te vangen met VBA-code.

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan