Anzeige
Archiv - Navigation
1148to1152
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
Inhaltsverzeichnis

Abfrage mit Makro nur bis Zeile 28

Abfrage mit Makro nur bis Zeile 28
Holger
Hallo zusammen,
ich habe hier im Forum folgendes Makro für eine Abfrage / Ausgabe erhalten. Das Ausführung funktioniert allerdings nur, wenn das Suchkriterium Inhalt der Zeilen 1 bis 28 ist. Ab Zeile 29 wird immer der Teil
Set WkSh = ThisWorkbook.Worksheets("Daten")
WkSh.Range("F2").Value = "M"

des Makros bemüht.
Meine Daten enden aber erst in Zeile 607. Ich kann allerdings in den Programmzeilen keine Beschränkung auf nur 28 Zeilen erkennen - oder gibt es doch eine?
Option Explicit
'
' der Suchbegriff steht in Zelle E2, das Ergebnis in Zelle F2
'

Public Sub Suchen()
Dim WkSh    As Worksheet
Dim lZeile  As Long
Application.ScreenUpdating = False
Set WkSh = ThisWorkbook.Worksheets("Daten")
WkSh.Range("F2").Value = "M"
For lZeile = 2 To WkSh.Cells(Rows.Count, 1).End(xlUp).Row
If Trim(WkSh.Range("E2").Value)  "" And _
IsNumeric(WkSh.Range("E2").Value) Then
If Trim(WkSh.Range("E2").Value) >= Trim(WkSh.Range("A" & lZeile).Value) And _
Trim(WkSh.Range("E2").Value) 

Danke im Voraus
Holger

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Abfrage mit Makro nur bis Zeile 28
13.04.2010 12:05:26
Oberschlumpf
Moin Holger
Die Einschränkung - nur bis Zeile 28 - liegt in dieser VBA-Zeile:
For lZeile = 2 To WkSh.Cells(Rows.Count, 1).End(xlUp).Row

Diese Zeile startet den Schleifendurchlauf in Zeile 2
For lZeile = 2

und endet in der letzten, benutzen Zeile in Spalte A
To WkSh.Cells(Rows.Count, 1).End(xlUp).Row
Du musst also nur die hier fett dargestellte 1 (Spalte A) gegen die Spaltenzahl ersetzen, in der die meisten Einträge (in deinem Fall 607) vorhanden sind.
Bsp
Sind deine meisten Einträge in Spalte D, dann ändere die obige VBA-Zeile so:
For lZeile = 2 To WkSh.Cells(Rows.Count, 4).End(xlUp).Row
4 deswegen, weil Spalte D die 4. Spalte ist.
Sind deine meisten Einträge in Spalte AA, dann ändere die obige VBA-Zeile so:
For lZeile = 2 To WkSh.Cells(Rows.Count, 27).End(xlUp).Row
27 deswegen, weil Spalte AA die 27. Spalte ist.
usw
Hilfts?
Ciao
Thorsten
Anzeige
AW: Abfrage mit Makro nur bis Zeile 28
13.04.2010 12:20:35
Holger
Hallo Thorsten,
das habe ich leider nicht wirklich verstanden, da es sich ja um Zeilen und nicht um Spalten handelt. Ich habe die vollständigen Daten hochgeladen.
https://www.herber.de/bbs/user/69045.xls
Das Makro habe ich mit einer Schaltfläche verknüpft - also Eingabe Suchkriterium in E2, klick auf Termin (F1) und dann Ausgabe in F2.
Gruß Holger
AW: Abfrage mit Makro nur bis Zeile 28
13.04.2010 12:54:57
Oberschlumpf
Hi Holger
Die Zeile
For lZeile = 2 To WkSh.Cells(Rows.Count, 1).End(xlUp).Row

bzw der Teil
WkSh.Cells(Rows.Count, 1).End(xlUp).Row

bestimmt die Spalte, in der alle Zeilen bis zur zuletzt genutzten Zeile gesucht werden soll.
In diesem Fall werden so viele Zeilen überprüft, die in Spalte A benutzt sind.
Wenn du also z Bsp in Spalte A nur 10 Einträge hast, in Spalte B aber 100, werden trotzdem nur 10 Einträge überprüft, da es in Spalte A nur 10 Einträge gibt.
Möchtest du so viele Zeilen überprüfen, wie in Spalte B genutzt werden, muss die VBA-Zeile so aussehen:
For lZeile = 2 To WkSh.Cells(Rows.Count, 2).End(xlUp).Row
Mit der geänderten 2 würden jetzt so viele Zeilen überprüft werden, wie in Spalte B - also 100 - genutzt wurden; auch wenn in Spalte A nur 10 Zeilen genutzt wurden.
Verstanden?
In deiner Bsp-Datei sieht die Zeile so aus:
For lZeile = 2 To WkSh.Cells(Rows.Count, 5).End(xlUp).Row

In diesem Fall werden also so viele Zeilen überprüft, wie in Spalte 5 = Spalte F benutzt werden.
Aber die in Spalte F zuletzt benutzte Zeile ist Zeile 2, in der ja das Ergebnis stehen soll.
Da aber die For-Schleife erst mit 2 beginnt, bedeutet das, das die Schleife nur 1x durchlaufen wird, nämlich
For lZeile = 2 To 2
Da in deiner Bsp-Datei sowohl Spalte A als auch Spalte B gleich viele Zeilen nutzt, musst du die 5 gegen 1 oder 2 tauschen. Dann läuft auch der Code - habs getestet mit den PLZ 1001 (steht in Zeile 30) und 21745 (steht in Zeile 89).
Für deine Original-Datei gilt:
Trage in der VBA-Zeile
For lZeile = 2 To WkSh.Cells(Rows.Count, 5).End(xlUp).Row

anstelle der 5 die Zahl (Spalte) ein, in der die meisten Zeilen benutzt werden.
Hier noch die von mir geänderte Bsp-Datei zurück:
https://www.herber.de/bbs/user/69048.xls
Hilfts?
Ciao
Thorsten
Anzeige
AW: Abfrage mit Makro nur bis Zeile 28
13.04.2010 12:06:05
Rudi
Hallo,
For lZeile = 2 To WkSh.Cells(Rows.Count, 5).End(xlUp).Row
Gruß
Rudi
AW: Abfrage mit Makro nur bis Zeile 28
13.04.2010 12:27:59
Holger
Hallo Rudi,
leider auch nicht - aber ich bin gerade mit Thorsten am schauen.
Danke für Deine Bemühungen!
Antwort?
13.04.2010 12:42:58
Erich
Hi Holger und Thorsten,
das sieht mir doch irgendwie ähnlich aus wie die Frage zu https://www.herber.de/forum/messages/1151273.html
Bekomme ich da noch eine Antwort?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Antwort?
13.04.2010 12:59:37
Oberschlumpf
Huhu Erich
Ich bin ein anderer Thorsten...bin der Oberschlumpf ;-)
Mit dem von dir erwähnten Thread hab ich nix zu tun.
Ciao
Thorsten (der Andere ;-) )
Anzeige
Danke Thorsten, alles klar! (owT)
13.04.2010 13:04:43
Erich
AW: Antwort?
13.04.2010 13:26:39
Holger
Hallo Thorsten,
jetzt habe ich es verstanden.
Aber Eingabe von z.B. 10823 bringt immer Ergebnis 1, obwohl 2 in der Tabelle steht. Ich habe das mal rückverfolgt und kann sagen, dass bis 10669 alles korrekt ausgegeben wird, danach aber immer bis 15939 eine 1 ausgegeben wird. Anschließend scheint es, nach stichprobenartiger Überprüfung bis 80000 zu stimmen. Diese PLZ steht nicht in den Daten und hier sollte nach Makro ein M ausgegeben werden. Angezeigt wird aber eine 1 :(
Gruß Holger
AW: Antwort?
13.04.2010 14:02:05
Oberschlumpf
Hi Holger
Das liegt an deinem Konstrukt

If Trim(WkSh.Range("E2").Value) >= Trim(WkSh.Range("A" & lZeile).Value) And _
Trim(WkSh.Range("E2").Value) 

ändere das doch mal um in

If Range("E2").Value >= Range("A" & lZeile).Value And _
Range("E2").Value 

Zumindest in der Bsp-Datei wird dann für 10823 = 2 angezeigt und für 80000 = M
Was möchtest du denn mit TRIM(... erreichen?
Hilfts?
Ciao
Thorsten
Anzeige
AW: Antwort?
13.04.2010 17:57:30
Holger
Hallo Thorsten,
wie gesagt habe ich das Makro hier im Forum bekommen und kenne mich mit diesen Dingen nicht aus. Deshalb kann ich Deine Frage: "Was möchtest du denn mit TRIM(... erreichen?" nicht beantworten ;)
Aber ansonsten funktioniert es jetzt wunderbar.
Danke für Deine Geduld und Hilfe!
Gruß Holger
mal eine Antwort von mir...
14.04.2010 01:09:52
mir...
Hi Holger,
die Herkunft des Codes ist jetzt klar, und auch, was wie den Fehler produzierte.
Ich habe den Code etwas umgeschrieben:

Option Explicit
' Code ursprüngl. von Peter Feustel,
' www.herber.de/forum/archiv/1148to1152/t1150915.htm#1150939
Public Sub Suchen()
' Suchbegriff steht in Zelle E2, das Ergebnis in Zelle F2
Dim lZeile  As Long
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("Daten")
.Cells(2, 6).Value = "M"   ' F2
For lZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If Trim(.Cells(2, 5).Value)  "" And _
IsNumeric(.Cells(2, 5).Value) Then
If .Cells(2, 5).Value >= .Cells(lZeile, 1).Value And _
.Cells(2, 5).Value 
Durch den Einsatz von Trim() wurden in der früheren Version die PLZen nicht als Zahlen, sondern als Texte verglichen,
allerdings ohne die führende 0.
Beispiel: In A20 wird 06108 angezeigt, allerdings nur wegen des Formats.
Der Wert der Zelle ist die Zahl 6108 - so auch zu sehen in der Bearbeitungsleiste.
Trim(6108) macht daraus einen Text, und der ist größer als z. B. Trim(32109), weil die 6 mit der 3 verglichen wird.
Es ist eben kein Zahlenvergleich, sondern ein zeichenweiser Textvergleich, ein "Buchstabenvergleich" wie im Telefonbuch.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mal eine Antwort von mir...
14.04.2010 08:18:42
mir...
Hallo Erich,
danke für Deine Mühe - ich hatte gestern von Thorsten was Ähnliches bekommen. Beides funktioniert hervorragend - Vielen Dank noch mal!
Gruß Holger

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige