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

leere Zeilen in MSGBox

leere Zeilen in MSGBox
16.02.2023 15:05:18
Thomas
Hallo Excel Freunde,

ich kann mit dem Macro:
'--------------------------------------------------------------------
Sub matchen()
Dim lz As Long
Dim z As Long
Dim myArray()
Dim What2Find As Variant 'Suchbegriff aus Spalte 1
Dim dummy As Long
lz = Cells(Rows.Count, 2).End(xlUp).Row
ReDim myArray(1 To lz)
lz = Cells(Rows.Count, 2).End(xlUp).Row
For z = 1 To lz
What2Find = Cells(z, 2) ' 2 ist die vollständige Liste
If Not What2Find = "" Then
On Error Resume Next
'dummy = WorksheetFunction.Match(What2Find, Columns(1), 0) ' Spalte1 ist die zu untersuchende zeile
dummy = WorksheetFunction.Match(What2Find, Columns(ActiveCell.Column), 0) ' Spalte1 ist die zu untersuchende zeile
If Err Then
myArray(z) = What2Find
End If
End If
Next
MsgBox "Folgende Werte fehlen in der markierten Spalte:" _
& String(2, Chr(10)) & Join(myArray, Chr(10))
listbx1

UserForm2.ListBox1.List

End Sub
'------------------------------------------------------------------------------------------------------------------
zwei Spalten vergleichen und fehlende in der Msgbox oder Listbox ausgeben. Beide werden auch mit den entsprechend fehlenden Daten gefüllt.
Das Problem ist das weder die MSGBox noch die Listbox von oben anfängt. Wenn Beispielweise erst der 50 . Datensatz fehlt schreiben mir beide MSGBOX und Listbox erstmal 49 leere Zeilen.
Kann sich jemand mal mein Macro anschauen? Ich bekomme das einfach nicht hin
https://www.herber.de/bbs/user/157863.xlsb
mfg thomas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: leere Zeilen in MSGBox
16.02.2023 15:19:46
onur
Das Problem ist, dass dein Array immer gleich groß ist, nämlich so groß, wie es im Maximalfall sein müsste.
Das Redim muss lauten:
ReDim myArray(0), Dim found as long
und innerhalb der If ERR Schleife:
Redim Preserve myArray(found)
myArray(found) = What2Find
found=found+1

AW: leere Zeilen in MSGBox
16.02.2023 15:34:55
Daniel
Hi
das Problem ist, dass dein Ergebnisarray parallel mit dem Quell-Array läuft.
wenn im Ergebnis nur die fehlenden haben willst, müsstest du für das Ergenisarray einen eigenen Zähler mitlaufen lassen und hinterher das Array auf die notwendige Größe zurechtstutzen:
dim zx as long
for z = 1 to lz
    ...
    If Err Then
        zx = zx + 1
        myArray(zx) = What2Find
    End If
    ...
next
redim preserve myArray(zx)
eine andere Möglichkeit wäre, dass du dir das Ergebnis nicht als Array, sondern als Textstring erstellst
diesen kannst du bei Bedarf dann immer noch in ein Array splitten:
dim erg as string
...
for z = 1 to lz
    ...
    If Err Then
        ERG = ERG & vbLF & What2Find
    End If
    ...
next
MsgBox "Folgende Werte fehlen in der markierten Spalte:" _
& String(2, Chr(10)) & Mid(ERG, 2)
Userform2.Listbox1.List = Split(Mid(ERG, 2), vbLF)
Gruß Daniel
Anzeige
AW: leere Zeilen in MSGBox
16.02.2023 15:36:54
UweD
Hallo
anstelle mit match die Zeile zu ermitteln kannst du doch direkt zählen und dazu countif verwenden.
Das Array nur füllen wenn >0 und später unten abschneiden
versuch es mal so
Sub matchen()
    Dim lz As Long
    Dim z As Long
    Dim F As Long
    Dim myArray()
    Dim What2Find As Variant 'Suchbegriff aus Spalte 1
    Dim dummy As Long
    
    lz = Cells(Rows.Count, 2).End(xlUp).Row
    ReDim myArray(1 To lz)
    For z = 1 To lz
    
        What2Find = Cells(z, 2)  ' 2 ist die vollständige Liste
        
        If Not What2Find = "" Then
        
            dummy = WorksheetFunction.CountIf(Columns(ActiveCell.Column), What2Find) ' Spalte1 ist die zu untersuchende zeile
            If dummy = 0 Then
                F = F + 1
                myArray(F) = What2Find
                
            End If
        
        End If
    
    Next
    
    ReDim Preserve myArray(1 To F)
    MsgBox "Folgende Werte fehlen in der markierten Spalte:" _
        & String(2, Chr(10)) & Join(myArray, Chr(10))
        
    'UserForm2.ListBox1.List
        
End Sub
LG UweD
Anzeige
AW: leere Zeilen in MSGBox
16.02.2023 15:46:40
Daniel
Hi
match ist etwas schneller als CountIf.
beide Funktionen durchsuchen den angegebenen Bereich in einer Schleife von oben nach unten.
Während Match beim ersten Treffer aufhört und fertig ist, muss countif die angegebenen Daten immer bis zum Ende durchsuchen.
wobei das bei den gezeigten Datenmengen der Unteschied nicht spürbar sein dürfte.
wenn man bei Match die ohne die Fehlerbehandlung auskommen will, dann geht das auch:
dim dummy as variant
...
dummy = Application.Match(...)
If Vartype(dummy) = vbError then ...
mit Application.Match bekommt man keinen Fehlerabbruch, wenn der Suchwert nicht vorhanden ist, sondern man bekommt einen Fehlerwert als Ergebnis zurück.
daher kann man auf das On Error Resume Next verzichten, das man Worksheetfunction.Match benötigt.
damit der Fehlerwert weiter verarbeitet werden kann, muss die die Aufnahmevariable als Variant deklariert werden, dann kann man mit den entsprechenden Abfragen damit weiterarbeiten.
Gruß Daniel
Anzeige
wieder was gelernt
16.02.2023 16:39:25
UweD
cc
AW: leere Zeilen in MSGBox
16.02.2023 16:50:56
Thomas
Hallo onur, Daniel und UweD,
habt rechtvielen dank für eure Hilfe.
Vor allem auch für eure Erklärungen. Ich habe da schon seid zwei Tagen rumprobiert .
Aber das ganze Thema Arry ist ganz schön komplex. Mit eurer Hilfe funktioniert das Macro jetzt wie es soll.
Was ich mich am Ende benutzen werde, sehe ich erst wenn ich es auch so halbwegs verstanden habe.
Dazu werde ich mir mit euren Tipps und Beispielen ein wenig vertraut machen. Ist schwer aber auch Spannend.
Habt rechtvielen dank für eure Hilfe
Und falls ihr es bald habt wünsche ich euch einen ruhigen Feierabend.
Besten dank Thomas.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige