In Spalte Zahl suchen und Zeilennummer ausgeben
#1
Hallo,

mit folgendem Code such ich nach einem Begriff in einer oder mehreren Spalten:
      With Sheets(arrTab(i))
         loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte Zeile der Spalte A (1) 
         Set k = .Range("H2:H" & loLetzte).Find(strText, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
         lngAdressZeile = .k.Row                        'so gehts nicht! 
      End With


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15


Nun benötige ich die Zeilennummer. Wie ermittle ich die?

Mit Range(k).Row oder k.Row geht es nicht.
Top
#2
Hallo Ralf

wie sind denn lngAdressZeile und k deklariert?

k als Range und lngAdressZeile als Long?

dann sollte k.Row schon passen

MfG Tom
Top
#3
Hi Tom,

(14.02.2016, 18:38)Crazy Tom schrieb: k als Range und lngAdressZeile als Long?

ja, so sind sie deklariert.

   For i = 0 To Ubound(arrTab)                          'Schleife über die Tabellen 
      With Sheets(arrTab(i))
         loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte Zeile der Spalte A (1) 
         Set k = .Range("H2:H" & loLetzte).Find(strText, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
'         MsgBox (k) 
'         lngAdressZeile = .k.Row                        'so gehts nicht! 
      End With
      If Not k Is Nothing Then
         ' Möglichkeit 1 - Marose und Atilla 
         Application.GoTo k, Scroll:=True             'diese Zeile macht dasselbe, wie in Möglichkeit 2 
         
         ' Möglichkeit 2  - Kaptn Blaubaer 
         '         Sheets(arrTab(i)).Activate 
         '         Cells(k.Row, k.Column).Select 
         '         ActiveWindow.ScrollRow = ActiveCell.Row 
         Exit For
      End If
   Next i


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15


Wenn ich das Makro so laufen lasse, wird die entsprechende Zelle im Datenblatt angesprungen.
Mit der auskommentierten Msgbox wird nicht die Zeile ausgegeben oder der Zellbereich, sondern der gesuchte Wert, also kann es nicht funktionieren.

Jetzt mal ganz weg von meinem Code:
Wie könnte denn ein Makro aussehen, das mir die Zeilennummer ausgibt, in der eine gesuchte Zahl steht?
Also ein neuer Code.
Top
#4
Hallo Ralf

so habe ich es getestet, wobei ich natürlich nicht dein Array habe sondern eine Tabelle1
Code:
Sub test()
   Dim loLetzte As Long
   Dim lngAdressZeile As Long
   Dim k As Range
   Dim strText As String
   strText = "huhu"
   With Sheets("Tabelle1")
       loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte Zeile der Spalte A (1)
       Set k = .Range("H2:H" & loLetzte).Find(strText, LookIn:=xlValues, LookAt:=xlPart, _
           SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
       lngAdressZeile = k.Row                        'so gehts ;-)
       MsgBox lngAdressZeile
   End With
End Sub

MfG Tom
Top
#5
Hallo Ralf

hier noch ein Nachtrag
falls der Wert nicht gefunden wird darf das hier nicht fehlen
Code:
Sub test()
   Dim loLetzte As Long
   Dim lngAdressZeile As Long
   Dim k As Range
   Dim strText As String
   strText = "huhu"
   With Sheets("Tabelle1")
       loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte Zeile der Spalte A (1)
       Set k = .Range("H2:H" & loLetzte).Find(strText, LookIn:=xlValues, LookAt:=xlPart, _
           SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
       If Not k Is Nothing Then
           lngAdressZeile = k.Row                        'so gehts ;-)
           MsgBox lngAdressZeile
       End If
   End With
End Sub
MfG Tom
Top
#6
Hi Ralf!
MsgBox (k) gibt Dir den default des Range-Objektes zurück, dies ist .Value also der Wert.
Was ergibt MsgBox k.Address?

(Ich schätze mal, die korrekte Adresse)
Insofern ist k.Row eigentlich richtig.

Datei?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Moin Ralf,

du suchst doch eine Zahl? Da ist die Suche nach Text nicht unbedingt hilfreich ... Darum:


Code:
Sub ZeileAusgeben_GMG()
  Dim lRow As Long, rngData As Range, rngFund As Range
 
  lRow = Cells(Rows.Count, 1).End(xlUp).Row
  Set rngData = Range("A1:B" & lRow).Find(333, LookIn:=xlValues, LookAt:=xlWhole)
  If Not rngData Is Nothing Then
     MsgBox "Zeile: " & rngData.Row & vbCrLf & "Spalte: " & rngData.Column
  Else
     MsgBox "Gesuchte Zahl nicht gefunden!"
  End If
End Sub
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#8
Hi Tom,

(14.02.2016, 19:51)Crazy Tom schrieb: falls der Wert nicht gefunden wird darf das hier nicht fehlen

da fehlte die Fehlerbehandlung, es war das gleiche Makro wie oben. Aber ich hatte das schon in dem Makro drin.

Mit Deinem Code funktioniert es gut.
Top
#9
Hi Ralf,

(14.02.2016, 20:09)RPP63 schrieb: (Ich schätze mal, die korrekte Adresse)
Insofern ist k.Row eigentlich richtig.

ja, da kam die Adresse.

Ok, da es mit Toms Code funktioniert, lasse ich es dabei.
Top
#10
Hi Günther,

(14.02.2016, 20:18)GMG-CC schrieb: du suchst doch eine Zahl? Da ist die Suche nach Text nicht unbedingt hilfreich ... Darum:

ich teste dein Makro auch gleich mal.

Damit kriege ich es nicht hin. Woher weiß das Makro, was gesucht wird?
Top


Gehe zu:


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