Microsoft Excel

Herbers Excel/VBA-Archiv

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

Datenabfrage

Betrifft: Datenabfrage von: Michael
Geschrieben am: 11.07.2015 16:01:47

Guten Tag,

ich habe folgendes Problem:

in einem Blatt habe eine etwas "krumme" Datenbank. Die wichtigen Kriterien zum abgriff der relevanten Spalten befinden sich oberhalb der Liste in drei Zeilen.

In einem anderen Blatt möchte ich nun drei Kriterien eingeben und es sollen Daten aus den relevanten Spalten in das Zielblatt übertragen werden.

Zum besseren Verständnis hier ein Beispiel: https://www.herber.de/bbs/user/98772.xlsx

Bisher habe ich das immer manuell gemacht. Da die Datenbasis aber sehr groß ist (>200 Spalten und <1500 Zeilen)wird das immer aufwendiger.

alle Versuche mit dem Rekorder oder im Internet gefunden Codestücken habe nichts gebracht.

Gruß

Mcihael

  

Betrifft: AW: Datenabfrage von: Sepp
Geschrieben am: 11.07.2015 18:01:13

Hallo Michael,

ich sehe nur vier Übereinstimmende Spalten!

Zielblatt

 ABCDEFGHIJ
11AUSWAHL        
12          
13StadtEssen        
14Größe2        
15Gruppeb        
16Datum ab01.05.2015        
17Datum bis01.11.2015        
18          
19          
20          
21Datum8123349     
2201.05.2015       254,00 €       413,00 €       837,00 €       996,00 €          
2301.06.2015       268,00 €       436,00 €       884,00 €    1.052,00 €          
2401.07.2015       282,00 €       459,00 €       931,00 €    1.108,00 €          
2501.08.2015       296,00 €       482,00 €       978,00 €    1.164,00 €          
2601.09.2015       310,00 €       505,00 €    1.025,00 €    1.220,00 €          
2701.10.2015       324,00 €       528,00 €    1.072,00 €    1.276,00 €          
2801.11.2015       338,00 €       551,00 €    1.119,00 €    1.332,00 €          
29                   
30                   
31                   

Formeln der Tabelle
ZelleFormel
B21=WENNFEHLER(INDEX(Quelle!$B$21:$T$21;AGGREGAT(15;6;SPALTE($A$1:$S$1)/((Quelle!$B$1:$T$1=$B$13)*(Quelle!$B$2:$T$2=$B$14)*(Quelle!$B$3:$T$3=$B$15)); SPALTE(A1))); "")
A22=WENNFEHLER(AGGREGAT(15;6;Quelle!$A$22:$A$100/((Quelle!$A$22:$A$100>=$B$16)*(Quelle!$A$22:$A$100<=$B$17)); ZEILE(A1)); "")
B22=WENN((($A22="")+(B$21="")); "";INDEX(Quelle!$B$22:$T$69;VERGLEICH($A22;Quelle!$A$22:$A$69;0); VERGLEICH(B$21;Quelle!$B$21:$T$21;0)))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4



Gruß Sepp



  

Betrifft: Was ich noch sagen wollte... von: Sepp
Geschrieben am: 11.07.2015 18:02:25

..., wenn du die Daten und Kriterien etwas anders anordnest, dann könntest du eine Auswertung evtl. per Pivot-Tabelle machen.

Gruß Sepp



  

Betrifft: geht es auch mit VBA? von: Michael
Geschrieben am: 11.07.2015 18:10:14

Hallo Sepp,

natürlich sind es nur 4 Datensätze!

Deine Lösung via Formel funktioniert. Wäre auch eine Lösung mit Makro möglich?! Die Mappe ist bereits übervoll mit Formeln, sodass die Performance etwas leidet.

Gruß und vielen Dank

Michael


  

Betrifft: AW: geht es auch mit VBA? von: Sepp
Geschrieben am: 11.07.2015 18:15:43

Hallo Michael,

sicher geht das auch per VBA, aber jetzt habe ich keine Lust und Zeit, vielleicht später.

Gruß Sepp



  

Betrifft: ich wünsche Dir einen schönen abend! von: Michael
Geschrieben am: 11.07.2015 18:20:11

Hallo Sepp,

mit der Formellösung komme ich schon sehr gut weiter!

Optimal wäre etwas mit VBA, aber ich will ja nicht unverschämt werden. (die Vorgehensweise interessiert mich sehr, da ich solch eine Struktur vielleicht öfter haben werde.)

Ich wünsche Dir noch einen schönen Abend.

Gruß
Michael


  

Betrifft: doch noch Zeit gehbabt ;-)) von: Sepp
Geschrieben am: 11.07.2015 18:51:10

Hallo Micheal,

in ein allgemeines Modul.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub daten()
  Dim vntData As Variant, vntCrit As Variant, vntRet() As Variant
  Dim vntCity As Variant, vntSize As Variant, vntGroup As Variant
  Dim date1 As Date, date2 As Date
  Dim lngRow As Long, lngCol As Long, lngI As Long, lngN As Long
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Sheets("Quelle")
    vntCrit = .Range("B1:HZ3")
    vntData = .Range("A21:HZ1600")
  End With
  
  With Sheets("Zielblatt")
    vntCity = .Range("B13")
    vntSize = .Range("B14")
    vntGroup = .Range("B15")
    date1 = .Range("B16")
    date2 = .Range("B17")
  End With
  
  Redim vntRet(1 To UBound(vntData, 1), 1 To UBound(vntData, 2))
  
  vntRet(1, 1) = "Datum"
  lngN = 1
  
  For lngCol = 2 To UBound(vntData, 2)
    If vntCrit(1, lngCol - 1) = vntCity And vntCrit(2, lngCol - 1) = vntSize And vntCrit(3, lngCol - 1) = vntGroup Then
      lngN = lngN + 1
      vntRet(1, lngN) = vntData(1, lngCol)
      lngI = 1
      For lngRow = 2 To UBound(vntData, 1)
        If vntData(lngRow, 1) >= date1 And vntData(lngRow, 1) <= date2 Then
          lngI = lngI + 1
          vntRet(lngI, 1) = vntData(lngRow, 1)
          vntRet(lngI, lngN) = vntData(lngRow, lngCol)
        End If
      Next
    End If
  Next
  
  With Sheets("Zielblatt")
    .Range("A21").Resize(UBound(vntRet, 1), UBound(vntRet, 2)) = vntRet
  End With
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'daten'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Prozedur - daten"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
End Sub



Gruß Sepp



  

Betrifft: Toll von: Michael
Geschrieben am: 11.07.2015 19:20:27

Hallo Sepp,

lauft super schnell und liefert alles wie gewünscht!

Jetzt habe ich noch einige Zeit vor mir, um den Code richtig zu verstehen.

Vielen Dank für deine tolle Unterstützung.

Gruß und einen schönen Abend

Michael


  

Betrifft: Nachfrage von: Thomas
Geschrieben am: 11.07.2015 22:02:11

Hallo,

die Sache die Ihr hier gebaut habt ist ein Hammer.

Ich habe dazu nur eine peinliche Frage. Wie heißen die "drehfelder" in Spalte B 13 bis B14 vom Zielblatt. Ich weiss das Sie die die Bereiche vom Namensmanager nutzen aber ich komme bei diesen Feldern weder in die Eigenschaften oder so etwas.Ich weiss einfach nicht wie man diese erstellt. Da ich auch nicht rausbekomme wie sie heissen kann ich dies auch nicht googeln.


liebe grüsse thomas


  

Betrifft: AW: Nachfrage von: Sepp
Geschrieben am: 11.07.2015 22:08:55

Hallo Thomas,

was du meinst, nennt sich Datengültigkeit. Zu finden unter "Daten" > "Datenüberprüfung".

Gruß Sepp



  

Betrifft: AW: Nachfrage von: Thomas
Geschrieben am: 11.07.2015 23:17:59

Hallo Sepp,

besten dank auch dafür das Du mich nicht auslachst. Eigentlich habe ich mein Staus auf Excel gut geschätzt aber seid ich dies Forum kenne stelle ich fest das ich ein blutiger anfänger bin.

Hast Du noch Lust dies makro zu erweitern? Man kann hiermit klasse bestimmte Auswertungen in einer riesigen Datenbank definieren innerhalb eines zeitraums. zur zeit arbeite ich daran so eine datenbank auszuwerten und benutze für jede Auswertung ein neues Blatt und ein neues angepasstes makro. mit der zeit wird es aber sehr unübersichtlich.
Deine methode lässt es zu in einem Blatt alle auswertungen zu Fahren. Das einzige was mir fehlen würde wäre "kopiere nur die zeilen mit dem Wort Magdeburg oder so" in zelle B19 definiert. Ich meine dies als zusätzliches kriterium zu den schon vorhandenen Spaltenkriterien. wenn die zelle b19 leer ist soll alles so sein wie jetzt. damit könnte ich meine treffer noch mehr auf den punkt bringen. Geht dies ?

ich sehe noch die möglichkeit für ein anschliessendes Makro erst deins fertig machenlassen und dann lösche alle zeilen welche nicht das kriterium aus Zelle B19 in irgenteiner Spalte enthalten.Ist B19 leer Makro ende. Bekommst Du soetwas hin?


Liebe Grüsse thomas





  

Betrifft: AW: Nachfrage von: Sepp
Geschrieben am: 11.07.2015 23:26:47

Hallo Thomas,

und deine Daten sind genau so aufgebaut wie die von Michael?

Auch mit den Kriterien in den Kopfzeilen und so?

Wo soll den nach dem neuen Kriterium gesucht werden?


Gruß Sepp



  

Betrifft: AW: Nachfrage von: Thomas
Geschrieben am: 12.07.2015 00:13:35

hallo Sepp,

die Datumsspalte von bis ist die Spalte h und die überschrift der Datenbank steht in zeile 1. Aber ich hab schon gesehen das man dies in dein Makro verändern kann ( ausser die Spaltekriterien aus dem Quelleblatt ins Zielblatt auszusondern ist noch nicht gelungen) . Zu wo soll gesucht werden. Da sich ja die Spalten je nach definition ständig ändern würde ich sagen das es das beste wäre wirklich wenn man im Ergebnis von dein Makro alle zeilen löscht in dem dies kreterium nicht vokommt. Möglich wäre auch wenn man das macro sagen würde suche innerhalb des zeitbereichs (in Spalte H) nach dem kriterium aus zelle B19 ( neu dann im Zielblatt definiert) und kopiere nur die zeilen mit dem Kriterium und die spalten welche mit dem Kriterien . Meine Datenbank hatt zur Zeit 140 Spalten ( aber auch dies kann man bei dein macro super anpassen. Oh Oh ist schon komplieziert zu beschreiben. Habe mal die Datei so gebaut wie meine aussieht.

https://www.herber.de/bbs/user/98774.xlsm




liebe grüsse Thomas



vielen Dank für dein interesse liebe grüsse Thomas



  

Betrifft: AW: Nachfrage von: Sepp
Geschrieben am: 12.07.2015 08:28:47

Hallo Thomas,

ich habe mal die Bereiche und den Code etwas angepasst.

https://www.herber.de/bbs/user/98775.xlsm

Gruß Sepp



  

Betrifft: AW: Nachfrage von: Thomas
Geschrieben am: 12.07.2015 12:04:45

Hallo Sepp,

das sieht richtig super aus. Ich habe mir das heut auch noch mal durchgelesen ich würde auch nicht durchsehen was ich geschrieben habe.Sorry. Ich habe es in der Datei kenntlich gemacht wie ich dies eigentlich meine.

https://www.herber.de/bbs/user/98779.xlsm.


hab vielen vielen Dank für dein Mühe.


liebe grüsse Thomas


  

Betrifft: AW: Nachfrage von: Thomas
Geschrieben am: 12.07.2015 12:13:59

Hallo Sepp,

ups habe noch vergessen.


Wenn in diesem Fall die Zelle b23 leer ist sollen alle zeilen erscheinen. Die roten und die Grünen.



Liebe grüsse Thomas


  

Betrifft: AW: Nachfrage von: Sepp
Geschrieben am: 12.07.2015 14:31:19

Hallo Thomas,

du hast nicht gesagt, ob alle Spalten auf das Zusatzkriterium geprüft werden sollen, oder nur Spalten die den ersten vier Kriterien entsprechen.

so für alle Spalten.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub daten()
  Dim vntData As Variant, vntCrit As Variant, vntRet() As Variant
  Dim vntCity As Variant, vntSize As Variant, vntGroup As Variant, vntThomas As Variant
  Dim date1 As Date, date2 As Date, vntExtra As Variant
  Dim lngRow As Long, lngCol As Long, lngC As Long, lngI As Long, lngN As Long
  Dim bolDoIt As Boolean
  
  On Error GoTo ErrExit
  
  With Sheets("Quelle")
    vntData = .Range("A1:T1600")
  End With
  
  With Sheets("Zielblatt")
    vntCrit = .Range("B1:U4") ' anzahl der zeilen im blatt Quelle
    vntCity = .Range("B17")
    vntSize = .Range("B18")
    vntGroup = .Range("B19")
    vntThomas = .Range("B20")
    date1 = .Range("B21")
    date2 = .Range("B22")
    vntExtra = .Range("B23")
  End With
  
  Redim vntRet(1 To UBound(vntData, 1), 1 To UBound(vntData, 2))
  
  vntRet(1, 1) = "Datum"
  lngN = 1
  
  For lngCol = 2 To UBound(vntData, 2)
    If vntCrit(1, lngCol - 1) = vntCity And _
      vntCrit(2, lngCol - 1) = vntSize And _
      vntCrit(3, lngCol - 1) = vntGroup And _
      vntCrit(4, lngCol - 1) = vntThomas Then
      lngN = lngN + 1
      vntRet(1, lngN) = vntData(1, lngCol)
      lngI = 1
      For lngRow = 2 To UBound(vntData, 1)
        If vntData(lngRow, 8) >= date1 And vntData(lngRow, 8) <= date2 Then
          bolDoIt = False
          If vntExtra <> "" Then
            For lngC = 2 To UBound(vntData, 2)
              If vntData(lngRow, lngC) = vntExtra Then
                bolDoIt = True
                Exit For
              End If
            Next
          Else
            bolDoIt = True
          End If
          If bolDoIt Then
            lngI = lngI + 1
            vntRet(lngI, 1) = vntData(lngRow, 8)
            vntRet(lngI, lngN) = vntData(lngRow, lngCol)
          End If
        End If
      Next
    End If
  Next
  
  With Sheets("Zielblatt")
    .Range("A25").Resize(UBound(vntRet, 1), UBound(vntRet, 2)) = vntRet
  End With
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'daten'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Prozedur - daten"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
End Sub



Gruß Sepp



  

Betrifft: Und zum neuen Kriterium ... von: Sepp
Geschrieben am: 12.07.2015 09:02:49

... wollte ich noch sagen, dass es immer noch nicht klar ist, wie du das meinst!

Du hast nun vier Kriterien in den Kopfzeilen, was soll da noch dazukommen?

Und sag nicht immer, wie du glaubst das es geht, sondern beschreibe mal genau, wo dieses Kriterium zu finden ist, ich hab da nämlich nichts gesehen!

Gruß Sepp



  

Betrifft: Ich habe auch noch eine Frage! von: Michael
Geschrieben am: 12.07.2015 15:44:31

Hallo Sepp,

also Deine Lösung [VBA] ist wirklich toll! [extrem schnell]

aber eine Frage hätte ich noch auf Lager: kann ich bei den Kriterien einen Joker verwenden? Ich habe mal einfach so rumprobiert, aber keine passende Syntax gefunden. Ist im Moment nicht aktuell, ich sehe diese Anforderung aber auf mich zurollen.

Schön, dass noch ein anderer User gefallen an Deiner Lösung gefunden hat.

Gruß

Michael


  

Betrifft: AW: Ich habe auch noch eine Frage! von: Sepp
Geschrieben am: 12.07.2015 15:59:11

Hallo Michael,

verwende bei "Stadt", "Größe" oder "Gruppe" den Asteriks (*) als Wildcard und passe den Code an.


' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub daten()
  Dim vntData As Variant, vntCrit As Variant, vntRet() As Variant
  Dim vntCity As Variant, vntSize As Variant, vntGroup As Variant
  Dim date1 As Date, date2 As Date
  Dim lngRow As Long, lngCol As Long, lngI As Long, lngN As Long
  Dim bolAllData As Boolean
  
  On Error GoTo ErrExit
  
  With Sheets("Zielblatt2")
    vntCity = .Range("B13")
    vntSize = .Range("B14")
    vntGroup = .Range("B15")
    date1 = .Range("B16")
    date2 = .Range("B17")
    bolAllData = Application.CountA(.Range("B13:B17")) = 5
  End With
  
  If bolAllData Then
    
    With Sheets("Quelle")
      vntCrit = .Range("B1:HZ3")
      vntData = .Range("A21:HZ1600")
    End With
    
    Redim vntRet(1 To UBound(vntData, 1), 1 To UBound(vntData, 2))
    
    vntRet(1, 1) = "Datum"
    lngN = 1
    
    For lngCol = 2 To UBound(vntData, 2)
      If (vntCrit(1, lngCol - 1) = vntCity Or vntCity = "*") And (vntCrit(2, lngCol - 1) = vntSize Or _
        vntSize = "*") And (vntCrit(3, lngCol - 1) = vntGroup Or vntGroup = "*") Then
        lngN = lngN + 1
        vntRet(1, lngN) = vntData(1, lngCol)
        lngI = 1
        For lngRow = 2 To UBound(vntData, 1)
          If vntData(lngRow, 1) >= date1 And vntData(lngRow, 1) <= date2 Then
            lngI = lngI + 1
            vntRet(lngI, 1) = vntData(lngRow, 1)
            vntRet(lngI, lngN) = vntData(lngRow, lngCol)
          End If
        Next
      End If
    Next
    
    Sheets("Zielblatt2").Range("A21").Resize(UBound(vntRet, 1), UBound(vntRet, 2)) = vntRet
  Else
    Sheets("Zielblatt2").Range("A21").CurrentRegion = ""
    Sheets("Zielblatt2").Range("A21") = "Datum"
  End If
  
  
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'daten'" & vbLf & String(60, "_") & vbLf & vbLf & _
        IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & "Fehlernummer:" & vbTab & _
        .Number & vbLf & vbLf & "Beschreibung:" & vbTab & .Description & vbLf, vbExclamation + _
        vbMsgBoxSetForeground, "VBA - Fehler in Prozedur - daten"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
End Sub


Gruß Sepp



  

Betrifft: WOW! von: Michael
Geschrieben am: 12.07.2015 17:20:17

Hallo Sepp,

wirklich toll! Sehr professionell erstellt.

Leider reicht mein rudimentäres VBA-Wissen nicht aus, um den Code in letzter Konsequenz zu verstehen.

Gruß und vielen, vielen Dank

Michael


  

Betrifft: AW: Ich habe auch noch eine Frage! von: Thomas
Geschrieben am: 12.07.2015 17:28:47

Hallo Sepp,


ich meine " suche nur in den Spalten die den ersten vier Kriterien entsprechen "

Und wenn die Zelle B23 leer ist soll das Makro nichts weiter machen. Nur die vier Kriterien abarbeiten.

So wie es jetzt eingestellt ist findet es leider nichts mehr. Schaust Du nochmal?

Und sorry wenn ich es nicht richtig erklärt habe.


Liebe Grüsse Thomas


  

Betrifft: AW: Ich habe auch noch eine Frage! von: Sepp
Geschrieben am: 12.07.2015 17:38:10

Hallo Thomas,

also das nicht gefunden wird, kann ich nicht nachvollziehen.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub daten()
  Dim vntData As Variant, vntCrit As Variant, vntRet() As Variant
  Dim vntCity As Variant, vntSize As Variant, vntGroup As Variant, vntThomas As Variant
  Dim date1 As Date, date2 As Date, vntExtra As Variant
  Dim lngRow As Long, lngCol As Long, lngC As Long, lngI As Long, lngN As Long
  Dim bolDoIt As Boolean
  
  On Error GoTo ErrExit
  
  With Sheets("Quelle")
    vntData = .Range("A1:T1600")
  End With
  
  With Sheets("Zielblatt")
    vntCrit = .Range("B1:U4") ' anzahl der zeilen im blatt Quelle
    vntCity = .Range("B17")
    vntSize = .Range("B18")
    vntGroup = .Range("B19")
    vntThomas = .Range("B20")
    date1 = .Range("B21")
    date2 = .Range("B22")
    vntExtra = .Range("B23")
  End With
  
  Redim vntRet(1 To UBound(vntData, 1), 1 To UBound(vntData, 2))
  
  vntRet(1, 1) = "Datum"
  lngN = 1
  
  For lngCol = 2 To UBound(vntData, 2)
    If vntCrit(1, lngCol - 1) = vntCity And vntCrit(2, lngCol - 1) = vntSize And _
      vntCrit(3, lngCol - 1) = vntGroup And vntCrit(4, lngCol - 1) = vntThomas Then
      lngN = lngN + 1
      vntRet(1, lngN) = vntData(1, lngCol)
      lngI = 1
      For lngRow = 2 To UBound(vntData, 1)
        If vntData(lngRow, 8) >= date1 And vntData(lngRow, 8) <= date2 Then
          bolDoIt = False
          If vntExtra <> "" Then
            For lngC = 2 To UBound(vntData, 2)
              If vntData(lngRow, lngC) = vntExtra And vntCrit(1, lngC - 1) = vntCity And _
                vntCrit(2, lngC - 1) = vntSize And vntCrit(3, lngC - 1) = vntGroup And _
                vntCrit(4, lngC - 1) = vntThomas Then
                bolDoIt = True
                Exit For
              End If
            Next
          Else
            bolDoIt = True
          End If
          If bolDoIt Then
            lngI = lngI + 1
            vntRet(lngI, 1) = vntData(lngRow, 8)
            vntRet(lngI, lngN) = vntData(lngRow, lngCol)
          End If
        End If
      Next
    End If
  Next
  
  With Sheets("Zielblatt")
    .Range("A25").Resize(UBound(vntRet, 1), UBound(vntRet, 2)) = vntRet
  End With
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'daten'" & vbLf & String(60, "_") & vbLf & vbLf & _
        IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & "Fehlernummer:" & vbTab & _
        .Number & vbLf & vbLf & "Beschreibung:" & vbTab & .Description & vbLf, vbExclamation + _
        vbMsgBoxSetForeground, "VBA - Fehler in Prozedur - daten"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
End Sub



Gruß Sepp



  

Betrifft: Es passt Klasse von: Thomas
Geschrieben am: 12.07.2015 18:01:26

hallo Sepp,


ich glaube andere hätten mir dies schon um die Ohren gehauen. bin super glücklich.

Baust du mir auch noch den Joker ein? ( Oberklasse die Idee).

Ich weiss nicht was dies "bolAllData = Application.CountA(.Range("B13:B17")) = 5 bedeutet.


vielen vielen dank für deine Gedult.


liebe grüsse thomas


  

Betrifft: AW: Es passt Klasse von: Sepp
Geschrieben am: 12.07.2015 18:05:27

Hallo Thomas,

das mit dem Joker war in Michaels Code! und bolAllData ist bei dir auch nicht drin, das ist eine Prüfung, ob alle Kriterien einen Eintrag haben.

Gruß Sepp



  

Betrifft: AW: Es passt Klasse von: Thomas
Geschrieben am: 12.07.2015 18:31:18

Hallo Sepp,





Bin gerade beim durchtesten


kannst Du ohne viel aufwand mein ( oder besser dein code) noch an einem Punkt verbessern?

Das ich auch teile eines begriffs finde? Ich meine wenn ich z.B. in Zelle b23 "test" schreibe aber in den gefundenen Spalten test 1 vorkommt das es dies dann troztdem beücksichtigt? Es geht nur um die das Kriterium in Zelle b23 nicht um die anderen 4 Kriterien.

Dann ist es aber wirklich perfekt und ich habe dann auch wirklich keine Fragen mehr.


liebe grüsse Thomas






  

Betrifft: AW: Es passt Klasse von: Sepp
Geschrieben am: 12.07.2015 20:25:52

Hallo Thomas,

schreib statt

If vntData(lngRow, lngC) = vntExtra And vntCrit(1, lngC - 1) = vntCity And ... _
  


einfach

If LCase(vntData(lngRow, lngC)) Like LCase("*" & vntExtra & "*") And vntCrit(1, lngC - 1) = vntCity And ... _
  


LCase() weil dann auch Klein-/Groß-Schreibung egal ist.

Gruß Sepp



  

Betrifft: vielen Dank an Sepp von: Thomas
Geschrieben am: 12.07.2015 21:07:38

Hallo Sepp,

Michael sagt Wow ich sage dreimal Wow.

Bin schon dabei es bei mir einzubauen und alles klappt besten. Sau schnell und kein Fehler drin.
Ich weise gerade den spalten bestimmte kriterien zu und nun kann ich mit den gültigkeitsfeldern genau
die Spalten rausholen und wegklicken die ich brauch.

vielen vielen Dank


liebe grüsse thomas