Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
680to684
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
680to684
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Exakte Zeile finden

Exakte Zeile finden
13.10.2005 11:12:47
Roli
hallo Spezialisten!
Ich suche mit folgendem Code auf dem Blatt "Vertreter" in der Spalte B einen richtigen Begriff heraus, der im textbox kd_vertreter eingeben ist.
sub test()
Dim strPWort As String, j as integer
Application.ScreenUpdating = True

With Worksheets("Vertreter")
j = .Range("B:B").Find(me.kd_vertreter, LookIn:=xlValues).Row
strPWort = .Cells(j, 4)
End With
...
Folgendes Problem: Ich suche eine Möglichkeit, dass in zwei Spalten durchsucht wird und explizit die richtige Zeile herausfindet.
Mit folgendem Code hats nicht geklappt?
j = .Range("B:B").Find(me.kd_vertreter, LookIn:=xlValues).Row and _
.Range("A:A").Find(me.kd_bereich, LookIn:=xlValues).Row
Wie geht das? Bitte helft mir da weiter.
Liebe Grüße
Roli

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Exakte Zeile finden
13.10.2005 11:34:47
Ralf
Hallo Roli,
gib die Spalten zusammen an.
Range("A:B").Find(....
Ciao, Ralf
AW: Exakte Zeile finden
13.10.2005 12:48:58
Roli
hallo Ralph!
Danke für die rasche Antwort!
Ich denke, da habe ich mich falsch ausgedrückt. Es geht mir nicht um einen Begriff, der zwei Spalten durchsucht.
Wenn Wert aus Spalte A (me.kd_bereich) gefunden ist, sollte weitergesucht werden, ob Wert auch in Spalte B [vertreter] gefunden werden kann, und das ist dann j als Zeilennr. Die brauche ich dann später für .cells(j, 4) etc.
Ich dachte, es geht mit folgendem Code:
j = .Range("A:A").Find([vertreter], LookIn:=xlValues).Row and_
.range("B:B").Find(me.kd_bereich, LookIn:=xlValues).Row
Gruß Roli
Anzeige
AW: Exakte Zeile finden
13.10.2005 13:11:25
Ralf
Hallo Roli,
nochmal zum Verständnis. Also erst in Spalte A suchen. Und nur dann, wenn der Begriff in A gefunden wurde weiter in Spalte B suchen?
Dim y$, j#
On Error Resume Next
y = Range("A:A").Find(kd_bereich).Address
If y "" Then j = Range("B:B").Find(kd_bereich).Row
y = ""
Ciao, Ralf
AW: Exakte Zeile finden
13.10.2005 13:58:43
Roli
hallo Ralf!
In Spalte B stehen mehrere doppelte Einträge und das Problem ist, dass ich allein in Spalte B nicht definieren kann, in welcher Zeilennr. sich der Wert befindet.
Würde ich aber die Bedingung für Spalte A hinzufügen, dann habe ich genau den Wert, den ich brauche. Mit deinem Code konnte ich nichts anfangen. Ist das ein machbares Problem?
Liebe Grüße
Roli
Anzeige
AW: Exakte Zeile finden
13.10.2005 14:47:55
Ralf
Hi Roli,
also nur, wenn sowohl in A und B, in der gleichen Zeile der gleiche Begriff steht? Jedenfalls hab ich das jetzt so verstanden.
Dim y#, j#, mldg$
On Error Resume Next
Do
j = j + 1
y = Range("A:A").Find(kd_vertreter).Row
If y &lt&gt 0 Then
j = Range("B" & j).Find(kd_vertreter).Row

If Range("A" & y) = Range("B" & j) And y = j Then
mldg = kd_vertreter & " wurde in Zelle B" & j & " gefunden"
Exit Do
Else
mldg = kd_vertreter & " konnte in Zeile " & y & " in Spalte B nicht gefunden werden"
End If
Else
mldg = kd_vertreter & " wurde in Spalte A nicht gefunden"
Exit Do
End If
Loop Until j &gt y
MsgBox mldg
Und weshalb nutzt Du 2 Textboxen? kd_Bereich und kd_vertreter wenn doch beides identisch sein soll? Naja, Du wirst es schon wissen.
Ciao, Ralf
Anzeige
AW: Exakte Zeile finden
13.10.2005 16:28:06
Roli
hallöchen!
DAs klappt leider nicht so ganz! Ich poste vom Butteon "zukundendaten" den ganzen Code

Private Sub kd_zukundendaten_Click()
Dim strPWort As String, a As Long
Application.ScreenUpdating = True
Dim y As Integer
On Error Resume Next
With vertreterblatt
y = .Range("A:A").Find(Me.kd_bereich, LookIn:=xlValues).Row
j = .Cells(y, 2).Find([vertreter], LookIn:=xlValues).Row
strPWort = .Cells(j, 4)
End With
'pw-textbox
If Me.kd_bereich = "" Then
MsgBox "Wählen Sie einen Bereich aus!", vbCritical
Exit Sub
End If
'If Me.kd_vertreternr = "" Then
'    MsgBox "Geben Sie einen vertreternamen bzw. wählen Sie Ihre vertreternummer!", vbCritical
'    Exit Sub
'End If
If Me.kd_Passwort.Text = "" Then
MsgBox "Sie haben kein Passwort eingegeben.", vbCritical
'    Me.kd_zukundendaten.Visible = True
Me.MultiPage1.Value = 0
Exit Sub
End If
If Me.kd_Passwort.Text <> strPWort Then
MsgBox "Das Passwort ist falsch. Geben Sie das richtige Passwort ein!", vbCritical
Me.kd_Passwort = ""
Me.kd_Passwort.SetFocus
Exit Sub
Else
Me.MultiPage1.Value = 1
With vertreterblatt
'preisliste je nach Vertreter auswerten
j = .Range("B:B").Find(Me.kd_Vertreter, LookIn:=xlValues).Row
k = 11
Do Until .Cells(j, k) = ""
Me.kd_preisliste.AddItem .Cells(j, k)
k = k + 1
Loop
End With
End If
Application.ScreenUpdating = False
End Sub

Die Liste Vertreter ist so aufgebaut:
Spalte A steht der Bereich A/B und C. Im Bereich A gibt es folgende Vertreter: Roland und Ralph. Spalte B hat Roland, Ralph und Sophie etc. In Spalte D sind die ganzen Passwörter.
Wenn ich den Textbox kd_Bereich anklicke, dann wird genau von diesem Bereich die Namen in einer Listbox angezeigt. kd_Vertreter
Wie du siehst, kann Bereich A und Bereich B gleiche Namen enthalten, doch muss ich wissen, welche Zeile ich hervorrufe.
Dieser Button ist im Enddeffekt eine Passwortprüfung.
Hoffe sehr, du könntest mir weiterhelfen.
Liebe Grüße
Roli
Anzeige
AW: Exakte Zeile finden
13.10.2005 17:29:24
Ralf
Hi Roli,
hab mal den wirklich relevanten Code ausgeschnitten und versuche mal eine Interpretation.
With vertreterblatt
y = .Range("A:A").Find(Me.kd_bereich, LookIn:=xlValues).Row
j = .Cells(y, 2).Find([vertreter], LookIn:=xlValues).Row
strPWort = .Cells(j, 4)
End With
Besagt:
Suche im Vertreterblatt, in Spalte A nach dem in kd-bereich eingebenen Namen (Bsp. Roland), ermittle die Zeilennummer und weise sie y (Bsp. 3)zu. Im selben Blatt, Spalte B nach dem in vertreter angegebenen Namen (Bsp. Roland) suchen und die Zeilennummer j (Bsp. 4) zuweisen. In Zelle Dj das Passwort auslesen.
Soweit, so gut. In A und B können die gleichen Namen mehrmals vorkommen. Momentan ermittelst Du immer nur das 1. Vorkommen. Ist das Dein Problem (ich befürchte, ich hab es immer noch nicht richtig verstanden!)
Hauptfrage:
Wann und unter welchen Bedingungen soll denn j nun ein Wert zugewiesen werden?
Bei der 1. Übereinstimmung in A oder B?
Bei der 1. Übereinstimmung in A und B?
Bei Übereinstimmung von A und B in der gleichen Zeile?
Bei etwas ganz anderem?
Esrt wenn das klar ist, kann das Problem gelöst werden. Ansonsten ist es wie im trüben zu Fischen.
Ciao, Ralf
Anzeige
AW: Exakte Zeile finden
13.10.2005 19:27:55
Roli
hallo ralph!
Ist kein Problem. Ich versuche nur die richtige Zeile ausfindig zu machen und auf fischen hab ich auch keine Lust ;)
So ungefähr baut sich das Vertreterblatt auf (Bereich/Name/Passwort):
Bereich A Roland pw1
Bereich A Ralph pw2
Bereich A Sue pw3
Bereich B Roland pw1
Bereich B Ralph pw2
Bereich C Roland pw1
Bereich C Ralph pw2
Bereich C Sue pw3
Ich glaube, mein geänderter Code war auch nicht ganz richtig. Die Antwort passt zu deiner dritten Frage. A und B müssen mit kd_Bereich (zu A) und kd_Vertreter (zu B) übereinstimmen um dann die Zeile auslesen, die ich dann zur Passwortprüfung brauche.
Gruß Roli
Anzeige
AW: Exakte Zeile finden
13.10.2005 19:33:52
Roli
nebenbei noch eine Frage. Lässt sich an diesem Code etwas optimieren, dass der Code etwas besser läuft?
Roli
AW: Exakte Zeile finden
13.10.2005 21:01:29
Ralf
Hi Roli,
nur noch mal um ganz sicher zu gehen. Weiter oben hattest Du gesagt, Spalte A setzt sich zusammen aus A/B und C. Also sieht das Tatsächlich so aus?:
Spalte A Spalte B Spalte C
Bereich A Roland pw1 Roland pw1
Bereich A Ralph pw2 Ralph pw2
Bereich A Sue pw3 Sophie pw3
Bereich B Roland pw1 usw...
Bereich B Ralph pw2
Bereich C Roland pw1
Bereich C Ralph pw2
Bereich C Sue pw3
...und Du brauchst aus Spalte A den Teilstring für den Bereich und einen Teilstring für den Namen. Wenn dann Bereich und Name in A übereinstimmen, dann nach dem Namen in B suchen? Das richtige Passwort steht dann in C in der gleichen Zeile wie in Spalte B. Ist das so richtig?
Ciao, Ralf
Anzeige
AW: Exakte Zeile finden
13.10.2005 21:49:28
Roli
hallo Ralph!
Genau so habe ich es mir vorgestellt. Auf jeden Fall zuerst den Bereichsnamen in Spalte A absuchen zB Bereich A gibt es nur zwischen Zeile 2 - 5.
Logischerweise befindet sich der Vertretername in Spalte B nur zwischen Zeile 2 - 5. Der gefundene Wert in Spalte B stellt den tatsächlichen Zeilennummer dar, und die nehme ich für die Passwortprüfung vor = .cells(j, 3).
Liebe Grüße
Roli
AW: Exakte Zeile finden
14.10.2005 10:51:58
Ralf
Hallo Roli,
hat etwas gedauert, aber ich hatte noch ein paar andere Patienten zu verarzten. Ich hoffe, das kommt jetzt Deinen Vorstellungen nahe...
Dim y#, j#, mldg$, lz#
On Error Resume Next
lz = Sheets("Tabelle3").UsedRange.SpecialCells(xlCellTypeLastCell).Row
Do
y = Range("A:A").Find(kd_bereich).Row
If y &lt&gt 0 Then
If y = 2 Then y = 1
j = Range("B" & y).Find(kd_vertreter).Row
If j = 0 Then
Weiter:
j = Range("B" & y & ":B" & lz).Find(kd_vertreter).Row
If j &lt&gt 0 Then
mldg = kd_vertreter & " wurde in zeile " & j & " gefunden"
Exit Do
Else
mldg = kd_vertreter & " konnte nicht gefunden werden"
Exit Do
End If
Else
GoTo Weiter
End If

Else
mldg = kd_bereich & " wurde in Spalte A nicht gefunden"
Exit Do
End If
Loop Until j &gt 0
MsgBox mldg
Ciao Ralf
Anzeige
AW: Exakte Zeile finden
15.10.2005 23:23:36
Roli
hallo Ralf!
Ich bin erst heute dazu gekommen, diesen Code einzubauen. Es funktioniert super.
Die Variablen-Komplierung habe ich in
Dim y as integer, j as integer, lz as integer, mldg as variant
umbenannt.
Ich kenne Dim y#, j# etc... bedeutet as double, und soweit ich das mitbekommen habe, ist die Speicherreservierung erheblich höher...
Liebe Grüße
Roli
AW: Exakte Zeile finden
16.10.2005 09:27:36
Ralf
Hi Roli,
es stimmt was Du sagst. Allerdings solltest Du paar Dinge beachten.
Hier ein Auszug aus der Hilfe:
Variablen vom Datentyp Integer werden als 16-Bit-Zahlen (2 Bytes) in einem Bereich von -32.768 bis 32.767 gespeichert. Das Typkennzeichen für Integer ist das Zeichen (%).
Bei Zeilenadressierung ist also Double angebracht. Oder kannst Du garantieren dass nur 32767 Zeilen benutzt werden? Speicherprobleme wirst Du deshalb keine bekommen.
Verzichte, wann immer Du kannst auf Variant.
Ciao, Ralf
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige