Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

In bestimmtem Bereich nach Wörtern suchen
#1
Hallo zusammen,

ich hätte folgende Frage zu Excel.

Ich arbeite gerade an einem Code, welcher mir in einem Tabellenblatt in einer Spalte den höchsten Zahlenwert suchen soll.
Hat er diesen gefunden, soll er eine bestimmte Anzahl an Wörtern aus einem anderen Tabellenblatt mit den Wörtern, welche in den Zellen hinter dem ermitelten höchsten Zahlenwert stehen abgleichen und wenn diese vorhanden sind kopieren.

Ich denke, dass ich da mit der "Find" Funktion arbeiten muss, um einen definierten Zeilenbereich nach den gesuchten Wörtern abzugrasen. Mein Problem ist aber, dass ich ja nie weiß in welcher Zeile sich der höchste Zahlenwert befindet. Wie kann ich das flexibel aufbauen?

Für Tipps wäre ich sehr dankbar.

Vielen Dank!
Antworten Top
#2
Hallo, 19

also mit...
Code:
Dim dblMAX As Double
dblMAX = Application.Max(Range(Cells(1, 2), Cells(Rows.Count, 2).End(xlUp)))

... findest du die größte Zahl in Spalte B.

Und hiermit...
Code:
Application.FindFormat.Clear
With Tabelle2
    Set rngFind = .UsedRange.Find(Application.Max(.Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp))), LookIn:=xlValues, LookAt:=xlWhole)
End With
If Not rngFind Is Nothing Then strTMP = rngFind.Address 'Oder rngFind.Row für Zeile

... dann gleich die Fundadresse bzw. Fundzeile in Tabelle2. 21
________
Servus
Case
Antworten Top
#3
Hi Case,



erst mal vielen Dank für deine schnelle Antwort  19



Dank meiner begrenzten Fähigkeiten weiß ich aber leider nicht so ganz wie ich es einbauen muss das es funktioniert.
Den ersten Code verstehe ich, beim zweiten blicke ich aber ehrlich gesagt nicht mehr durch, bzw. weiß nicht wie ich ihn für meine Zwecke umbauen muss.
Evtl habe ich mich auch nicht richtig ausgedrückt, deswegen versuche ich es nochmal zu erläutern. Dazu auch ein Auszug aus meinem Code:


Code:
'Höchsten Zahlenwert und zugehörigen Namen finden
With Worksheets("Program Data").Range("BO5:BO64")

    Set d = .Find(Application.WorksheetFunction.Max(Worksheets("Program Data").Range("BO5:BO64")), LookIn:=xlValues) 'Sucht den höchsten Zahlenwert

    If Not d Is Nothing Then

    Namen = d.Offset(0, -1) 'Gibt den Namen zum höchsten Zahlenwert aus welcher in der Zelle links steht

    End If

End With


In den Zellen "BP, BQ, BR, BS..." kann nun in jeder Zelle ein einzelnes Wort stehen. Ich möchte prüfen, ob diese Wörter mit den Wörtern aus einem anderen Tabellenblatt übereinstimmen und falls ja eine Aktion ausführen.



Mein erster Ansatz war mit einer "oder" Schleife:



Code:
'Prüfen ob die Wörter in Tabelle1 in den Zellen rechts vom höchsten Zahlenwert vorkommen
For x = 20 To 5 Step -1
If Worksheets("Tabelle1").Cells(x, 10) = d.Offset(0, 1) Or Worksheets("Tabelle1").Cells(x, 10) = d.Offset(0, 2) Or Worksheets("Tabelle1").Cells(x, 10) = d.Offset(0, 3)... Then
    If Worksheets("Tabelle1").Cells(x, 11) = d.Offset(0, 1) Or Worksheets("Tabelle1").Cells(x, 11) = d.Offset(0, 2) Or Worksheets("Tabelle1").Cells(x, 11) = d.Offset(0, 3)... Then
        ...


Problem is dann halt, dass ich verdammt lange "oder" Verknüpfungen bekomme, weil für jede Zeile im Tabellenblatt "Program Data" bis zu 60 Zellen zu durchsuchen sind. Deswegen dachte ich an einen Befehl, mit dem ich einen definierten Bereich einer Zeile nach dem gesuchten Wort durchsuchen kann.



Ich hoffe ich konnte es etwas besser erläutern. Ich kann auch gerne versuchen eine Beispieldatei zu erstellen / hochzuladen wenn das hilft?



Danke & Gruß

Sebbo
Antworten Top
#4
(01.04.2021, 14:53)Sebbo schrieb: Ich kann auch gerne versuchen eine Beispieldatei zu erstellen / hochzuladen wenn das hilft?

Hallo, 19

das wäre sehr hilfreich. Eine aussagekräftige Beispieldatei ist immer gut. 21
________
Servus
Case
Antworten Top
#5
Hi Case,

ich habe mich jetzt mal hingesetzt und versucht das Ganze in einer Beispieldatei zusammen zu fahren.
Mit einer Beschreibung um was es mir konkret geht.

Bitte nicht erschrecken, ich erwarte/verlange jetzt nicht, dass du mir hierzu das komplette Makro schreibst 89 

Ich habe mal in der Beschreibung rot markiert wo es aktuell bei mir hängt:
Nämlich wie kann ich es umsetzen, dass er mir zu einem Namen (und diesem Namen zugeordneten Wörtern) in einem Tabellenblatt prüft, ob unter demselben Namen in einem anderen Tabellenblatt dieselben Wörter in der Zeile in welcher auch der Namen steht (aber an beliebiger Stelle) abgelegt sind. Wie gesagt mit einer "Oder" Verknüpfung jede einzelne Zelle abzufragen wird ein Riesen Datenwulst. Es gibt bestimmt einen Befehl, mit dem man einen Zeilenbereich nach einem Wort abszuchen kann. Da hören meine begrenzten VBA Kenntnisse aber leider auf...

Wenn du mir dazu eine Hilfestellung geben könntest wäre das super 19 

Vielen Dank!

Gruß
Sebbo


Angehängte Dateien
.xlsm   Suchen.xlsm (Größe: 27,04 KB / Downloads: 5)
Antworten Top
#6
Vielleicht noch eine Frage mit der ich mein Problem lösen könnte:

Ich habe über den "Find" Befehl eine Zelle gefunden und einer Variable (hier d) zugewiesen.
Die Zellenadresse (in diesem Fall $BN$6) erhalte ich denn mit d.offset(0, -1).address

Wie kann ich das in einem "Find" Befehl verbauen?

Also z.B. mit

Code:
Set cell = Tabelle2.Range("BN6:BN50").Find("Zwerg", SearchOrder:=xlRows)

Da das Ganze ja flexibel ist, müsste ich jetzt für BN6 irgendwie meine Variable mit dem Offset einbauen (Gedanklich so):

Code:
Set cell = Tabelle2.Range("d.offset(0,0):d.offset(0,50)").Find("Zwerg", SearchOrder:=xlRows)

Also so in die Richtung, ich hoffe ihr versteht was ich meine. Aber so funktioniert es halt nicht. Wie kann ich die offset Variable korrekt einbauen? Kann mir da jemand helfen?
Antworten Top
#7
Hallo

so sollte es gehen, ich bevorzuge die 2. Variante   
(bitte auf die Z/S = Zeile/Spalte Schreibweise achten!!  Offset(0, 50) geht nach Rechts! über Spalten  Offset(50, 0) geht nach unten!!

Zitat:Set cell = Tabelle2.Range(d.Offset(0,0), d.Offset(50,0)).Find("Zwerg", SearchOrder:=xlRows)

Adr = Find.Address
Edr = Find.Offset(50, 0).Address
Set cell = Tabelle2.Range(Adr, Edr).Find("Zwerg", SearchOrder:=xlRows)

mfg Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Sebbo
Antworten Top
#8
Hi Gast123

vielen herzlichen Dank für deine Hilfe!  23 23 23
Funktioniert super! Jetzt komme ich auch wieder weiter (bis zum nächsten Stolperstein 19 ).

Danke nochmal und allen frohe Ostern!

Viele Grüße
Sebbo
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste