Excel Zahlen suchen

  • Hallo Leute

    Bin absoluter Neuling in Sachen Autoit

    Ich habe in Excel ca 200 Millionen Zahlen (von 1- 50) Archiviert und es werden stetig mehr.
    Es werden Zahlen in bestimmter Reihenfolge gesucht
    Da die Zahlen öfters in richtiger Reihenfolge vorkommen werden Sie dann in einem eigenen Tabellenblatt angezeigt.
    Es sieht dann so Aus:

    In Blatt 1 sind meine Zahlen (200 Millionen)
    In Blatt 2 werden die gesuchten Zahlen eingegeben

    z.b
    18
    47
    12
    15
    In Blatt 3 werden die gefunden Zahlen kopiert und Farblich angezeigt inklusive 2 Zahlen davor als auch danach.

    Das durchsuchen dauert bei mir 25 min.
    Jetzt hab ich mir gedacht das über Autoit zu machen um wenn Möglich die Suchzeit deutlich zu drücken.
    Mein Ansatz wäre eine csv in ein Array einzulesen und dann die bestimmte Zahlenreihenfolge Suchen.

    Nun meine Frage an die Spezies.
    Sinnvoll oder nicht gegenüber Excel
    Ist dies überhaupt realisierbar und vorallem deutlicher Zeitgewinn.
    Habt ihr eine andere Idee

    Über ein paar Antworten würde ich mich freuen

  • Hi Kanahius

    erstmal Danke für deine Antwort
    Welche Details brauchst du genau ich kann dir wenn du willst eine Excel Datei mit weniger Nummern schicken
    dann siehst du wie das ganze abläuft.

  • Du bist sicher, dass Excel das beste Format ist um solche Datenmengen zu speichern. Excel ist als Kalkulationsprogramm prädestiniert um Berechnungen durchzuführen.
    Um große Datenmengen zu durchsuchen scheint mir ein Datenbank sinnvoll zu sein. Mit einer Abfragesprache wie SQL (wobei Q ja für Query steht) bist Du sicher effizienter unterwegs als mit Excel.

  • Excel war mir am Anfang am einfachsten konnte mit Makros schnell die Zahlen suchen und finden
    aber es wurden mit der Zeit immer mehr Zahlen sodas es jetzt immer länger dauert bis zum Ergebnis.
    Von SQL habe ich leider keine Ahnung bin aber lernfähig

  • Hi,
    ich habe auf diesem Rechner leider kein Excel, habe aber dein Script mit OpenOffice durchleuchtet.
    Du hat das gleiche Problem wie fast sämtliche "Macro-Programmierer" auch. Du versuchst, zu "Exceln", statt zu programmieren...
    Mit
    arrSuch = .Range(.Cells(1, 1), .Cells(lngLetzte2, 1))
    bist du auf dem richtigen Dampfer, du überträgst die Suchzellen in ein Array! Allerdings machst du mittels
    If wksBlatt1.Cells(lngZeile + i - 1, lngSpalte) = arrSuch(i, 1) Then
    wieder alles zunichte...du vergleichst "langsam" Zellinhalte mit (schnell) Arrayinhalten.
    Jetzt kommt der Einwand "ja aber Excel kann doch keine Arrays größer xxxx anlegen!!!". DAS meinte ich mit "Exceln" statt programmieren! Niemand zwingt dich, ALLE Zeilen in ein Array zu packen, du könntest auch nacheinander mehrere Blöcke aus der Tabelle nacheinander in EIN Array schreiben und dieses dann sehr schnell mit VBA durchsuchen!

    Anderer Weg:
    Speichere jede Spalte als CSV, und suche dann in dieser Datei mittels INSTR() nach den Suchbegriffen. Die von INSTR() zurückgegebenen Positionen sind die "Zeilen" (bzw. die Anzahl der Kommas bis dorthin).
    Ich vermute ganz stark, das ist die schnellste Methode!

  • Hi Andy

    Ein paar Fragen hätte ich zu deinem Vorschlag.

    Muss ich jede Spalte als csv abspeichern ich könnte doch die Ganze Excel Datei als csv speichern oder nicht?
    INSTR gibt mir doch nur die Position der 1. Zahl an oder aller 4 gesuchten Zahlen in richtiger reihenfolge an.
    Da sich meine Zahlen ja öfters wiederholen wird beim Ersten Treffer abgebrochen oder wird die Ganze Spalte bis zum Schluss durchsucht?
    Mit SQL habe ich mich heute ein wenig beschäftigt k.A ob ich nicht weg von Excel und in diese Richtung gehe.
    Ich muss auf jeden Fall schneller mein Ergebnis erzielen das ist Fakt denn das Archiv wird stetig grösser.


    lg
    Vitaq

  • Hi,

    ja, du könntest die gesamte Tabelle als csv speichern,spaltenweise...

    Bzgl. SQL, du kannst innerhalb von VBA so gut wie alle Dateiformate als "Datenbank" öffnen, also auch eine "normale" XLS-Datei. Bearbeiten/Abfragen kannst du diese dann wie jede andere Datenbank auch.

    Ich habe mir da einmal eine Vorlage/Funktion geschrieben, sämtliche SQL-Abfragen lese ich als Textdatei ein. So muss ich nur noch die beispielsweise mit dem DB-Manager erstellten DB-Abfragen in eine Textdatei kopieren, fettich! Bin kein DB-Fuzzi, und um bspw. eine Abfrage zu ändern/erweitern editiere ich nur die Textdatei mit der Abfrage und muss nicht in tausenden Zeilen Code und zig Modulen rumsuchen.

    Wie kommen denn deine Daten nach Excel bzw. woher kommen die Daten überhaupt und was ist das Ziel bzw. was muss/soll mit den gefundenen Daten gemacht werden?
    Bei AutoIt müßtest du die komplette Anwendung schreiben, incl. in/out. Da stellt sich die Frage, ob sich das lohnt...

  • Hi

    Meine Daten kommen von mehreren Kunden als txt Datei zu uns die wir dann ins Excel laden.
    Es sind mehr oder weniger alles Artikelnr. mit etwas anderem System
    Es sind stets 4 Nummern aber einige Danach als auch Davor sind wichtig diese gefunden Zahlen gehen widerum zurück zum Kunden.
    Ich würde gerne bei Excel bleiben aber ich weiss nicht ob das auf Dauer so gut ist.
    Dein Vorschlag mit der csv ist schon mal ein Anfang muss nur schauen wie ich das jetzt umsetzten kann.
    Da die Zahlen ja öfters vorkommen brauche ich alle Treffer in einer eigenen Tabelle angezeigt so wie bisher.

  • Ich hab es jetzt fertig umgesetzt. Sollte das sein, was du haben möchtest.
    Ich hab den Quelltext auch hinzugefügt, falls es dir hilft :).
    Ich weiß ja nicht, ob du Java schon benutzt hast.

    Kannst ja schreiben, wie schnell es angezeigt wird :).

    MfG Kanashius

  • Hi Kanashius

    Entschuldige das ich Frage habe Java noch nicht benutzt aber was muss/soll ich jetzt mit diesen Dateien anfangen.
    Kannst du mir das bitte etwas erklären

    lg
    Vitaq

  • Hi Kanashius

    Erstmal Danke für dein Programm läuft ganz gut
    was aber noch super wäre wenn es eine Statusanzeige für die Dauer der suche noch gäbe.
    Prozentanzeige,Balken oder welche Spalte gerade durchsucht wird egal was nur das ich sehen kann
    ob das Progri noch läuft oder vielleicht abgestürzt ist.
    Ansonsten Top

    lg
    Vitaq

  • Das kann garnicht abstürzen ;)
    Alle Anzeigen gehen natürlich auch auf die Geschwindigkeit..., wenn auch meist gering...
    So, in 100er Schritten wir die Zeile geupdatet, Spalte wird auch angezeigt.

    Kannst ja zum üben mal im Controller in der setStatus-Methode gucken, ob du den umbasteln kannst auf eine Progressbar. In Table kannst du die aktuelle Spalte,... übergeben ;)

    MfG Kanashius

  • Hi Kanashius


    Ich habe jetzt dein Programm getestet nun habe ich ein kleines Problem.
    Meine csv ist ca 900 mb gross aber dein Pogramm durchsucht die Datei nicht
    Es tut sich einfach nichts auch nach 1 Stunde kamen keine Ergebnisse
    Kleinere csv Dateien funktionieren aber die große nicht.
    Deswegen wollte ich auch eine Art Statusbar um zu sehen ob es noch läuft.
    Kann es an der größe der csv liegen has du es auch mit einer größern csv probiert ?
    Kannst du dir das Bitte nochmals anschauen wäre nett


    lg
    Vitaq

  • Bei 230MB läuft es bei mir in 4 Sekunden durch... Probier mal dem Programm mehr RAM zu geben:
    SearchNumbers.jar -Xmx4096m
    oder
    java -jar SearchNumbers.jar -Xmx4096m
    In die Kommandozeile in dem Ordner angeben, in dem die JAR-Datei liegt.
    Falls du weniger als 4GB hast die 4096 kleiner machen. (Standart ist glaub ich ~1GB und das dürfte bei 900MB zu wenig sein)

    MfG Kanashius