Hilfe bei Excel Macro

Dieses Thema Hilfe bei Excel Macro im Forum "Microsoft Office Suite" wurde erstellt von tm, 10. Juni 2006.

Thema: Hilfe bei Excel Macro wer könnte mir bitte helfen ? ich bräuchte für excel ein macro, dass mir aus einer tabelle alle zeilen löscht die...

  1. tm
    tm
    wer könnte mir bitte helfen ?

    ich bräuchte für excel ein macro, dass mir aus einer tabelle alle zeilen löscht die in der spalte e nicht einen bestimmten wert haben.

    da ich mich damit leider nicht auskenne, bräuchte ich eure hilfe.
    das einzige was ich zusammengebracht habe, wäre das hier, also die zeile manuell markieren und dann zelle löschen:
    Sub Makro1()
    '

    Rows(5:5).Select
    Selection.Delete Shift:=xlUp
    End Sub
     
  2. Als was sind die Zellen formatiert? Ein Beispiel-Wert wäre hifsreich.

    Gruß Matjes :)
     
  3. tm
    tm
    als Standard;
    Wert bzw. Inhalt der Spalte, z. B.: abc: 123456
     
  4. Code:
    Sub Excel_ZeileLoeschenWennNichtInSpalteEWert()
     ->ich bräuchte für excel ein macro, dass mir aus einer tabelle
     ->alle zeilen löscht die in der spalte e nicht einen
     ->bestimmten wert haben.
    
      Const c_Wert = abc: 123456
      Const c_SP_E = 5
      Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
      
      Dim lLetzteZeile As Long, lZeile As Long
    
      lLetzteZeile = ActiveSheet.UsedRange.Row + _
                     ActiveSheet.UsedRange.Rows.Count - 1
      For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
        If c_Wert <> ActiveSheet.Cells(lZeile, c_SP_E).Value Then
          ActiveSheet.Rows(lZeile).Delete
        End If
      Next
    End Sub
    Gruß Matjes :)
     
  5. tm
    tm
    vielen vielen Dank !!

    noch eine frage zu
    Const c_ZUEBERCHRIFT = 1->Zeile Überschrift

    ist damit die Überschrift bzw. Kopfzeile der Spalte E gemeint ?

    ich hatte eigentlich noch vergessen, das natürlich die Zeile 1 (wo die ganzen Überschriften) stehen
    nicht gelöscht werden soll.
    oder hast du das damit schon berücksichtigt ?
     
  6. tm
    tm
    hi matjes,

    hat sich erledigt !

    hab gerade alles getestet !!

    läuft 1a !!


    du bist der beste !!!!
    ;)
     
  7. tm
    tm
    Hi Matjes,

    jetzt hätte ich doch noch einmal eine Frage:
    wäre auch noch folg. möglich:

    die Spalte B bzw. Zelle hat folg. Formatierung:
    [$-407]TTTT, T. MMMM JJJJ hh:mm
    Wertmäßig dargestellt wird die Zelle, z. B., wie folgt:
    09.06.2006 13:37:00
    in der Spalte schaut es, aufgrund o. g. Formatierung, dann z. B. so aus: Freitag, 9. Juni 2006 13:37

    (Datum und Uhrzeit sind hier zusammen, da das ganze so aus einem Programm erstellt wird, und ich darauf zunächst keinen Einfluss habe).


    könnte man noch ein zusätzliches Macro erstellen,
    in dem alle Zeilen gelöscht werden bei denen die Spalte B nicht in der Zeit von:
    Werktags 9.00 - 18.00 Uhr (genau 09.00 Uhr und 1 Sekunde - 18.00 Uhr)
    liegt.

    und ein weiteres,
    in dem alle Zeilen gelöscht werden bei denen die Spalte B nicht in der Zeit von:
    Werktags 18.00 - 9.00 Uhr (genau 18.00 Uhr und 1 Sekunde - 09.00 Uhr), sowie am Wochenende 0.00 - 24.00 Uhr
    (genau Freitag 0.00 Uhr und 1 Sekunde - Sonntag 24.00 Uhr;
    wobei man hier vermutlich auch sagen könnte, von Freitag 18.00 Uhr und 1 Sekunde bis Montag 09.00 Uhr,
    da dies ja sowieso mit in den Bereich 18.00 - 09.00 fallen würde)
    liegt.


    Ich denke mal, das es zwar gehen wird, aber sehr kompliziert wäre.
    Ich möchte nicht unverschämt sein ! Aber könntest Du mir das erstellen ?
    Wenn es aber nicht möglich ist, egal aus welchen Gründen, kein Problem, sag mir einfach Bescheid.
     
  8. Hallo tm,

    hier die beiden Makros. Die Beschreibung  des zweiten war mir zu kompliziert und nicht schlüssig. Bei dem Format erhält man immer 0 Sekunden ! (wahrscheinlich meintest Du + 1 Minute)

    Also der erste Makro löscht alles was nicht Werktags von [9.00 -18.00] liegt. Das zweite Makro macht genau das Gegenteil.

    Gruß Matjes :)
    Code:
    '********************************************************************
    Sub Excel_ZeileLoeschenWennDatumZeitInSpalteBNichtWerktags9bis18Uhr()
    
      Const c_SP_B = 2
      Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
      Dim lLetzteZeile As Long, lZeile As Long, dDateTime As Date
      
      lLetzteZeile = ActiveSheet.UsedRange.Row + _
                     ActiveSheet.UsedRange.Rows.Count - 1
      For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
       ->Zeilen ohne Datum überspringen
        If IsDate(ActiveSheet.Cells(lZeile, c_SP_B).Value) Then
          dDateTime = ActiveSheet.Cells(lZeile, c_SP_B).Value
          If Not WerktagsVon09Bis1800(dDateTime) Then
            ActiveSheet.Rows(lZeile).Delete
          End If
        End If
      Next
    End Sub
    '********************************************************************
    Sub Excel_ZeileLoeschenWennDatumZeitInSpalteBWerktags9bis18Uhr()
    
      Const c_SP_B = 2
      Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
      Dim lLetzteZeile As Long, lZeile As Long, dDateTime As Date
      
      lLetzteZeile = ActiveSheet.UsedRange.Row + _
                     ActiveSheet.UsedRange.Rows.Count - 1
      For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
       ->Zeilen ohne Datum überspringen
        If IsDate(ActiveSheet.Cells(lZeile, c_SP_B).Value) Then
          dDateTime = ActiveSheet.Cells(lZeile, c_SP_B).Value
          If WerktagsVon09Bis1800(dDateTime) Then
            ActiveSheet.Rows(lZeile).Delete
          End If
        End If
      Next
    End Sub
    '********************************************************************
    Private Function WerktagsVon09Bis1800(dDateTime As Date) As Boolean
    '***   True, wenn Datum/Zeit Werktags(Mo-Fr) 9:00 bis 18:00 ist
      
      Dim iWochentag As Integer
      Dim iStd As Integer, iMin As Integer, iSec As Integer
      
      iWochentag = WeekDay(dDateTime)
      iStd = Hour(dDateTime)
      iMin = Minute(dDateTime)
      iSec = Second(dDateTime)
      
     ->Werktags9bis18Uhr ?
      If (iWochentag = vbSaturday) Or (iWochentag = vbSunday) Then
        WerktagsVon09Bis1800 = False
      ElseIf iStd >= 9 And iStd <= 17 Then
        WerktagsVon09Bis1800 = True
      ElseIf iStd = 18 And iMin = 0 And iSec = 0 Then
        WerktagsVon09Bis1800 = True
      Else
        WerktagsVon09Bis1800 = False
      End If
    
    End Function
     
  9. tm
    tm
    hi matjes,

    zuerst einmal vielen vielen dank für deine mühe(n) !!!!!

    wie ich gesehen habe, hast du nochmal etwas geändert.
    allerdings ist mir ehrlich gesagt nicht ganz klar, wie das mit der Private Function funktioniert !?
    ich hatte mir gestern aber zuvor dein altes script auch schon kopiert.

    das gestrige hat auch funktioniert.
    bis auf die tatsache, das werktags und nichtwerktags, glaube ich vertauscht waren,
    d. h. wenn ich ..werktags aufgerufen habe, dann habe ich die anderen ergebnisse bekommen
    und umgekehrt. ich habs dann einfach von der bezeichnung her geändert.
    kann aber auch sein, das ich mich beim kopieren vertan habe,
    oder eher etwas nicht ganz verstanden habe !?

    das neue funktionert ebenfalls 1a !

    ich kenne jetzt deinen grund nicht, wieso du nochmals hand angelegt hast,
    oder hast du noch einen fehler entdeckt der mir noch gar nicht aufgefallen ist ?


    könnte man eigentlich auch die feiertage mit einbauen
    (die müssten mit in den bereich 18.00 - 09.00 Uhr) ??
    oder geht das eigentlich gar nicht, da man die nicht definieren kann !?
     
  10. Hallo tm,

    da das Feststellen Werktags900bis1800 in beiden Makros gleich ist, hab ich sie als Function ausgelagert.
    Die Funktion wird dann einfach aufgerufen und liefert True oder False zurück.
    Code:
    If WerktagsVon09Bis1800(dDateTime) Then
    bzw.
    Code:
    If Not WerktagsVon09Bis1800(dDateTime) Then

    Für die Feiertagsabfrage hab ich dir eine kleine Function IstFeiertag angefügt.
    Im Array FeiertageDatum müßtest Du die für dich gültigen Feiertage eintragen.


    IstFeiertag wird in WerktagsVon09Bis1800 aufgerufen. Ist das Datum ein Feiertag gibt WerktagsVon09Bis1800 False zurück.


    Feiertage kannst du z.B. unter http://www.feiertage.net/uebersicht.php nachschauen.

    Gruß Matjes :)
    Code:
    '********************************************************************
    Sub Excel_ZeileLoeschenWennDatumZeitInSpalteBNichtWerktags9bis18Uhr()
    
      Const c_SP_B = 2
      Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
      Dim lLetzteZeile As Long, lZeile As Long, dDateTime As Date
      
      lLetzteZeile = ActiveSheet.UsedRange.Row + _
                     ActiveSheet.UsedRange.Rows.Count - 1
      For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
       ->Zeilen ohne Datum überspringen
        If IsDate(ActiveSheet.Cells(lZeile, c_SP_B).Value) Then
          dDateTime = ActiveSheet.Cells(lZeile, c_SP_B).Value
          If Not WerktagsVon09Bis1800(dDateTime) Then
            ActiveSheet.Rows(lZeile).Delete
          End If
        End If
      Next
    End Sub
    '********************************************************************
    Sub Excel_ZeileLoeschenWennDatumZeitInSpalteBWerktags9bis18Uhr()
    
      Const c_SP_B = 2
      Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
      Dim lLetzteZeile As Long, lZeile As Long, dDateTime As Date
      
      lLetzteZeile = ActiveSheet.UsedRange.Row + _
                     ActiveSheet.UsedRange.Rows.Count - 1
      For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
       ->Zeilen ohne Datum überspringen
        If IsDate(ActiveSheet.Cells(lZeile, c_SP_B).Value) Then
          dDateTime = ActiveSheet.Cells(lZeile, c_SP_B).Value
          If WerktagsVon09Bis1800(dDateTime) Then
            ActiveSheet.Rows(lZeile).Delete
          End If
        End If
      Next
    End Sub
    '********************************************************************
    Private Function WerktagsVon09Bis1800(dDateTime As Date) As Boolean
    '***   True, wenn Datum/Zeit Werktags(Mo-Fr) 9:00 bis 18:00 ist
      
      Dim iWochentag As Integer
      Dim iStd As Integer, iMin As Integer, iSec As Integer
      
      iWochentag = WeekDay(dDateTime)
      iStd = Hour(dDateTime)
      iMin = Minute(dDateTime)
      iSec = Second(dDateTime)
      
     ->Werktags9bis18Uhr ?
      If IstFeiertag(dDateTime) Then
        WerktagsVon09Bis1800 = False
      ElseIf (iWochentag = vbSaturday) Or (iWochentag = vbSunday) Then
        WerktagsVon09Bis1800 = False
      ElseIf iStd >= 9 And iStd <= 17 Then
        WerktagsVon09Bis1800 = True
      ElseIf iStd = 18 And iMin = 0 And iSec = 0 Then
        WerktagsVon09Bis1800 = True
      Else
        WerktagsVon09Bis1800 = False
      End If
    
    End Function
    '********************************************************************
    Private Function IstFeiertag(dDateTime As Date) As Boolean
    '***   True, wenn Datum/Zeit Feiertag ist
    
      Dim FeiertageDatum As Variant
      FeiertageDatum = Array(14.4.2006, 16.4.2006, 17.4.2006, _
                             1.5.2006, 25.5.2006, 4.6.2006, _
                             5.6.2006)
      
      Dim sDatum As String, x As Long
      
      sDatum = Format(dDateTime, d.m.yyyy)
      IstFeiertag = False
      For x = LBound(FeiertageDatum) To UBound(FeiertageDatum)
        If sDatum = FeiertageDatum(x) Then IstFeiertag = True: Exit For
      Next
    End Function
     
Die Seite wird geladen...

Hilfe bei Excel Macro - Ähnliche Themen

Forum Datum
Excel-Aufgabe - Bitte um Hilfe! Microsoft Office Suite 1. Sep. 2012
Excel 2010 - Pivot Tabelle - Brauche Hilfe bei Mittelwertbildung Microsoft Office Suite 13. Feb. 2012
Excel 2007 - Brauche Hilfe bei Erstellung von Formel Microsoft Office Suite 10. Dez. 2010
Excel Experte gescucht - Brauche Hilfe bei Tabelle erstellen Windows XP Forum 12. Nov. 2010
Re: Excel - Hilfe bei Datenstruktur für spätere UserForm Windows XP Forum 6. Aug. 2010