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

Zoekactie niet volledig met Programmacode, met Ctrl+F wel

Status
Niet open voor verdere reacties.

nonono

Gebruiker
Lid geworden
28 jan 2009
Berichten
289
Met de programmacode worden de kolommen A, B en C doorzocht.
“Waarde” 100 opgenomen in kolommen A en C.
Starten in kolom A (A1) dan worden niet alle waarden in kolom C gevonden.
Starten in kolom C (C1) dan wordt de waarde in kolom A niet gevonden.
Ctrl+F dan worden de waarden zowel in kolom A als in kolom C gevonden.
Wat gaat er mis?

Bijlage: Produkt2(cobbe).xls

Bekijk bijlage Produkt2(cobbe).xls
 
De code zoekt naar een (deel van een) tekst. In cel C24 is 100 niet als tekst ingegeven.
Alle overige gegevens zijn wel als tekst ingegeven.
In dien er een ' voor de gegevens in een cel staat, dan wordt dit als tekst beschouwd.
Indien er a100 in een cel staat eveneens.
Enkel 100 ingeven wordt niet als tekst herkend. Als je er '100 van maakt dan wordt de de waarde wel gevonden
 
Volgens mij klopt deze redenering niet.
In het voorbeeld heb ik op het werkblad aangegeven, dat in kolom C zowel “c100” als “100” gevonden wordt als de zoekactie start aan het begin van kolom C.
Als de zoekactie begint in kolom A, dan wordt wel “c100” gevonden, maar “100” niet.
Waarom in het ene geval wel en in het andere geval niet?
 
Vervang het huidige door onderstaande
Code:
strfind = "*" & InputBox("Zoek Code / Produkt") & "*"
 If strfind = "**" Then Exit Sub
 lAant = Application.WorksheetFunction.CountIf(Columns("A:C"), strfind)
 
Bij vervanging met nieuwe code blijft probleem bestaan.
Zoekwaarde 100:
Zoekactie beginnen vanaf cel A1, dan wordt cel C24 niet gevonden (resultaat: alleen cellen met tekst).
Zoekactie beginnen vanaf cel C1, dan wordt cel A23 niet gevonden (resultaat: zowel tekst als numeriek).
 
Probeer eens om het gebied A:C te formatteren als tekst (alvorens iets in te vullen !!)
 

Bijlagen

De reden dat het fout gaat is omdat de functie aantal.als een verkeerd resultaat weergeeft. Probeer de functie maar eens op je werkblad, met jokertekens geeft hij 5 als resultaat (tekst), zonder jokertekens 1 (getal). Omdat verderop in de macro gebruik gemaakt wordt van dit aantal om de knoppen te sturen stopt de procedure dus 1X te vroeg.
 
Reaktie op post #7.
Voor mij nog geen Hoera.
De zoekrange uitgebreid naar (“A:I”).
Zoekwaarde 100:
Start in A1, dan wordt D27 niet gevonden
Start in C1, dan wordt A29 niet gevonden
Start in D1, dan wordt C27 niet gevonden

Starten in C1 resp. D1 dan wordt ook de numerieke waarden gevonden. In beide gevallen wordt echter een laatste “tekst” cel niet gevonden.

Bekijk bijlage Produkt3(cobbe).xls
 
Als ik de joker (*) gebruik, dan worden alle velden doorlopen en wordt alles gevonden. Maar dat is een beetje te veel van het goede.
Dan blijft bij de vraag: hoe kan de functie aangepast worden, zodat niet te vroeg gestopt wordt?
 
Ik heb de zoekfunctie ALTIJD laten starten in A1 en heb in J2 het aantal gevonden waardes gezet.
Nu selecteert hij wel alle gevonden gegevens. Nu stopt hij bij de laatst gevonden waarde.
Maar heb wel het te doorzoeken bereik als tekst opgemaakt.

Cobbe
 
Wanneer het bereik als tekst geformateerd is, dan is het niet bruikbaar.
De cellen worden gevuld met waarden uit een ander werkblad, waarbij ook numerieke waarden gekopieerd worden.
Jammer.
 
De ultieme poging.
Deze zoekt enkel in de actieve kolom ( wat ook maar nodig is, denk ik zo)
En heb de zoekfunctie gesplitst in string en numeric.

Test maar eens.

Cobbe
 
Het probleem blijft, dat de kolommen A en C, tekst waarden bevatten.
Op het moment, dat ik waarden kopieer vanuit een ander werkblad, dan gaat de “numerieke” waarde verloren.
Helaas. In ieder geval zeer bedankt voor de moeite, die je gedaan hebt!

Groet Nono :thumb:
 
EUREKA
Vervang huidige door
Code:
strfind = InputBox("Zoek Code / Produkt")
 If strfind = "" Then Exit Sub
 For Each cl In Sheets("Blad1").UsedRange
    If InStr(1, cl, strfind) Then lAant = lAant + 1
Next
 
kant en klare functie van Pearson

Code:
Sub test()

  Dim SearchRange As Range
  Dim FindWhat As Variant
  Dim FoundCells As Range

  Set SearchRange = Sheets("blad1").Columns("A:C")
  FindWhat = "100"

  Set FoundCells = FindAll(SearchRange:=SearchRange, _
                           FindWhat:=FindWhat, _
                           LookIn:=xlValues, _
                           LookAt:=xlPart, _
                           SearchOrder:=xlByColumns, _
                           MatchCase:=False)

  If Not FoundCells Is Nothing Then
    FoundCells.Interior.ColorIndex = 4
  End If

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' modFindAll
' By Chip Peasron, chip@cpearson.com. www.cpearson.com
' 24-October-2007
' This module is described at www.cpearson.com/Excel/FindAll.aspx
' Requires Excel 2000 or later.
'
' This module contains two functions, FindAll and FindAllOnWorksheets that are use
' to find values on a worksheet or multiple worksheets.
'
' FindAll searches a range and returns a range containing the cells in which the
'   searched for text was found. If the string was not found, it returns Nothing.

' FindAllOnWorksheets searches the same range on one or more workshets. It return
'   an array of ranges, each of which is the range on that worksheet in which the
'   value was found. If the value was not found on a worksheet, that worksheet's
'   element in the returned array will be Nothing.
'
' In both functions, the parameters that control the search have the same meaning
' and effect as they do in the Range.Find method.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function FindAll(SearchRange As Range, _
                 FindWhat As Variant, _
                 Optional LookIn As XlFindLookIn = xlValues, _
                 Optional LookAt As XlLookAt = xlWhole, _
                 Optional SearchOrder As XlSearchOrder = xlByRows, _
                 Optional MatchCase As Boolean = False) As Range
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' FindAll
' This searches the range specified by SearchRange and returns a Range object
' that contains all the cells in which FindWhat was found. The search parameters to
' this function have the same meaning and effect as they do with the
' Range.Find method. If the value was not found, the function return Nothing.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  Dim FoundCell As Range
  Dim FirstFound As Range
  Dim LastCell As Range
  Dim ResultRange As Range

  With SearchRange
    Set LastCell = .Cells(.Cells.Count)
  End With
  'On Error Resume Next
  On Error GoTo 0
  Set FoundCell = SearchRange.Find(what:=FindWhat, _
                                   after:=LastCell, _
                                   LookIn:=LookIn, _
                                   LookAt:=LookAt, _
                                   SearchOrder:=SearchOrder, _
                                   MatchCase:=MatchCase)

  If Not FoundCell Is Nothing Then
    Set FirstFound = FoundCell
    Set ResultRange = FoundCell
    Set FoundCell = SearchRange.FindNext(after:=FoundCell)
    Do Until False                                         ' Loop forever. We'll "Exit Do" when necessary.
      If (FoundCell Is Nothing) Then
        Exit Do
      End If
      If (FoundCell.Address = FirstFound.Address) Then
        Exit Do
      End If
      Set ResultRange = Application.Union(ResultRange, FoundCell)
      Set FoundCell = SearchRange.FindNext(after:=FoundCell)
    Loop
  End If

  Set FindAll = ResultRange

End Function
 
post #15: Inderdaad EUREKA!!!
Het werkt prima zonder problemen. Bedankt.

Groet Nono :thumb::thumb:
 
N.a.v. post #16.
Dit werkt, maar heel anders. Hierbij wordt het resultaat in één keer getoond.
Met methode Warme Bakkertje scroll je door het werkblad en bij een gevonden resultaat kun je dan een vervolgactie uitvoeren. Ik prefereer de EUREKA oplossing.
In ieder geval bedankt.

Groet Nono :)
 
ik had enkel een methode gegeven om alle waarden te zoeken, de rest moest er nog bij gebouwd worden. Zie bijlage, de knop "volgende" meot je anders ook maar laten verdwijnen wanneer nodig
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan