Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
460to464
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Filter und Formatproblem!

Filter und Formatproblem!
31.07.2004 06:55:42
Oliver
Moin an alle,
ich habe da ein Phänomen, hinter das ich nicht komme. Über eine UserForm gebe ich Daten ein. Unter anderem auch ein Datum. Die Spalte, in der das Datum eingefügt wird, wird nach dem übergeben der Daten an die Tabelle, mit der Anweisung
Range(Cells(1, 20), Cells(zeile, 20)).NumberFormat = "dd/mm/yyyy"
auf Datum formatiert. Wenn ich nun in mein Tabellenblatt gehe und ändere an dem Datum etwas und mit Return abschließe, wechselt das Datum von der linken Zellenseite auf die rechte Seite. Das Format bleibt weiterhin dd.mm.jjjj. Dieses ändern der Ausrichtung alleine wäre nicht so tragisch. Da ich aber über einen weiteren Code mir die Daten filtern lasse, u. a. auch nach Datum, steht das Datum, welches ich dann händisch geändert habe, nicht mehr unter den gefilterten Einträgen.
Hat jemand eine Idee, an was das liegen könnte? Ich komme nicht dahinter. Nun sind meine VBA Kenntnisse aber auch nicht die besten.
Ich hoffe auf eine Erklärung von Euch und danke schon mal im Voraus,
Oliver

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filter und Formatproblem!
31.07.2004 07:05:15
Nepumuk
Hallo Oliver,
du gibst das Datum sicher in eine Textbox ein. Diese liefert, wie der Name schon sagt, die Daten als Text zurück. Wenn du in der Tabelle ein Datum eintragen willst, dann z.B. so:
Cells(1, 1) = CDate(TextBox1)
Gruß
Nepumuk
Super, Danke, aber noch eine Frage!
Oliver
Moin Nepumuk,
danke Dir für die rasend schnelle Antwort am frühen Morgen. Es war so, wie Du vermutet hast. Die Eingabe erfolgt über ein Textfeld. Nun funktionierts.
Nun habe ich da noch eine weitere Frage und hoffe, dass Du darauf eventuell auch eine Antwort weißt. Ich starte, um einen Zeitraum zu filtern, den Benutzerdefinierten Autofilter mit folgenden Code
With Selection
.AutoFilter 'Autofilter einschalten
.AutoFilter Field:=3, Criteria1:=">=" & CDate(txt_datumvon), Operator:=xlAnd _
, Criteria2:=" End With
Es soll alles was größer oder gleich CDate(txt_datumvon) und kleiner oder gleich CDate(txt_datumbis) ist gefiltert werden. Das klappt leider nicht. Erst wenn ich dann nochmals händisch in den benutzerdefinierten Filter gehe, dort aber nichts verändere, aber dann mit OK rausgehe, werden die Daten angezeigt, die in dem Zeitraum liegen. Gibt es dafür auch eine Erklärung? Wäre jedenfalls super.
Danke Dir nochmal und schon wieder im Voraus,
Oliver
Anzeige
AW: Super, Danke, aber noch eine Frage!
31.07.2004 09:56:28
Nepumuk
Hallo Oliver,
der Autofilter über VBA spricht amerikanisch. Also: Monat/Tag/Jahr. Beispiel:


Sub Makro1()
'Filter Datumsbereich
    Dim crit1 As String, crit2 As String, dat1 As Date, dat2 As Date
'    Range("A2:A" & CStr(Range("A65536").End(xlUp).Row)).NumberFormat = "m/d/yyyy"
    dat1 = "04.01.2003"
    dat2 = "09.01.2003"
    crit1 = ">=" & Month(dat1) & "/" & Day(dat1) & "/" & Year(dat1)
    crit2 = "<=" & Month(dat2) & "/" & Day(dat2) & "/" & Year(dat2)
    Selection.AutoFilter Field:=1, Criteria1:=crit1, Operator:=xlAnd, Criteria2:=crit2
End Sub


Gruß
Nepumuk
Anzeige
Ein bissel OT...
K.Rola
Hallo Nepumuk,
hab mich mal aus aktuellem Anlass mit dem Problem "Doppler aus Array entfernen" oder
anders "Doppler gar nicht erst einlesen" rumgeschlagen. Hab auch einen Algorhitmus
gefunden, der aber ziemlich langsam ist.
Du hast doch da bestimmt was Leckeres für mich, oder?
Gruß K.Rola
AW: Ein bissel OT...
31.07.2004 10:41:07
Nepumuk
Hi K.Rola,
das ist stark abhängig von der größe des Arrays und Sortierung der Arrayelemente. Da wären ein paar Zusatzinfos gut.
Gruß
Nepumuk
AW: Ein bissel OT...
K.Rola
Hallo Nepumuk,
die Größe steht nicht fest, können 10 aber auch 50.000 Daten sein. Allerdings immer
nur eine Spalte, zumindest zunächst mal. Sortiert sind sie keinesfalls.
Grüße K.Rola
Anzeige
AW: Ein bissel OT...
31.07.2004 12:06:42
Nepumuk
Hallo K.Rola,
dann würde ich die Hashsuche verwenden. Dazu musst du zwei Primzahlen berechnen. Eine, welche größer als der größte Arrayindex und eine kleiner als der größte Arrayindex. Die Routine ist nach dem initialisieren verdammt schnell.


Option Explicit
Option Base 1
'Deklaration eines Variant der das zu durchsuchende Array
'aufnimmt und des Arrays für die Hashindizes.
Const intIndex As Integer = 1000
Dim SrchArr(intIndex) As Integer
Dim HashArr(intIndex * 2) As Integer
'Über diese Funktion wird der Index für das
'einfache Hashing ermittelt.
Function Hashing(ByVal Element As IntegerAs Integer
    Hashing = (Element Mod 1009) + 1 'eine Primzahl die größer ist als intIndex
End Function
'Über diese Funktion wird zur Vermeidung von Kollisiton
'der Index für das zweite Hashing ermittelt (doppeltes Hashing).
Function Doppeltes_Hashing(ByVal Element As IntegerAs Integer
    Doppeltes_Hashing = (Element Mod 997) + 1 'eine Primzahl die kleiner ist als intIndex
End Function
'Die Prozedur Init_Arr dient zum Initialisieren des zu durchsuchenden Arrays,
'der Ermittlung der den einzelnen Werten zugehörigen Hashindizes sowie der
'Belegung des Hash-Arrays mit diesen Indizes.
Sub Init_Arr()
    Dim As Integer, j As Integer, k As Integer
    'Initialisierung des zu durchsuchenden Arrays.
    For i = 1 To intIndex
        SrchArr(i) = i
    Next i
    'Initialisierung des Hash-Arrays.
    Erase HashArr
    'Verteilung der Suchwerte über die Hashindizes
    'im Hash-Array.
    For i = 1 To intIndex
        'Einfaches Hashing.
        j = Hashing(SrchArr(i))
        If HashArr(j) = 0 Then
           HashArr(j) = SrchArr(i)
        Else
            'Doppeltes Hashing zur Vermeidung von Kollision.
            k = Doppeltes_Hashing(SrchArr(i))
           Do
              j = Hashing(j + k)
           Loop Until HashArr(j) = 0
           HashArr(j) = SrchArr(i)
        End If
    Next i
End Sub
'Die Prozedur Hash_Search sucht den übergebenen Wert indem sie
'zunächst den zugehörigen Hashindex ermittelt und über diesen dann
'den Suchwert abfragt.
Sub Hash_Search(ByVal SuchElement As IntegerByRef Gefunden As Boolean)
    Dim As Integer, j As Integer, k As Integer
    'Ermittlung des einfachen Hashindex für den zusuchenden Wert.
    j = Hashing(SuchElement)
    'Ausfindigmachen des Suchwerts im Hash-Array.
    If HashArr(j) = 0 Then
       Gefunden = False
    Else
       If HashArr(j) = SuchElement Then
          Gefunden = True
       Else
          'Ermittlung des Index für das doppelte Hashing anhand des Suchwerts.
          k = Doppeltes_Hashing(SuchElement)
          Do
             j = Hashing(j + k)
          Loop Until (HashArr(j) = 0) Or (HashArr(j) = SuchElement)
          Gefunden = (HashArr(j) = SuchElement)
       End If
    End If
End Sub
'Über diese Prozedur wird das Suchergebnis ausgegeben.
Sub SrchAusgabe(ByRef SuchElement As IntegerByRef Gefunden As Boolean)
    MsgBox SuchElement & IIf(Gefunden, "", " nicht") & " gefunden in Array."
End Sub
'Die Hauptprozedur führt die vorab aufgeführten Prozeduren aus
'indem sie einige Suchen durchführt und diese Prozeduren einsetzt.
Sub Hash_Search_Test()
    Dim Gefunden As Boolean
    Call Init_Arr
    Call Hash_Search(1901, Gefunden)
    Call SrchAusgabe(1901, Gefunden)
    Call Hash_Search(11, Gefunden)
    Call SrchAusgabe(11, Gefunden)
    Call Hash_Search(4444, Gefunden)
    Call SrchAusgabe(4444, Gefunden)
    Call Hash_Search(22, Gefunden)
    Call SrchAusgabe(22, Gefunden)
End Sub


Solltest du alphanummerische Werte im Array haben, so sind die addierten Characterwerte zu verwenden.
Gruß
Nepumuk
Anzeige
AW: Ein bissel OT...
K.Rola
Hallo Nepumuk,
wer denkt sich sowas nur aus? Muss jetzt erstmal sehen, wie ich das so umsetzen kann,
dass es für meinen Fall passt.
Danke dir wie immer wie verrückt.
Schönes Wochenende.
Gruß K.Rola
Genau das war's, Danke!
Oliver
Hi Nepumuk,
perfekt, super und danke. Da wär ich nie drauf gekommen.
Wünsche Dir noch ein schönes Wochenende,
Oliver

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige