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.

per VBA Datum in Spalte finden und Zeilen-Nr. verwenden
#1
Hallo

Ich war mir sicher, zu meinem Problem schnell was zu finden. Jedoch ist es meist zu speziell oder ich denke zu kompliziert.

Ich habe zwei Blätter, "Tagesdaten" und "Formular". Im Formular wird ein Datum eingegeben, danach per Zellenformel ein Enddatum berechnet.
Diese beiden Daten sollen bei Eingabe E2 im VBA benutzt werden (If Target.Column = 5 Then ...) um:
- in "Tagesdaten" A:A das Anfangs- und Enddatum zu finden. Ein Datum kann mehrmals vorkommen (bei Vergleich() würde ich es mit ;0 bzw. 1 finden). Die jeweiligen Zeilen sind jedenfalls wichtig. Ich komme zwar mit dem Makro-Rekorder auf Match, aber wie stelle ich es an um einfach das Ergebnis in eine Variable zu schreiben.
- in "Formular" zwischen dem Begriff "Tag" + 3 Zeilen und "Summe" - 1 Zeile je in A:A alle übrigen Zeilen zu löschen
- in "Formular" nach dem Begriff "Tag" + 3 Zeilen die Anzahl Zeilen Enddatum - Anfangsdatum +1 einzufügen
- Rest bekomme ich gedanklich erstmal selber hin.

Momentan in anderer Mappe mit anderem Hintergrund in Verwendung und da in Benutzung für mich auch verständlich. Sicher kann man da was verwenden:
Code:
   summzeile = Application.Match("Summe", Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row), 0)
   Application.EnableEvents = False
(...)
       Rows(endzeile + 1).Insert Shift:=xlDown
End Sub

Sub löschen(ByVal summzeile As Variant)
  Dim i As Long
  On Error GoTo fehler
'Leere Zeilen am Ende werden gelöscht
  For i = summzeile - 3 To 8 Step -1
        If Application.CountA(Range(Cells(i, 1), Cells(i, 7)), Range(Cells(i, 9), Cells(i, 11))) = 0 Then
           Rows(i).Delete
        End If
  Next i


Ich habe hier etwas gefunden: http://www.clever-excel-forum.de/thread-...age-2.html
Da mir aber das zusammenhängende Verständnis mit VBA fehlt finde ich nur Bruchstücken und weiß nicht, was ich draus machen soll.


Code:
Private Sub CommandButton1_Click()

   Dim lngLast As Long

   If TextBox1 <> "" Or TextBox2 <> "" Then
      With Sheets("Tabelle2")
         .Cells.Clear
         .Range("A1:B1") = Worksheets("Auswertung-Eingabe").Range("D1").Value
         If TextBox1 <> "" Then .Range("A2") = ">=" & Format(TextBox1.Text, "YYYY-MM-DD")
         If TextBox2 <> "" Then .Range("B2") = ">=" & Format(TextBox2.Text, "YYYY-MM-DD")
      End With
      
      With Worksheets("Auswertung-Eingabe")
         lngLast = .Cells(.Rows.Count, 4).End(xlUp).Row
         .Range("D1:J" & lngLast).AdvancedFilter Action:= _
              xlFilterCopy, CriteriaRange:=Sheets("Tabelle2").Range("A1:B2"), CopyToRange:=Sheets("Tabelle2").Range("A5"), _
              Unique:=False
      End With
      
      With Sheets("Tabelle2")
         lngLast = .Cells(.Rows.Count, 1).End(xlUp).Row
         .PageSetup.PrintArea = "$A$5:$C$" & lngLast
      End With
   End If
   
End Sub
Schon mal Danke!
Grüße,

Hardilein
mit Excel 2003, 2019
Antworten Top
#2
Hallo nochmal.


Ich habe jetzt noch im "Formular" einen Code hinzugefügt, der mir zumindest erstmal paar Zeilen leer zur Verfügung stellt. Dann muss es nur den tatsächlich benötigten entsprechen.


Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
Application.ScreenUpdating = False
If Target.Column = 5 And Target.Row = 2 Then
   datezeile = Application.Match("Datum", Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row), 0)
   Cells(datezeile, 3) = ""
   If datezeile > 11 Then Rows("8:" & datezeile - 5).Delete
   Rows("8:26").Insert
   Range("A7:J27").FillDown
   Cells(6, 2).Select
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Danke für weitere Hilfe.
Grüße,

Hardilein
mit Excel 2003, 2019
Antworten Top
#3
Hallo 
Also ich frage noch mal nach einem Tipp für die Suche nach einem Start-Datum und End-Datum in "Tagesdaten"A:A, welches in dem ausführenden Blatt "Formular" in Zelle E2 geschrieben steht.
Ich brauche Start-Datum-Zeile und End-Datum-Zeile als Variable zur weiteren Verwendung.
Alles was ich finden kann funktioniert entweder nicht oder entspricht nicht dem was ich brauche.
Vielleicht findet sich doch noch ein Helfender. Danke
Grüße,

Hardilein
mit Excel 2003, 2019
Antworten Top
#4
Hi Hardi,

(29.03.2015, 16:09)Hardilein schrieb: Also ich frage noch mal nach einem Tipp für die Suche nach einem Start-Datum und End-Datum in "Tagesdaten"A:A, welches in dem ausführenden Blatt "Formular" in Zelle E2 geschrieben steht.
Ich brauche Start-Datum-Zeile und End-Datum-Zeile als Variable zur weiteren Verwendung.
Alles was ich finden kann funktioniert entweder nicht oder entspricht nicht dem was ich brauche.
Vielleicht findet sich doch noch ein Helfender. Danke

nicht, daß Du meinst, wir ignorieren Dich, aber ich habe momentan keine Idee, wie ich Dir helfen könnte.
Antworten Top
#5
Hallo

Bist du ganz allein hier?  :19:

Ich in mittlerweile ein Stückchen weiter und das nächste Stückchen suche ich gerade.

Habe den Makrorek. bedient und kam dann mittels guugl zu dem hier:

Code:
Sub Makro2()
Dim ende

   MsgBox Application.Match(Worksheets("Wochenbericht").Cells(2, 5), Worksheets("Tagesdaten").Range("A:A"), 1)

ende = Mid$(Worksheets("Formular").Cells(2, 7), 8) 'da steht Text und dann das Datum in Form von 29.03.2015

MsgBox Application.Match(ende, Worksheets("Tagesdaten").Range("A:A"), 1) 'und das geht nicht weil ich noch den String aus Mid in ein Date umwandeln muss - denke ich mal.

End Sub

Mal sehn wer schneller ist.

Danke, bis gleich.
Grüße,

Hardilein
mit Excel 2003, 2019
Antworten Top
#6
Hallo,

versuch mal so:


Code:
MsgBox Application.Match(CLng(CDate(ende)), Range("A:A"), 1)
Gruß Atilla
Antworten Top
#7
Danke, klappt.

Was auch immer (ohne nachzusehen) CLng() bedeutet, aber es funzt.


Hier der komplette Code in meinem Blatt. Damit wäre wieder ein Schritt erreicht.
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Woche
Dim datezeile
Application.EnableEvents = False
Application.ScreenUpdating = False
If Target.Column = 5 And Target.Row = 2 Then
   datezeile = Application.Match("Datum", Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row), 0)
   Cells(datezeile, 3) = ""
   If datezeile > 11 Then Rows("8:" & datezeile - 4).Delete
   Woche = Application.Match(CLng(CDate(Mid$(Cells(2, 7), 8))), Worksheets("Tagesdaten").Range("A:A"), 1) _
   - Application.Match(Cells(2, 5), Worksheets("Tagesdaten").Range("A:A"), 0) + 1
   Rows("8:" & 8 + Woche - 3).Insert 'in 6 + 7 stehen Formeln zum runterziehen
   Range("A7:A" & 7 + Woche - 2).FillDown
   Range("B6:J" & 7 + Woche - 2).FillDown ' wird noch geändert und die Formeln komplett eingefügt - wenn Zeit ist
   Cells(6, 2).Select
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Grüße,

Hardilein
mit Excel 2003, 2019
Antworten Top


Gehe zu:


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