Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
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

vba-Liste von Daten aus Arbeitsblättern

vba-Liste von Daten aus Arbeitsblättern
16.02.2019 15:04:54
Daten

Hallo Ex(cel)perten,
jede Woche gehe ich Mappen mit mehreren Blättern durch, um gewisse Daten zu sammeln,- vielleicht könnte dieses mit vba verkürzt werden.
Die Mappe hat max. 22 Arbeitsblätter, u.a. mit den Blattnamen 1,2,3 .. bis max. 20
In Arbeitsblatt "Stichworte" steht in "A1" ein Datum.
gesucht wird:
in den Blättern 1 bis max. 20, Spalte "B" nach den Datumswert, die gleich oder höher liegen, als das Datum in Blatt "Stichworte", "A1"
Findet sich das Kriterium, soll aus der gleichen Zeile der Wert in Spalte "AV" und der jeweilige Blattname im Blatt "Stichworte" ab "A2:B2" eingetragen werden. - Weitere "Treffer" darunter.
PS: Ein Blatt kann mehrere "Treffer" haben.
Kann mir bitte jemand bei der Umsetzung helfen.
Mit freundlichen Gruß
Fred Neumann

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba-Liste von Daten aus Arbeitsblättern
16.02.2019 15:15:00
Daten
Ohne Datei - schwer.
AW: vba-Liste von Daten aus Arbeitsblättern
16.02.2019 15:40:51
Daten
Hallo Fred,
Modul Modul1
Option Explicit 
 
Sub collectData() 
  Dim objWS As Worksheet, rng As Range, lngLast As Long 
  Dim varOut() As Variant, lngI As Long, lngR As Long, lngSheet As Long 
  Dim datSearch As Date 
 
  datSearch = Sheets("Stichworte").Range("A1") 
 
  For lngSheet = 1 To 20 
    If SheetExist(CStr(lngSheet)) Then 
      With Sheets(CStr(lngSheet)) 
        lngLast = Application.Max(1, .Cells(.Rows.Count, 2).End(xlUp).Row) 
        For lngR = 1 To lngLast 
          If IsDate(.Cells(lngR, 2)) Then 
            If .Cells(lngR, 2) >= datSearch Then 
              Redim Preserve varOut(lngI) 
              varOut(lngI) = Array(.Cells(lngR, 48), lngSheet) 
              lngI = lngI + 1 
            End If 
          End If 
        Next 
      End With 
    End If 
  Next 
 
  If lngI > 0 Then 
    With Sheets("Stichworte") 
      .Range("A2:B" & .Rows.Count) = "" 
      .Range("A2").Resize(lngI, 2) = Application.Transpose(Application.Transpose(varOut)) 
    End With 
  End If 
 
End Sub 
 
Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook, Optional ByVal byCodeName As Boolean = False) As Boolean 
  Dim wks As Object 
  On Error GoTo ERRORHANDLER 
  If Wb Is Nothing Then Set Wb = ThisWorkbook 
  For Each wks In Wb.Sheets 
    If byCodeName Then 
      If LCase(wks.CodeName) = LCase(sheetName) Then SheetExist = True: Exit Function 
    Else 
      If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function 
    End If 
  Next 
ERRORHANDLER: 
  SheetExist = False 
End Function 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: echt spitze Sepp
16.02.2019 16:44:24
Fred
Hallo Sepp,
danke für die Mühe und das Makro!! -- funzt.
Dir noch ein schönes Wochenende.
Gruß
Fred
AW: vba-Liste von Daten aus Arbeitsblättern
16.02.2019 17:12:21
Daten
Hallo Sepp,
kann man den Code eventuell noch so umsetzen, dass bei einer gefilterten Tabelle eben nur die gefilterten Werte berücksichtigt werden? -- ansonsten alles gleich bleibend.
Gruß
Fred
AW: vba-Liste von Daten aus Arbeitsblättern
16.02.2019 17:57:04
Daten
Hallo Fred,
Modul Modul1
Option Explicit 
 
Sub collectData() 
  Dim objWS As Worksheet, rng As Range, lngLast As Long 
  Dim varOut() As Variant, lngI As Long, lngR As Long, lngSheet As Long 
  Dim datSearch As Date 
 
  datSearch = Sheets("Stichworte").Range("A1") 
 
  For lngSheet = 1 To 20 
    If SheetExist(CStr(lngSheet)) Then 
      With Sheets(CStr(lngSheet)) 
        lngLast = Application.Max(1, .Cells(.Rows.Count, 2).End(xlUp).Row) 
        For lngR = 1 To lngLast 
          If IsDate(.Cells(lngR, 2)) And Not .Rows(lngR).Hidden Then 
            If .Cells(lngR, 2) >= datSearch Then 
              Redim Preserve varOut(lngI) 
              varOut(lngI) = Array(.Cells(lngR, 48).Value, lngSheet) 
              lngI = lngI + 1 
            End If 
          End If 
        Next 
      End With 
    End If 
  Next 
 
  If lngI > 0 Then 
    With Sheets("Stichworte") 
      .Range("A2:B" & .Rows.Count) = "" 
      .Range("A2").Resize(lngI, 2) = Application.Transpose(Application.Transpose(varOut)) 
    End With 
  End If 
 
End Sub 
 
Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook, Optional ByVal byCodeName As Boolean = False) As Boolean 
  Dim wks As Object 
  On Error GoTo ERRORHANDLER 
  If Wb Is Nothing Then Set Wb = ThisWorkbook 
  For Each wks In Wb.Sheets 
    If byCodeName Then 
      If LCase(wks.CodeName) = LCase(sheetName) Then SheetExist = True: Exit Function 
    Else 
      If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function 
    End If 
  Next 
ERRORHANDLER: 
  SheetExist = False 
End Function 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
besser so
16.02.2019 19:03:04
Sepp
Modul Modul1
Option Explicit 
 
Sub collectData() 
  Dim objWS As Worksheet, rng As Range, lngLast As Long 
  Dim varOut() As Variant, lngI As Long, lngR As Long, lngSheet As Long 
  Dim datSearch As Date 
 
  datSearch = Sheets("Stichworte").Range("A1") 
 
  For lngSheet = 1 To 20 
    If SheetExist(CStr(lngSheet)) Then 
      With Sheets(CStr(lngSheet)) 
        lngLast = Application.Max(1, .Cells(.Rows.Count, 2).End(xlUp).Row) 
        For lngR = 1 To lngLast 
          If IsDate(.Cells(lngR, 2)) And Not .Rows(lngR).Hidden Then 
            If .Cells(lngR, 2) >= datSearch Then 
              Redim Preserve varOut(lngI) 
              varOut(lngI) = Array(.Cells(lngR, 48).Value, lngSheet) 
              lngI = lngI + 1 
            End If 
          End If 
        Next 
      End With 
    End If 
  Next 
 
  With Sheets("Stichworte") 
    .Range("A2:B" & .Rows.Count) = "" 
    If lngI > 0 Then .Range("A2").Resize(lngI, 2) = _
      Application.Transpose(Application.Transpose(varOut)) 
  End With 
End Sub 
 
Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook, Optional ByVal byCodeName As Boolean = False) As Boolean 
  Dim wks As Object 
  On Error GoTo ERRORHANDLER 
  If Wb Is Nothing Then Set Wb = ThisWorkbook 
  For Each wks In Wb.Sheets 
    If byCodeName Then 
      If LCase(wks.CodeName) = LCase(sheetName) Then SheetExist = True: Exit Function 
    Else 
      If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function 
    End If 
  Next 
ERRORHANDLER: 
  SheetExist = False 
End Function 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: besser so
16.02.2019 19:41:07
Fred
jo Sepp,
hatte festgestellt, dass bei gewissen Änderungen ich das Makro auch bei anderem verwenden kann.
Herzlichen Dank für deine Mühe!
Schönes Wochenende
Gruß
Fred

268 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige