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

Hilfe bei Makro

Hilfe bei Makro
31.03.2009 10:03:10
Ruben
Hallo Makrospezialisten,
ich habe ein Aufgabe, die meiner Meinung nach an Besten mit einem makro u lösen ist. Allerdings kann ich VBA so gut wie gar nicht.
Folgendes: In den Spalten C und D gibt es leere zellen, 4-stellige Zahlen, 8-stellige Zahlen und 4-stellige Zahlen mit einem B davor (z.B. B1002).
Ich bräuchte eine Funktion bzw. ein Makro welches mir alle Zellen die ein B beinhalten löscht.
Das kann doch nicht sehr schwer sein, oder ?
Vielen Dank!
Ruben

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe bei Makro
31.03.2009 10:23:33
Mark
Hallo Ruben,
kannst Du eine Beispeil hochladen?
Gruß Mark
AW: Hilfe bei Makro
31.03.2009 11:33:07
robert
hi,
mit daten-filter-benutzerdefiniert-enthält B
dann bearbeiten-gehezu-inhalte-nur sichtbare-bearbeiten-zeilen löschen
ohne makro
gruß
robert
AW: Hilfe bei Makro
31.03.2009 11:40:04
Ruben
Danke für den Tipp. Bisher mache ich das so...Allerdings wollte ich mir das mit eienm Makro etwas einfach machen...
AW: Hilfe bei Makro
31.03.2009 12:00:18
Mark
Hallo Ruben,
hab es mal so probiert. Ist nicht perfekt muss leider nebenbei arbeiten.
Gruß

Sub main()
Dim letztezeile As Integer
Dim LetzteZelle_C As Integer
Dim LetzteZelle_D   As Integer
Dim i As Integer
Dim j As Integer
LetzteZelle_C = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
LetzteZelle_D = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
If LetzteZelle_C >= LetzteZelle_D Then
letztezeile = LetzteZelle_C
Else
letztezeile = LetzteZelle_D
End If
For j = 0 To 1
For i = 1 To letztezeile
Debug.Print ActiveSheet.Cells(i, 3).Offset(0, j).Value
If Not ActiveSheet.Cells(i, 3).Offset(0, j).Value = "" Then
If Left(ActiveSheet.Cells(i, 3).Offset(0, j).Value, 1) = "B" Then
ActiveSheet.Cells(i, 3).Offset(0, j).Delete Shift:=xlUp
Do While Left(ActiveSheet.Cells(i, 3).Offset(0, j).Value, 1) = "B"
ActiveSheet.Cells(i, 3).Offset(0, j).Delete Shift:=xlUp
Loop
End If
End If
Next i
Next j
End Sub


Anzeige
AW: Hilfe bei Makro
31.03.2009 12:09:03
Ruben
Vielen, vielen Dank für deine Hilfe, werde es gleich ausprobieren.
Kann ich eigentlich deinen vorherigen Vorschlag mit dem autofilter auch auf Makro aufzeichnen?
AW: Hilfe bei Makro
31.03.2009 12:46:13
Mark
Hallo Ruben,
wenn Du deine VBA Wissen verbessen willst, solltest Du einige Sach einfach mal ausprobieren!
Gruß
Mark
AW: Hilfe bei Makro
31.03.2009 13:41:31
Ruben
Du hast Recht. Gerade muss es eben etwas schnell gehen, deswegen. Ich werde mich aber auf jedenfall mal hinsetzen und alles durchgehen um die Makros zu verstehen.
Vielen Dank für die tolle Unterstützung!
AW: Hilfe bei Makro
31.03.2009 12:04:03
Tino
Hallo,
teste mal diese Version, den Tabellennamen müsstest Du eventuell noch anpassen.
Es werden zwei Hilfsspalten am Ende verwendet, diese werden zum Schluss wieder gelöscht.
Es wird immer die komplette Zeile wo in C oder in D ein B am Anfang steht.
Sub Loesche_Alles_Mit_B_Am_Anfang_In_Spalte_C_Und_D()
Dim Bereich As Range, tempBereich As Range

With Application
 .ScreenUpdating = False
 .EnableEvents = False
   With Sheets("Tabelle1") 'Tabellennamen anpassen 
        Set Bereich = .Range("A2", .Cells(.Cells.Find("*", , xlValues, 2, 1, 2).Row, 1))
        Set Bereich = Bereich.Offset(0, .Columns.Count - 1)
        
        Bereich.FormulaR1C1 = "=IF(OR(COUNTIF(RC3,""B*"")>0,COUNTIF(RC4,""B*"")>0),0,"""")"
        Bereich.Offset(0, -1).FormulaR1C1 = "=Row()"
        Bereich.Offset(0, -1).Value = Bereich.Offset(0, -1).Value
        
        Set tempBereich = .UsedRange.Offset(1, 0)
        'Sortieren, zusammenhängende Bereiche lassen sich schneller löschen 
        tempBereich.Sort tempBereich(1, tempBereich.Columns.Count), xlAscending
        
        If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
         Bereich.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
        End If
        
        'wieder zurücksortieren 
        tempBereich.Sort tempBereich(1, tempBereich.Columns.Count - 1), xlAscending
        
        'Hilfsspalten löschen 
        .Columns(.Columns.Count).Delete
        .Columns(.Columns.Count - 1).Delete
   End With
 .ScreenUpdating = True
 .EnableEvents = True
End With

End Sub


Gruß Tino

Anzeige
An Tino
31.03.2009 12:10:59
Ruben
Es sollen nicht die ganzen zeilen gelöscht werden, da in den anderen Spalten (nicht wie im Beispiel) auch noch Daten stehen, die erhlaten bleiben sollen...
AW: An Tino
31.03.2009 12:27:46
Tino
Hallo,
das ist noch einfacher.
    Range("B2:C" & Rows.Count).Replace What:="B*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False


Gruß Tino

AW: An Tino
31.03.2009 12:33:05
Ruben
Super, vielen Dank. Füge ich das jetzt andie Stelle in deinem vorherigen Makro ein, wo du die Zeilen gelöscht hast, oder ist das schon das ganze Makro?
Anzeige
AW: An Ruben
31.03.2009 12:41:38
robert
Hi,
tinos makro...
eventuell noch Range(.. anpassen
gruß
robert

Sub Test()
Range("A2:D" & Rows.Count).Replace What:="B*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub


AW: An Tino
31.03.2009 12:53:00
Tino
Hallo,
so wie von Robert gezeigt, in Deiner Beispieldatei müsste es so aussehen.
C2 kommt daher, weil die Überschrift nicht dabei sein soll und
D" & Rows.Count ist die letzte Zelle in Spalte D.

Sub Loesche()
Range("C2:D" & Rows.Count).Replace What:="B*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub


Gruß Tino

Anzeige
AW: An Tino
31.03.2009 16:58:51
Ruben
Danke funktioniert perfekt!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige