formel nur für vorhandene Einträge

Bild

Betrifft: formel nur für vorhandene Einträge von: Anton
Geschrieben am: 22.02.2005 11:24:58

Servus Zusammen,

ich habe zwei Datei-Listen abzugleichen.
Dazu habe ich ein Makro, dass schon gut Funktioniert.
-Aber die Date wird riesig und es dauert ewig.-
Es sind halt zuviele leere Einträge die generiert werden.

Meine Datei-Listen sind sehr verschieden lang (aber > 65000 habe ich nie).
Ich möchte dass die Formel nur für die zellen generieren,
die in der Zelle nebenan einen Dateinamen haben.

Bitte helft mir weiter.

Danke

Euer Anton

PS: hier der bisherige Code:

Sub Dateien_vergleichen()
'Holen der gefundenen Server-Dateien von Tabelle1
 Sheets("gefiltert_nicht_gebookmarkt").Select
 Range("A3:A60000").Select
 Selection.Copy
 Sheets("anwesenheitsprüfung").Select
 Range("C2").Select
 ActiveSheet.Paste
 
 'Holen der der gebookmarkten Dateien von Tabelle2
 Sheets("gefiltert_gebookmarkt").Select
 Range("A3:A60000").Select
 Selection.Copy
 Sheets("anwesenheitsprüfung").Select
 Range("A2").Select
 ActiveSheet.Paste
 'Vorbereiten des Vergleichs-Blatt
 'Setzen der Überschriften
 Sheets("anwesenheitsprüfung").Select
 Range("C1").Select
 ActiveCell.FormulaR1C1 = "hier wird nach Dateien Gesucht"
 Range("A1").Select
 ActiveCell.FormulaR1C1 = "nach diesen Dateien wird gesucht"
 Range("B1").Select
 ActiveCell.FormulaR1C1 = "OK?"
 Range("D1").Select
 ActiveCell.FormulaR1C1 = "-leer-"
 Range("E1").Select
 ActiveCell.FormulaR1C1 = "Fundstücke"
 Rows("1:1").Select
 Selection.Font.Bold = True
  
 'einfügen der Vergleichs-Formel
 '=SVERWEIS(A2;C:C;1;FALSCH)
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-4],C[-2],1,FALSE)"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E60000"), Type:=xlFillDefault
    Range("E2:E60000").Select
 
 'einfügen der Gefunden-Formel
 '=WENN(ISTLEER(A2);" ";WENN(ISTFEHLER(E2);"<= nix da";"<= gefunden"))
    Range("B2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ISBLANK(RC[-1]),"" "",IF(ISERROR(RC[3]),""<= nix da"",""<= gefunden""))"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B60000"), Type:=xlFillDefault
    Range("B2:B60000").Select
    
    Columns("A:B").Select
    Columns("A:B").EntireColumn.AutoFit
End Sub

Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Marcl
Geschrieben am: 22.02.2005 11:36:27

Hallo Anton,

wie wäre es mit einer Loop Anweiseung. Z.B.
Jede Zelle in F nach unten durchsuchen und wenn Zelle voll, dann in E daneben die Formel sonst weiter nach untern bis 65001.

Gruß

Marcl


Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Anton
Geschrieben am: 22.02.2005 11:47:06

Hallo Marcl,

heissen Dank für Deine schnelle Antwort.

Loop-Anweisungen kann ich leider genausowenig wie If-Abfragen.
Mit dem Makro-Rekorder kann ich (solala) umgehen.
Bei mir beisst's hier eben aus.

Kannst Du mir bitte weiterhelfen?

Servus,
Anton


Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Marcl
Geschrieben am: 22.02.2005 11:50:32

Hier ist der Rest Deines Makros,
ich habe die beiden Formeln zusammengefasst, wenn in F2 etwas steht, werden in E2 und B2 die beiden Formeln eingetragen, sonst bleiben die Felder leer.
Das Makro läuft bis 65001.

Sub DeinMakro()
 Rows("1:1").Select
 Selection.Font.Bold = True
formel1 = "=VLOOKUP(RC[-4],C[-2],1,FALSE)"
formel2 = "=IF(ISBLANK(RC[-1]),"" "",IF(ISERROR(RC[3]),""<= nix da"",""<= gefunden""))"
Range("F2").Select
Do While ActiveCell.Address <> "$F$65001"
If ActiveCell <> "" Then
 'einfügen der Vergleichs-Formel
 '=SVERWEIS(A2;C:C;1;FALSCH)
ActiveCell.Offset(0, -1) = formel1 ' Formel wird in Spalte E gleiche Zeile eingetragen
 'einfügen der Gefunden-Formel
 '=WENN(ISTLEER(A2);" ";WENN(ISTFEHLER(E2);"<= nix da";"<= gefunden"))
ActiveCell.Offset(0, -4) = formel2 ' Formel wird in Spalte B gleiche Zeile eingetragen
End If
ActiveCell.Offset(1, 0).Select
Loop
    Columns("A:B").Select
    Columns("A:B").EntireColumn.AutoFit
End Sub



Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Anton
Geschrieben am: 22.02.2005 12:12:08

Hallo Marcl,

heißen Dank für Deine schnelle Hilfe.
Weltklasse was Du so alles weisst...

Werde nach meiner Mittagspause das Ding zusammen-zimmern und testen.

Bis bald,
Anton


Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Anton
Geschrieben am: 22.02.2005 18:04:43

Hallo Marcl,

Habe heute Nachmittag das Ding zusammengezimmert und getestet.
;-( Leider ohne Erfolg.
Es Arbeitet zwar, aber da wo Dateien sind ist auch danach nix.

Kannst Du bitte nochmal drüberschauen?
Hier ist meine Datei:
https://www.herber.de/bbs/user/18533.xls


Vielen Dank

Bis bald,
Anton


Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Marcl
Geschrieben am: 23.02.2005 09:10:42

Moin moin,

ich bin von einer falcshen Suchspalte ausgegangen.

Hier das funktionierende Makro in ganzer Länge:


Sub alte_formel()
 
'Holen der gefundenen Server-Dateien von Tabelle1
 Sheets("gefiltert_nicht_gebookmarkt").Select
 Range("A3:A60000").Select
 Selection.Copy
 Sheets("anwesenheitsprüfung").Select
 Range("C2").Select
 ActiveSheet.Paste
 
 'Holen der der gebookmarkten Dateien von Tabelle2
 Sheets("gefiltert_gebookmarkt").Select
 Range("A3:A60000").Select
 Selection.Copy
 Sheets("anwesenheitsprüfung").Select
 Range("A2").Select
 ActiveSheet.Paste
 'Vorbereiten des Vergleichs-Blatt
 'Setzen der Überschriften
 Sheets("anwesenheitsprüfung").Select
 Range("C1").Select
 ActiveCell.FormulaR1C1 = "hier wird nach Dateien Gesucht"
 Range("A1").Select
 ActiveCell.FormulaR1C1 = "nach diesen Dateien wird gesucht"
 Range("B1").Select
 ActiveCell.FormulaR1C1 = "OK?"
 Range("D1").Select
 ActiveCell.FormulaR1C1 = "-leer-"
 Range("E1").Select
 ActiveCell.FormulaR1C1 = "Fundstücke"
 Rows("1:1").Select
 Selection.Font.Bold = True
 
formel1 = "=VLOOKUP(RC[-4],C[-2],1,FALSE)"
'einfügen der Vergleichs-Formel
'=SVERWEIS(A2;C:C;1;FALSCH)
formel2 = "=IF(ISBLANK(RC[-1]),"" "",IF(ISERROR(RC[3]),""<= nix da"",""<= gefunden""))"
'einfügen der Gefunden-Formel
'=WENN(ISTLEER(A2);" ";WENN(ISTFEHLER(E2);"<= nix da";"<= gefunden"))
Range("A2").Select   'BezugsZelle für alle Aktionen = Zelle F2
Do While ActiveCell.Address <> "$A$65001"   'bis zur Zelle F65001 arbeiten
zell = ActiveCell.Address
If ActiveCell <> "" Then   'wenn auf eine leere Zelle gestoßen wird
 
ActiveCell.Offset(0, 4).Select
ActiveCell = formel1 ' Formel wird in Spalte E gleiche Zeile eingetragen
ActiveCell.Offset(0, -3).Select
ActiveCell = formel2 ' Formel wird in Spalte B gleiche Zeile eingetragen
End If
Range(zell).Offset(1, 0).Select
Loop
'Schönheitsoperation: automatische Spaltenbreite
    Columns("A:B").Select
    Columns("A:B").EntireColumn.AutoFit
End Sub



Gruß

Marcl


Bild


Betrifft: AW: formel nur für vorhandene Einträge von: Anton
Geschrieben am: 23.02.2005 09:40:24

Hallo Marcl,

heißen Dank.

Alles funktioniert wunderbar.

Danke.

Servus,
Anton


 Bild

Beiträge aus den Excel-Beispielen zum Thema "formel nur für vorhandene Einträge"