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

Daten kopieren.

Daten kopieren.
15.03.2018 09:40:19
Georg
Liebe Excel Fans,
folgende Datei habe ich hinterlegt.
https://www.herber.de/bbs/user/120429.xlsx
Der Code wurde mit tatkräftiger Hilfe des Forums erstellt, meine VBA Kenntnisse sind zu dürftig darum bin ich nicht in der Lage Anpassungen vorzunehmen.
1. ich möchte das Kopieren einschränken (momentan werden alle Daten aus den Blättern kopiert):
Es soll eine Zeile NICHT kopiert werden WENN Spalte H (Konto) leer ODER der Wert 8403 drinsteht.
2. Kann man im neu erzeugten Blatt Gesamt gleich automatisch die Überschriften übernehmen?
Vielen Dank
Option Explicit
Sub Start()
Dim gesWS As Worksheet, tmpWS As Worksheet
Dim rngData() As Range
Dim n&, MaxRow
Dim sAddress$
On Error GoTo ErrorHandler:
Call Events_(False)
'Daten Sammeln
For Each tmpWS In ThisWorkbook.Worksheets
If IsNumeric(tmpWS.Name) Then
With tmpWS
MaxRow = .Cells(.Rows.Count, 2).End(xlUp).Row
If MaxRow > 1 Then
ReDim Preserve rngData(n)
If .Cells(1, 1).Value  "Zuordnung" Then
.Columns(1).Insert Shift:=xlToRight
.Cells(1, 1).Value = "Zuordnung"
Set rngData(n) = .UsedRange.Rows(2).Resize(MaxRow - 1)
Else
Set rngData(n) = .UsedRange.Rows(2).Resize(MaxRow - 1)
End If
rngData(n).Columns(1).Value = .Name
n = n + 1
End If
End With
End If
Next
'Ausgabe
If n > 0 Then
Set gesWS = CheckTabelle("Gesamt")
If gesWS Is Nothing Then
With ThisWorkbook
Set gesWS = .Worksheets.Add(Before:=.Sheets(1))
gesWS.Name = "Gesamt"
End With
End If
With gesWS
'alte Daten löschen
If .UsedRange.Rows(.UsedRange.Rows.Count).Row > 1 Then
.UsedRange.Cells(2, 1).Resize(.UsedRange.Rows.Count - 1).EntireRow.Delete
End If
For n = LBound(rngData) To UBound(rngData)
MaxRow = .Cells(.Rows.Count, 1).End(xlUp).Row
MaxRow = MaxRow + 1
rngData(n).Copy .Cells(MaxRow, 1)
Next
.UsedRange.Value = .UsedRange.Value
End With
End If
Call Events_(True)
MsgBox "fertig!"
Exit Sub
ErrorHandler:
Call Events_(True)
MsgBox Err.Description, vbCritical, "Fehler: " & Err.Number, Err.HelpFile, Err.HelpContext
End Sub
Function CheckTabelle(strName$) As Worksheet
On Error Resume Next
Set CheckTabelle = ThisWorkbook.Worksheets(strName)
On Error GoTo 0
End Function
Sub Events_(booSchalter As Boolean)
Dim App As Object
Static Calc As XlCalculation
With Application
If Not booSchalter Then Calc = .Calculation
.ScreenUpdating = booSchalter
.DisplayAlerts = booSchalter
.EnableEvents = booSchalter
.Calculation = IIf(booSchalter, Calc, xlCalculationManual)
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten kopieren.
15.03.2018 14:04:23
Tino
Hallo,
versuch mal so.
Hier kannst du die Bedingung fürs löschen anpassen.
'Daten die gelöcht werden sollen
'RC8 = prüfe Spalte 8 (H)
'"""" = Leerzellen
Kill_IN_H = Array("RC8=8403", "RC8=""""")
https://www.herber.de/bbs/user/120442.xlsm
Gruß Tino
AW: Daten kopieren.
15.03.2018 15:07:17
Georg
Hallo Tino, vielen Dank für die Antwort, es funktioniert leider nicht. Gerade getestet, die Zeilen mit leer oder 8403 sind da.
Ich habe mich vielleicht unpräzise ausgedrückt: Die Spalte, die abgefragt werden soll ist in den Blättern Spalte G (Überschrift Konto) bevor das Makro eine neue Spalte einfügt.
Ob die Datensätze kopiert werden und dann gelöscht oder gar nicht erst mitkopiert werden ist mir egal. Das Blatt Gesamt soll nur Datensätze enthalten, die unter der Spaltenüberschrift Konto einen Wert enthalten außer 8403.
Anzeige
AW: Daten kopieren.
15.03.2018 15:24:32
Georg
Noch eine Ergänzung: Zeilen mit 8403 sind nicht da, also ok. Aber die Zeilen, in denen die Zelle leer ist, werden mitkopiert.
Leere Zellen sind nicht leer
15.03.2018 16:09:48
Tino
Hallo,
die vermeintlich leeren Zellen enthalten ein Leerzeichen und sind somit nicht leer!
Mach aus der Zeile
Kill_IN_H = Array("RC8=8403", "RC8=""""")

diese
Kill_IN_H = Array("RC8=8403", "RC8=""""", "RC8="" """)
Gruß Tino
VIELEN Dank.!!!Leere Zellen sind nicht leer
16.03.2018 10:46:06
Georg
Hallo Tino, funktioniert, ich bin baff wg dem Code, wo lernt man sowas, ich versteh leider nur vielleicht ein Drittel des Codes. Aber perfekt Georg
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige