Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
516to520
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
516to520
516to520
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ansatzproblem

Ansatzproblem
12.11.2004 16:16:05
Jens_Pu
Hallo Excelfreunde,
habe eine Tabelle, die so aussieht:
 
 BC
1Wortlänge5
2gesuchter Stringa
3Position des String2
4Hund 
5Katze 
6Elefant 
7Fledermaus 
8Ameise 
9Eidechse 
10Katzenhai 
11Maus 
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Zusätzlich befinden sich auf dem Tabellenblatt noch 2 CommandButtons mit dieser Funktionalität:


In Tabelle1:
Private Sub CommandButton1_Click()
  
Call Begriff_suchen
End Sub
Private Sub CommandButton2_Click()
  Rows.RowHeight = 13
End Sub
In Modul1:
Option Explicit
Sub Begriff_suchen()
  
Dim intLaenge As Integer
  
Dim intPos As Integer
  
Dim lngC As Long
  
Dim lngLRow As Long
  
Dim strSuchstring As String
  
Dim wks As Worksheet
  
  Application.ScreenUpdating = 
False
  
Set wks = Worksheets("Tabelle1")
  
  
With wks
    intLaenge = .Range("C1")
    intPos = .Range("C3")
    strSuchstring = .Range("C2")
    lngLRow = .Cells(Rows.Count, 2).End(xlUp).Row
  
    
For lngC = 4 To lngLRow
      
If Len(.Cells(lngC, 2)) <> intLaenge Then
        .Rows(lngC).RowHeight = 0
      
Else
        
If InStr(1, LCase(.Cells(lngC, 2).Value), LCase(strSuchstring)) <> intPos Then
          .Rows(lngC).RowHeight = 0
        
End If
      
End If
    
Next
  
End With
  Application.ScreenUpdating = 
True
End Sub 
In C1 bis C3 wird vorgegeben, was gefiltert werden soll.
Das klappt auch prima.
Nun wollte ich das etwas universeller gestalten.
Da gibt es ja erst mal 6 Sinn machende Möglichkeiten:
 
mit Längemit Suchstringmit Pos 
mit Längemit Suchstringohne Pos 
mit Längeohne Suchstringohne Pos 
ohne Längemit Suchstringmit Pos 
ohne Längemit Suchstringohne Pos 
ohne Längeohne Suchstringohne Pos=Komplette Liste
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Mein Problem ist nun, wie gehe ich das programmtechnisch am sinnvollsten an?
Wie würdet Ihr da vorgehen?
Bin schon sehr gespannt.
Gruß Jens

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ansatz etwas weiter...
ChrisL
Hi Jens
Würde sicher mal eine Funktion draus machen und die Variablen optional setzen. Allerdings dann weiss ich auch nicht recht weiter. :-)
Vielleicht irgendwie so...
If (Variable1 = "" Or Variable1 = "erfüllt") And _
(Variable2 = "" Or Variable2 = "erfüllt") And _
(Variable3 = "" Or Variable3 = "erfüllt") Then
End If
Noch nicht ganz so schön geb ich zu. Mit
If ... Like "*" & Suchstring & "*" Then
den String suchen wär noch eine Variante.
Naja einfach mal etwas angedacht aber nicht fertig.
Gruss
Chris
AW: Ansatz etwas weiter...
12.11.2004 18:13:20
Jens_Pu
Hallo Chris,
nett dass Du Dich damit befasst hast.
Am Anfang dachte ich auch, ist doch ganz einfach...
Für jeden einzelnen Fall eine eigene Routine schreiben wäre ja auch kein Problem.
Wo ich eben ein Problem habe ist, wie verschachtel ich welche Abfragen ineinander.
Mal sehen, vielleicht kommen ja noch ein paar Meinungen.
Gruß Jens
Anzeige
AW: Ansatz etwas weiter...
12.11.2004 21:57:30
Nepumuk
Hallo Jens,
eine Variante:


Option Explicit
Sub Begriff_suchen()
    Dim intLen As Integer
    Dim intPos As Integer
    Dim strString As String
    Dim lngRow As Long
    Dim bolLen As Boolean, bolPos As Boolean, bolString As Boolean
    Dim intValue As Integer
    Application.ScreenUpdating = False
    With Worksheets("Tabelle1")
        If Trim$(.Range("C1").Text) <> "" Then
            intLen = .Range("C1").Value
            intValue = 1
        End If
        If Trim$(.Range("C2").Text) <> "" Then
            strString = LCase$(.Range("C2").Text)
            intValue = intValue + 2
        End If
        If Trim$(.Range("C3").Text) <> "" Then
            intPos = .Range("C3").Value
            intValue = intValue + 4
        End If
        For lngRow = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
            Do
                Select Case intValue
                    Case 1
                        If fncLen(.Cells(lngRow, 2).Text, intLen) Then Exit Do
                    Case 2
                        If fncString(.Cells(lngRow, 2).Text, strString) Then Exit Do
                    Case 3
                        If fncLen(.Cells(lngRow, 2).Text, intLen) And _
                        fncString(.Cells(lngRow, 2).Text, strString) Then Exit Do
                    Case 4
                        If fncPos(.Cells(lngRow, 2).Text, strString, intPos) Then Exit Do
                    Case 5
                        If fncLen(.Cells(lngRow, 2).Text, intLen) And _
                        fncPos(.Cells(lngRow, 2).Text, strString, intPos) Then Exit Do
                    Case 6
                        If fncString(.Cells(lngRow, 2).Text, strString) And _
                        fncPos(.Cells(lngRow, 2).Text, strString, intPos) Then Exit Do
                    Case 7
                        If fncLen(.Cells(lngRow, 2).Text, intLen) And _
                        fncString(.Cells(lngRow, 2).Text, strString) And _
                        fncPos(.Cells(lngRow, 2).Text, strString, intPos) Then Exit Do
                End Select
                .Rows(lngRow).RowHeight = 0
                Exit Do
            Loop
        Next
    End With
    Application.ScreenUpdating = True
End Sub
Private Function fncLen(strValue As String, intLen As IntegerAs Boolean
    fncLen = Len(Trim$(strValue)) = intLen
End Function
Private Function fncString(strValue As String, strString As StringAs Boolean
    fncString = InStr(1, LCase$(Trim$(strValue)), strString) <> 0
End Function
Private Function fncPos(strValue As String, strString As String, intPos As IntegerAs Boolean
    fncPos = InStr(1, LCase$(Trim$(strValue)), strString) = intPos
End Function


Gruß
Nepumuk
Anzeige
Da fehlt noch was!!
12.11.2004 22:22:47
Nepumuk
Wenn gar kein Begriff angegeben ist:
Select Case intValue
Case 0
Exit For
Case 1
.
.
.
Gruß
Nepumuk
stimmt. Und was zu viel?
13.11.2004 07:16:11
Jens_Pu
Hallo Nepumuk,
eigentlich ist das ja nicht der Ansatz, sondern DIE LÖSUNG. ;-)
Erschlägt auf jeden Fall alle Möglichkeiten, aber:
Wenn nur eine Position eingegeben ist (Case 4), oder Wortlänge und Position (Case 5), die machen doch eigendlich keinen Sinn. Da hat er ja nix zu suchen, also kommt auch nix raus. Oder liege ich da falsch?
Ich habs, es könnte ja auch eine Kontrollfunktion vom Meister sein. ;-)


      
Function Schautderdencodeauchanodersetzterihnnureinpruefung() As Boolean
  DieseFunktion.hidden = 
true
  
If FragerFindetEs = true Then 
    Schautderdencodeauchanodersetzterihnnureinpruefung = 
true
  
Else
    Schautderdencodeauchanodersetzterihnnureinpruefung = 
false
  
End if
End Function 
Vielen Dank Nepumuk, wieder was gelernt.
Gruß Jens
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige