Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Find statt Formel nach Wert suchen lassen


Betrifft: Find statt Formel nach Wert suchen lassen von: Simon
Geschrieben am: 12.09.2019 07:22:59

Hallo ihr,

ich habe ein Problem (zumindest denke ich dass es das ist).

Ich habe eine Urlaubsdatei, in dieser steht in der zweiten Zeile ein Datum.

Bisher stand dies in einem absoluten Wert da, also z.B. 01.01.2019.
Ich habe die Datei aber abgeändert, sodass sich die Tage jetzt über eine Formel generieren und ich nur einmal das Jahr eingeben muss.
Jetzt steht natürlich in der Zelle als Wert z.B. "=A3+7", auch wenn 08.01.19 angezeigt wird.

Mittels VBA habe ich bisher auf Eingabe ein bestimmtes Datum aus einer Eingabebox (Textbox 1) suchen lassen und zwar in den Bättern Januer - Dezember (1-12):

         For i = 1 To 12
            Set bereich = Workbooks(wkbName).Sheets(i).Rows(2).Find(CDate(TextBox1.Value), Lookat:= _
         xlWhole)
            If Not bereich Is Nothing Then
         
und danach mit dem Ergebnis weiter gearbeitet.

Jetzt findet er allerdings kein Ergebnis mehr, was offenbar daran liegt, dass er mit find die Formel ausliest.

Bereich ist als Range definiert, weil ich mit dem Wert später weiterarbeiten muss.

Kann mir jemand helfen und sagen wie ich nach den angezeigten Werten und nicht den Zellwerten suchen kann?

Liebe Grüße und tausend Dank schon mal!
  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712576.html
Geschrieben am: 12.09.2019 07:32:44

Hallo Simon,

versuchs mal mit lookin xlvalues

Set bereich = Workbooks(wkbName).Sheets(i).Rows(2).Find(CDate(TextBox1.Value), _
        LookIn:=xlValues, Lookat:=xlWhole)
Gruß Werner
  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712615.html
Geschrieben am: 12.09.2019 09:41:47

Hallo Werner,

vielen Dank für den Ratschlag, leider hat dies nicht zum Erfolg geführt. Ich bin langsam auch am Ende woran es liegen könnte

  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712631.html
Geschrieben am: 12.09.2019 10:19:33

Moin
find hat so seine Schwierigkeiten um ein Datum zu finden. Nutz am besten Match.

Dim i As Long
     Dim a As Variant
      For i = 1 To 12
       a = Application.Match(CLng(DateValue(TextBox1)), Workbooks(wkbName).Worksheets(i).Rows(2), 0)
         If IsNumeric(a) Then
          MsgBox "Datum vorhanden"
          Exit For
         Else
          MsgBox "Datum nicht vorhanden"
         End If
      Next

Nur am Rande.
wobei bei 12 Blaettern keine Schleife brauchst. 1. = Januar 2. = Februar usw.
Da koennte man auch den Monat aus dem Textboxdatum nehnem.
gruss hary
  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712645.html
Geschrieben am: 12.09.2019 10:59:27

Hallo Hary,

danke schon mal für eine Lösung die klingt sehr vielversprechend.

Ich habe nur das Problem, dass er mault, dass die Typen unverträglich sind.
"Bereich" ist bei mir als Range definiert, weil ich später damit weiter arbeiten muss.

Hier mal die erste volle Routine:

    
    'Monat durchsuchen nach Datum durchsuchen
    
    For i = 1 To 12
       Set bereich = Workbooks(wkbName).Sheets(i).Rows(2).Find(CDate(TextBox1.Value), Lookat:= _
    xlWhole)
       If Not bereich Is Nothing Then
       
       'Nach Urlaub suchen und eintragen
       
       For d = 1 To 41
       Set Ergebnis = bereich.EntireColumn.Find("u", Lookat:=xlWhole)
       If Not Ergebnis Is Nothing Then
        ErstesErgebnis = Ergebnis.Address
       Do
         Set Urlaub = Workbooks(wkbName).Sheets(i).Cells(Ergebnis.Row, 1)
        With Tabelle1
             Z = 3
    nochmalUrlaub:
                If .Cells(58, Z) = "" Then
                    .Cells(58, Z) = Urlaub.Value
                    
                    Else
                     Z = Z + 1
                     GoTo nochmalUrlaub
                End If
            
        End With
        
        Set Ergebnis = bereich.EntireColumn.FindNext(Ergebnis)
    
        Loop While Ergebnis.Address <> ErstesErgebnis
                Exit For
            End If
        Next d
    
    
Er sucht erst nach dem Datum, fährt dann die Spalter runter und sucht nach "u" für Urlaub. Daraus liest er dann später den Namen aus, der in Spalter A steht.

Und da liegt mein Problem, da brauche bereich ja später noch und da eben als Range :/

Weiß nicht ob du da ne Lösung hast?



Liebe Grüße und Danke schon mal!
  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712653.html
Geschrieben am: 12.09.2019 11:17:16

Moin
Die Variabele a gibt bei Treffer die Spaltennummer zurueck, mit der du arbeiten kannst.
in etwa so:
Set Ergebnis = Workbooks(wkbName).Sheets(i).Column(a).Find("u", Lookat:=xlWhole)

bin unterwegs
gruss hary

  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712718.html
Geschrieben am: 12.09.2019 15:48:58

Hallo Hary,

tausend Dank schon mal, er findet das Datum, das passt.

Bei der Zeile

  Set Ergebnis = Workbooks(wkbName).Sheets(i).Column(a).Find("u", Lookat:=xlWhole)
  
von dir spuckt er mir allerdings "Objekt unterstützt diese Eigenschaft oder Methode nicht" aus.

Ergebnis ist auch als Range definiert.

Ich kenne mich mit der Match Methode allerdings auch wenig aus, hast du ne Idee woran das liegen könnte?

Liebe Grüße und nochmal tausend Dank für alles bisher!
  

Betrifft: Schreibfehler: ColumnS(a) von: 1712726.html
Geschrieben am: 12.09.2019 16:02:28

Gruß Daniel

  

Betrifft: AW: Schreibfehler: ColumnS(a) von: 1712762.html
Geschrieben am: 12.09.2019 19:11:51

Es läuft, ihr seid die geilsten!

Vielen Dank!

  

Betrifft: AW: Find statt Formel nach Wert suchen lassen von: 1712658.html
Geschrieben am: 12.09.2019 11:48:24

HI
.Find mit Datum ist schwierig, denn
du musst als Suchtext den Datumswert so angeben, wie er in der Zelle angezeigt wird (also das Zahlenformat der Zelle berücksichtigen) und dabei aber auch in einem deutschen Excel die amerikanische Schreibweise verwenden!

in vielen Fällen muss man den Datumswert aber gar nicht suchen, sondern man kann die Position berechnen.
Nämlich immer dann, wenn in dem Bereich, in dem man sucht, die Datumswerte lückenlos und aufsteigend sortiert vorliegen, und das ist in den meisten Kalenderanwendungen der Fall.

Da ein Datum in Excel eine normale Zahl ist und ein Tag dem Wert 1 entspricht, kann man bspw die gesuchte Spaltenposition nach dem Schema berechnen:

Spalte es gesuchten Datums = Gesuchtes Datum - erstes Datum des Kalenders + Erste Spalte des Kalenders
ein Suchen wäre nur erforderlich, wenn die Liste unsortiert ist oder Lücken aufweist, dh Datumswerte fehlen.
Auch dann braucht man .FIND nur, wenn der zu durchsuchende Zellbereich mehrere Spalten und mehrere Zeilen umfasst. Sucht man nur in einer Zeile oder in einer Spalte, ist das gezeigte Application.Match die bessere Suchmethode.

Gruß Daniel

Beiträge aus dem Excel-Forum zum Thema "Find statt Formel nach Wert suchen lassen"