Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
464to468
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
464to468
464to468
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Leere Zellen suchen mit Macro

Leere Zellen suchen mit Macro
05.08.2004 11:52:12
Alexander
Hallo VBA Profies,
ich möchte in einer Tabelle (Process) in einer betimmte Spalte nach leeren Einträgen suchen. Falls welche vorhanden sind soll dann die gesamte Zeile, in der sich der leere Eintag befindet, in eine andere Tabelle (Export) geschrieben werden.
Ich habe versucht dazu ein Macro zu schreiben, allerdings sind meine VBA Kenntisse shr schlecht:
Public

Sub export()
Quelle = Worksheets("Process").Name
Ziel = Worksheets("Export").Name
Zeile = 3
For Each rw In Worksheets(Quelle).Rows
Tp = rw.Cells(6)
Phase = rw.Cells(23)
Ty = rw.Cells(24)
Debug.Print Tp
Debug.Print Phase
Debug.Print Ty
If Tp = Empty And Phase = "PPPhase" Then
Name = rw.Cells(3)
Name2 = rw.Cells(4)
Name3 = rw.Cells(5)
Name4 = rw.Cells(6)
Name5 = rw.Cells(7)
Name6 = rw.Cells(8)
Name7 = rw.Cells(9)
Worksheets(Ziel).Activate
Range("A" & 2) = "Workcenter"
Range("A" & 2).Font.Bold = True
Range("A" & Zeile) = Name
Range("B" & Zeile) = Name2
Range("C" & Zeile) = Name3
Range("D" & Zeile) = Name4
Range("E" & Zeile) = Name5
Range("F" & Zeile) = Name6
Range("G" & Zeile) = Name7
Zeile = Zeile + 1
End If
If Zeile = 300 Then
Exit For
GoTo Test
End If
Next
Test:
For Each rw In Worksheets(Quelle).Rows
Tp = rw.Cells(6)
Phase = rw.Cells(23)
Ty = rw.Cells(24)
Debug.Print Tp
Debug.Print Phase
Debug.Print Ty
If Tp = Empty And Phase = "PPPhase" Then
Name = rw.Cells(3)
Name2 = rw.Cells(4)
Name3 = rw.Cells(5)
Name4 = rw.Cells(6)
Name5 = rw.Cells(7)
Name6 = rw.Cells(8)
Name7 = rw.Cells(9)
Worksheets(Ziel).Activate
Range("A" & Zeile) = "Überschrift"
Range("A" & Zeile) = Name
Range("B" & Zeile) = Name2
Range("C" & Zeile) = Name3
Range("D" & Zeile) = Name4
Range("E" & Zeile) = Name5
Range("F" & Zeile) = Name6
Range("G" & Zeile) = Name7
Zeile = Zeile + 1
End If
If Zeile = 300 Then
Exit For
End If
Next
End Sub


Im Prinzip klappt es auch ohne Fehler. Allerdings würde ich gerne weitere spalten überprüfen lassen. ( Auf die gleiche Art und Weise) Und jetzt ist leider mein Latein am ende. Hab das mal mit Goto gemacht aber das klappt nicht richtig.
Ich wäre Euch sehr dankbar für ein Paar Tipps
Gruß Alexander

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leere Zellen suchen mit Macro
05.08.2004 13:38:06
kdosi
Hallo Alexander, Deinen Code habe ich nicht studiert, aber ich habe eine Function FindEmptyCells geschrieben, die das macht, was Du brauchst (hoffentlich :). Schau es Dir mal an und lass es mich wissen, ob es funzt :-). In der Sub Main_Test habe ich die Function getestet. Man braucht dazu Tabellen Worksheets("Data") und Worksheets("Export").Grus kdosi, CZ (DDMAIL@seznam.cz)


Option Explicit
Public Sub Main_Test()
    On Error GoTo Err_In_Main_Test
    
    Dim spalte, tabelle
    
    Set spalte = Worksheets("Data").Columns(3)
    Set tabelle = Worksheets("Export")
    
    ' man kann die Function FindEmptyCells aber z.B. auch so rufen :
    ' Dim EmptyZellen
    ' EmptyZellen = FindEmptyCells(spalte, tabelle)
    
    VBA.MsgBox "In der Spalte " & spalte.Column & " gab es " & _
                FindEmptyCells(spalte, tabelle) & " leeren Zellen.", vbInformation
    
    Exit Sub
    ' ---------------------------------------------------------
    
Err_In_Main_Test:
    VBA.MsgBox Err.Description, vbCritical, "Error Number " & Err.Number
    
End Sub
' FindEmptyCells returns die Anzahl den leeren Zellen,
' oder NULL, wenn die Parametern NOTHING sind
Private Function FindEmptyCells(ByVal i_rngColumn As Range, ByVal i_wshExport As Worksheet) As Variant
    
    ' required
    If (i_rngColumn Is Nothing Or i_wshExport Is NothingThen
        FindEmptyCells = Null
        Exit Function
    End If
    
    
    ' ---------------------------------------------------------
    On Error GoTo Err_In_FindEmptyCells
    
    FindEmptyCells = 0
    
    Dim rngCell As Range, rngColumnUsdCells As Range
    
    Set rngColumnUsdCells = Application.Intersect(i_rngColumn.Columns(1), i_rngColumn.Parent.UsedRange).Cells
    
    For Each rngCell In rngColumnUsdCells
        If (IsEmpty(rngCell) = TrueThen
            rngCell.EntireRow.Copy i_wshExport.Range("a" & _
                i_wshExport.UsedRange.Rows(i_wshExport.UsedRange.Rows.Count).Row + 1)
            FindEmptyCells = FindEmptyCells + 1
        End If
    Next rngCell
    
    
    Exit Function
    ' ---------------------------------------------------------
    
    
Err_In_FindEmptyCells:
    VBA.MsgBox Err.Description, vbCritical
    
End Function

' IsEmpty Function overrides VBA.IsEmpty
' IsEmpty returns True, wenn alle Zellen im i_rng Bereich leer sind
' sonnst returns False, NULL wenn i_rng Is NOTHING
Private Function IsEmpty(ByVal i_rng As Range) As Variant
    ' required
    If (i_rng Is NothingThen
        IsEmpty = Null
        Exit Function
    End If
    
    ' ---------------------------------------------------------
    Dim rngCell As Range
    
    IsEmpty = True
    
    For Each rngCell In i_rng.Cells
        If (rngCell.Value <> "") Then
            IsEmpty = False
            Exit Function
        End If
    Next rngCell
    
End Function

     Code eingefügt mit Syntaxhighlighter 2.5

Anzeige
AW: Leere Zellen suchen mit Macro
05.08.2004 14:24:30
Alexander
Hallo kdosi,
Danke schon mal für Deine Hilfe.
Aber irgendwie überfordert mich dein Code einwenig.
Soweit ich das jetzt verstanden habe. Wird mir jetzt nur die Anzahl der leeren Einträge als popup angezeigt.
Für mich ist es aber wichtig, das die leeren Einträge in einer anderen Tabelle dargestellt werden und zwar immer die komplette Zeile wo der leere Eintrag drin ist.
Gruß Alexander
AW: Leere Zellen suchen mit Macro
05.08.2004 14:55:51
Alexander
Hallo ich nochmal,
wenn ich Deinen Code in eine neue Arbeitsmappe etc. einfüge geht es.
Wenn ich allerdings den Code in meine Arbeitsmappe mit den Daten kopiere geht es leider nicht.
ich hab mal die Datein angehängt:https://www.herber.de/bbs/user/9253.xls
Gruß Alexander
Anzeige
AW: Leere Zellen suchen mit Macro
06.08.2004 09:25:17
kdosi
Hallo Alexander,
das es nicht funzt tut mir Leid. Ich kann Deine Beispielsdatei nicht downloaden :
[The requested URL /messages/angehängt:https://www.herber.de/bbs/user/9253.xls was not found on this server.]
Die Function habe ich nur wenig getestet :-), also kann es sein, das es nicht richtig arbeitet. Aber Du schreibst, dass es funzt in einer neuen Arbeitsmappe. Wie hast Du die Function gerufen? Wenn ich mal davon ausgehe, dass Du sie vor der Sub Main_Test gerufen hast : es sind da zwei Variablen, spalte und tabelle, die werden initializiert :
Set spalte = Worksheets("Data").Columns(3)
Set tabelle = Worksheets("Export")
Das "kleine" Problem dabei ist, dass nicht gesagt wurde, in welcher Datei die Worksheets sien sollten. So wie es jetzt ist, werden die Worksheets "Data" und "Export" in der Aktiven Datei gesucht. Also man sollte die Function z.B. so rufen :
Set spalte = Workbooks("TestDatei_1.xls").Worksheets("Data").Columns(3)
Set tabelle = Workbooks("TestDatei_2.xls").Worksheets("Export")
Dim EmptyZellen
EmptyZellen = FindEmptyCells(spalte, tabelle)
' man braucht natuerlich zwei Dateien, hier habe ich die Dateien als TestDatei_1.xls und TestDatei_2.xls benannt, und in den Dateien muessen die entschprechenden Sheets sein, also in der Datei TestDatei_1.xls muss Sheet "Data" sein (da sind die Testdaten drinn) und in der Datei TestDatei_2.xls muss Sheet "Export" sein (dort kommen die Ergaebnisse). Aber wie auch immer, die Dateien mussen nicht verschieden sein, es koennte sich auch um eine Datei handeln, und es koennte sich sogar um die selbe Datei handeln, wo sich der Makro-Code befindet. Wenn Du also die Testdaten und den Sheet Export in der Datei haben wirst, wo sich auch der Makro-Code befindet, muss man es so machen :

Set spalte = ThisWorkbook.Worksheets("Data").Columns(3)
Set tabelle = ThisWorkbook.Worksheets("Export")
Dim EmptyZellen
EmptyZellen = FindEmptyCells(spalte, tabelle)
Also die Function FindEmptyCells sucht die leeren Zellen in der "spalte" und kopiert die ganze Zeile wo die leere Zellen gefunden war in die "tabelle". Nur als "Ergebniss", also eine Information returns die Function die Anzahl der gefundenen leeren Zellen (die auch kopiert worden sind :-)). Der komplette Code findest Du hier :

Die Datei https://www.herber.de/bbs/user/9292.txt wurde aus Datenschutzgründen gelöscht

Ich habe den Code einbischen mehr getestet und einige kleine Verbesserungen gemacht :-). Gruss kdosi, CZ [DDMAIL@seznam.cz]
Anzeige
AW: Leere Zellen suchen mit Macro
06.08.2004 12:38:57
Alexander
Hallo Kdosi,
ich find das klasse, dass Ihr mich so unterstützt, ist ja nicht selbstverständlich.
ich werd jetzt mal den neuen Code durchschauen.....
hier nochmals meine Beispieldadei:

https://www.herber.de/bbs/user/9260.xls
ich hab noch ein Prolem: wie ich auch bei harry geschrieben habe:
ich benötige noch ein Kriterium für meine Daten:
Es dürfen nur die leeren Zellen mit entsprechender Zeile aufgelistet werden die noch das Kriterium 7 erfüllen. Also suche nach leeren Zellen wenn die dann auch noch das Kriterium 7 erfüllen (steht in Spalte A) dann liste mir diese Zeilen auf.
Im Prinzip würde es mir genügen wenn z.B. die Spalte F nach leeren Zellen durchsucht wird und dann noch überprüft wird, wenn eine leere Zelle vorhanden ist ob in Spalte A in dieser Zeile das Kriterium 7 drin steht. Als nächstes soll dann beispielsweise das Gleiche mit Spalte G gemacht werden und dann wieder überprüft werden ob in dieser Spalte ein leerer Eintrag ist, wenn ja, noch überprüft wird ob in der entsprechenden Zeile in Spalte A eine 7 drin steht.
Viele Grüße und vielen Dank schon mal
Alexander
Anzeige
AW: Leere Zellen suchen mit Macro
06.08.2004 14:15:09
kdosi
Hallo Alexander,
also die Zeile soll nur dann kopiert werden wenn :
1/ eine leere Zelle in einer gewissen Spalte gefunden wird (z.B. in der Spalte "G")
und gleichzeitig
2/ in der ersten Spalte und in der Zeile wo die leere Zelle gefunden war befand sich ein gewissen Wert (z.B Wert 7)
Habe ich es richtig verstanden? Wenn ja, dann hier ist der Code :-)
https://www.herber.de/bbs/user/9311.txt
Gruss kdosi, und ein schoenes Wochenende :-)
AW: Leere Zellen suchen mit Macro
07.08.2004 09:26:44
Alexander
Ja hast Du.
Vielen Vielen Dank.
Kann den Code aber erst wieder am Donnerstrag testen.
Geb Dir dann auch jeden Fall bescheid ob es geklappt hat.
Auch ein schönes Wochenende.
GRuß Alexander
E-Mail: kiswol@gmx.de
Anzeige
AW: Leere Zellen suchen mit Macro
12.08.2004 10:03:27
Alexander
Hallo Kdosi,
so jetzt hab ich das ganze mal ausprobiert und noch etwas erweitert und angepasst:
Ich habe jetzt zwei Mappen (Name Mappe1) hier stehen die Daten drin die überprüft werden sollen. In der zweiten Mappe (Name TestDatei_2) befinden sich die Macros.
Ich bin so vorgegangen:
Zuerst wird das Worksheet, in das die Daten kopiert werden sollen leer gemacht und die Überschriften aus der Datendatei kopiert. Dann wird eine Hilfsspalte (A) in das Daten Sheet der ersten Mappe angelegt mit den “ 7“ etc. Dies alles macht ein Macro.
Als nächstes wird Dein Code ausgeführt mit einem weiteren Macro.
Im Prinzip läuft auch alles ohne Fehler.
Allerdings hab ich noch zwei Probleme bei denen ich leider noch etwas Unterstützung benötige:
1. Ist es auch möglich das Kriterium (die 7) statt mit einer Zahl auch mit einem Text zu verwenden? Dann wäre die Bedingungen wenn leere Zellen und in V steht „PPPhase“ kopiere die Zeile. Das hat bei mir nicht geklappt.
2. Spalte V Spalte W
PPPhase 7654
PPPhase 7890
PPPhase
PPSubStage 5671

In der Spalte W ist immer der letzte Eintrag leer. Das ist auch OK. Also hier wäre die Bedingung Spalte V ist PPPhase und leer erfüllt. Aber das ist in diesem Fall richtig und zwar immer dann wenn in der darauf folgenden Zeile V nicht mehr PPPhase steht sondern ein anderer Wert. Z.B. PPSubStage. Diese Zeile soll dann nicht mit kopiert werden

Ich würde mich freuen wenn Du mir hierbei noch helfen könntest ich weiß leider nicht weiter.
Gruß und Danke Alexander
Na toll jetzt kann ich nicht uploaden also hier der Code:
Problem 2 ist 'Für Sucessors aus Spalte X

Public Sub Main_Test1()

'On Error GoTo Err_In_Main_Test

Dim spalte, tabelle, kriterium, spalte1, tabelle1, kriterium1, spalte2, tabelle2, kriterium2


'Für Sucessors aus Spalte X
Set spalte2 = Workbooks("Mappe1.xls").Worksheets("Process").Columns("X")
Set tabelle2 = Workbooks("TestDatei_2.xls").Worksheets("Export")
kriterium2 = 7


'Für gewährtem Zeittyp aus Spalte V
Set spalte1 = Workbooks("Mappe1.xls").Worksheets("Process").Columns("V")
Set tabelle1 = Workbooks("TestDatei_2.xls").Worksheets("Export")
kriterium1 = 7

'Für Workcenter aus Spalte F
Set spalte = Workbooks("Mappe1.xls").Worksheets("Process").Columns("F")
Set tabelle = Workbooks("TestDatei_2.xls").Worksheets("Export")
kriterium = 7

' man ruft die Function FindEmptyCellsWithCriterion
Dim LeerenZellen, LeerenZellen1, LeerenZellen2
' Workcenter
LeerenZellen = FindEmptyCellsWithCriterion(spalte, tabelle, kriterium)
' Gewährtem Zeittyp
LeerenZellen1 = FindEmptyCellsWithCriterion(spalte1, tabelle1, kriterium1)
'Sucessors
LeerenZellen2 = FindEmptyCellsWithCriterion(spalte2, tabelle2, kriterium2)


'If (VBA.IsNull(LeerenZellen) = False) Then
' VBA.MsgBox "Die Tabelle wo man gesucht hat : " & spalte.Parent.Name & VBA.vbCrLf & _
' "Die Ziel-Tabelle : " & tabelle.Name & VBA.vbCrLf & _
' "Die Spalte wo man gesucht hat : " & spalte.Column & VBA.vbCrLf & _
' "Das Kriterium : " & VBA.CStr(kriterium) & VBA.vbCrLf & VBA.vbCrLf & _
' "Die Anzahl der kopierten Zeilen : " & LeerenZellen, vbInformation

'Else
' VBA.MsgBox "Der Ergebniss ist NULL.", vbExclamation
'End If

'Exit Sub
' ---------------------------------------------------------

'Err_In_Main_Test:
' VBA.MsgBox Err.Description, vbCritical, "Error Number " & Err.Number

Workbooks("TestDatei_2.xls").Worksheets("Export").Activate

End Sub



' FindEmptyCellsWithCriterion returns die Anzahl den leeren Zellen,
' oder NULL, wenn die Parametern NOTHING sind

Private Function FindEmptyCellsWithCriterion(ByVal i_rngColumn As Range, _
ByVal i_wshExport As Worksheet, _
ByVal i_vntKriterium As Variant) As Variant
' required
If (i_rngColumn Is Nothing Or i_wshExport Is Nothing) Then
FindEmptyCellsWithCriterion = Null
Exit Function
End If
On Error GoTo Err_In_FindEmptyCellsWithCriterion
FindEmptyCellsWithCriterion = 0
Dim rngCell As Range, rngColumnUsed As Range
Set rngColumnUsed = Application.Intersect(i_rngColumn.Columns(1), i_rngColumn.Parent.UsedRange)
If (rngColumnUsed Is Nothing) Then Exit Function
For Each rngCell In rngColumnUsed.Cells
If (IsEmpty(rngCell) = True And _
VBA.CStr(rngCell.Offset(0, -rngCell.Column + 1).Value) = VBA.CStr(i_vntKriterium)) Then
rngCell.EntireRow.Copy i_wshExport.Range("a" & _
i_wshExport.UsedRange.Rows(i_wshExport.UsedRange.Rows.Count).Row + 1)
FindEmptyCellsWithCriterion = FindEmptyCellsWithCriterion + 1
End If
Next rngCell
Exit Function
Err_In_FindEmptyCellsWithCriterion:
VBA.MsgBox Err.Description, vbCritical
FindEmptyCellsWithCriterion = Null
End Function



' IsEmpty Function overrides VBA.IsEmpty
' IsEmpty returns True, wenn alle Zellen im i_rng Bereich leer sind
' sonnst returns False, NULL wenn i_rng Is NOTHING

Private Function IsEmpty(ByVal i_rng As Range) As Variant
' required
If (i_rng Is Nothing) Then
IsEmpty = Null
Exit Function
End If
Dim rngCell As Range
IsEmpty = True
For Each rngCell In i_rng.Cells
If (rngCell.Value <> "") Then
IsEmpty = False
Exit Function
End If
Next rngCell
End Function

Anzeige
AW: Leere Zellen suchen mit Macro
05.08.2004 15:00:12
harry
hi alexander,
hier ein kleines beispiel, hoffe es hilft und überfordert nicht.

Die Datei https://www.herber.de/bbs/user/9254.xls wurde aus Datenschutzgründen gelöscht

liebe grüße,
harry
AW: Leere Zellen suchen mit Macro
05.08.2004 15:43:19
Alexander
Hi Harry,
super das klappt schon mal für alle leeren Zellen in der Tabelle.
In meinem "bescheidenen" Ansatz hab ich versucht noch weitere Bedingungen mit einzubeziehen:
d.H. Liste mir die leeren Zellen mit der entsprechenden Zeile im anderen Tabellenblatt nur auf wenn:
1. natürlich leer und
2. wenn z.B. in spalte A und der entsprechenden Zeile eine 7 steht.
Wie könnte es auch anderst sein, wenn ich Deinen Code darauf anpassen will scheidere ich mal wieder.
Gruß Alexander
Anzeige
AW: Leere Zellen suchen mit Macro
05.08.2004 16:31:05
Alexander
Sorry ich nochmal,
versteh ich das richtig:
jetzt wird nach leeren Zellen gesucht im gesamten Arbeitsblatt?
und Zusätzlich nach 7 im Gesamtenarbeitsblatt?
Also entweder oder ?
Ich benötige aber:
In spalte a suche nach 7
wenn ja suche leere Zellen in allen spalten.
Wenn beide Kriterien erfüllt sind, schreibe entsprechende Zeilen in Tabelle 2
Soll ich mal eine Beispieldatein schicken.?
gruß
Alexander
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige