Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

unterste Zelle mit gesuchtem Wert

unterste Zelle mit gesuchtem Wert
12.04.2016 07:21:26
mucki4
Hallo Leute,
ich habe mal wieder ein kleines Problem mit meinem Makro und hoffe, dass es dafür eine Lösung gibt und jemand von euch sie für mich hat ;).
In meinem Code kopiert Excel einen Wert aus einer Tabelle und sucht diesen in einer anderen Exceldatei. Ist es möglich, dass, für den Fall, dass der gesuchte Wert zweimal auftaucht, das Programm in die unterste Zelle springt in der dieser Wert steht?
Codeabschnitt sieht wie folgt aus:
Workbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen").Activate

Range("L6:L7").Select
Selection.Copy
Set Karossentakt = Range("L6:L7")
Set Bez = Workbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen").Range("C4")
Workbooks("Berechnungstabelle 2.xlsm").Sheets("Hallenlayout").Activate
Cells.Select
Selection.Find(What:=Karossentakt, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ZielZeileL = ActiveCell.Row
ZielSpalteL = ActiveCell.Column

"Karossentakt" wird gesucht und kann eventuell öfter vorkommen. Dann möchte ich eben gerne in die unterste Zelle springen, in der dieser steht.
Vielen Dank schonmal und Gruß
Lukas

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: unterste Zelle mit gesuchtem Wert
12.04.2016 10:04:20
UweD
Hallo
ich hab mal einiges umgestellt...
- activate und select kann in 99% entfallen
- .Find(What:=Karossentakt, hier suchst du nach einem vorher festgelegten BEREICH
Ich denke du suchst nach dem TEXT.. dann in Anführungszeichen setzen

Option Explicit
Sub dgdgd()
Dim c, firstAddress, TB1, TB2
Dim ZielZeileL As Double, ZielSpalteL As Integer
Set TB1 = Workbooks("Berechnungstabelle 2.xlsm").Sheets("Hallenlayout")
Set TB2 = Workbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen")
Set c = TB1.UsedRange.Find(What:="Karossentakt", LookIn:=xlFormulas)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If c.Row > ZielZeileL Then
ZielZeileL = c.Row
ZielSpalteL = c.Column
End If
Set c = TB1.UsedRange.FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
TB2.Range("L6:L7").Copy TB1.Cells(ZielZeileL, ZielSpalteL)
'Bez = TB2.Range("C4")
End Sub

Gruß UweD

Anzeige
AW: unterste Zelle mit gesuchtem Wert
12.04.2016 10:24:00
Daniel
Hi
die Unterste Zelle bekommst du, wenn du in der .Find-Funktion die Suchrichtung umdrehst und nicht von oben nach unten, sondern von unten nach oben suchst.
die Suchrichtung steuerst du über den Parameter SearchDirection, dem du dann den Wert xlPrevious anstelle von xlNext zuweist:
Selection.Find(What:=Karossentakt, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False, SearchFormat:=False).Activate

Gruß Daniel

AW: unterste Zelle mit gesuchtem Wert
12.04.2016 12:45:28
mucki4
Servus,
Danke euch schonmal für die Antworten. Bin inzwischen einen Schritt weiter. Die Lösung war genau das was Daniel gesagt hat, mit xlPrevious. Karossentakt ist in dem Fall eine Variable, also das hat schon gepasst.
Nur folgendes Problem hat sich mir jetzt ergeben. der COde geht wie folgt weiter:
Selection.Find(What:=Karossentakt, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False, SearchFormat:=False).Activate
ZielZeileL = ActiveCell.Row
ZielSpalteL = ActiveCell.Column
Cells(ZielZeileL + 1, ZielSpalteL).Select
If Bez ActiveCell.Text Then
Range(ActiveCell.Offset(-1, -1), ActiveCell.Offset(9, 3)).Copy
Range(ActiveCell.Offset(11, -1), ActiveCell.Offset(22, 3)).PasteSpecial
Workbooks("Berechnungstabelle 2.xlsm").Sheets("hallenlayout").Cells(ZielZeileL + 12, ZielSpalteL - 1).Select
Range(ActiveCell.Offset(3, 1), ActiveCell.Offset(10, 6)).ClearContents
Workbooks("Bewertungsbogen 2.xlsm").Activate
Sheets("Bewertungsbogen").Select
Else: Range(ActiveCell.Offset(3, 0), ActiveCell.Offset(9, 3)).ClearContents
Das abfragen und kopieren von dem Bereich funktioniert jetzt.
Problem ist jetzt, was ich vorher nicht bedacht habe, dass er die Abfrage nach "BEZ" jetzt nur von dem untersten Auftreten des jeweiligen Karossentakts aus tut. Was ich allerdings bräuchte, wäre dass er sowohl da abfragt, wo er zum ersten mal aufgetaucht ist, als auch, wenn jetzt ein drittes mal kommt, da wo ich den Bereich hinkopiert habe, er also zum zweiten mal auftaucht.
Es geht darum, dass ein Karossentakt in Verbindungen mit verschiedenen Bezeichnungen auftereten kann. Wenn die Bezeichnung schon vorhanden ist, soll der Bereich einfach überschrieben werden. Wenn eine neue BEzeichnung eingegeben wird, soll eben die IF Abfrage von oben durchgeführt werden, und das ganze kopiert werden.
Falls da noch jemand einen Rat hätte, wäre das überragend.
Danke und Gruß
Lukas
Anzeige

325 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige