Office: Array incl. Zellen Formatierung speichern und ausgeben?

Helfe beim Thema Array incl. Zellen Formatierung speichern und ausgeben? in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Halloechen zusammen, mal eine allg. Frage. Bin gerade dabei mein Script zu Optimieren... Ich habe eine Auswertungs Datei. Das heisst in dieser Datei... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von FloGrom, 1. Mai 2017.

  1. Array incl. Zellen Formatierung speichern und ausgeben?


    Halloechen zusammen,

    mal eine allg. Frage.
    Bin gerade dabei mein Script zu Optimieren...

    Ich habe eine Auswertungs Datei.
    Das heisst in dieser Datei waehle ich mit ...
    With Application.FileDialog(msoFileDialogFilePicker)...
    eine Datei aus, und Importiere alle benoetigten Daten.

    Dies Funktioniert auch soweit und mache dies ueber folgenden Weg.


    Code:
    Ich gehe meine Range durch, Pruefe ob bestimmte Voraussetzungen gegeben sind, trifft diese zu, uebernehme/kopiere ich die benoetigten Daten in die aktuelle Datei.

    Soweit so gut.

    Als Array Variante habe ich folgendes gebastelt ...

    Code:
    Auch dieser Versuch klappte wunderbar.
    Ein direkter Vergleich brachte 5sek. statt 25sek. Eigentlich Top.

    Aber...

    Mit der ersten Methode "Copy Destination:=" wurden auch alle Formate uebernommen, Rahmen, Hintergrund etc...
    Dies macht meine Methode uber ein Array nicht.
    Die Formatierungen sind aber u.a. fuer die weitere Verarbeitung relevant.

    Nun die eigentliche Frage. Ist es irgendwie auf dem zweiten Weg moeglich, die Formatierung mit zu uebernehmen?
    Oder ist dies als array nicht vorgesehen. Darum konnte ich wohl auch fast nichts dazu finde.

    Viele Gruesse
    Flo

    :)
     
    FloGrom, 1. Mai 2017
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    das ist kein Array.

    Sheet1(iii, 2).copy Worksheets("TEST").Cells(zeile, 2).Value
     
    Hajo_Zi, 2. Mai 2017
    #2
  3. Hallo Flo,

    dass der 2. Code mit Arrays läuft, würde ich nicht behaupten. Du weist hier lediglich Werte von jeweils einer Zelle an eine andere zu.

    Ich würde die kompletten Daten von der Quelle in ein Hilfsblatt kopieren, die nicht gewollten Spalten löschen, in einer Hilfsspalte mit Istzahl() die Spalte 1 prüfen, dann die restlichen Daten nach dem Suchbegriff und dem Formelergebnis filtern und die verbleibenden Daten zum Ziel kopieren.

    Was soll das werden? "Malen nach Zahlen"?
    Formate sind absolut schlecht als Auswertungskriterium geeignet. Würde ich niemals in Erwägung ziehen!

    Grüße
    EarlFred
     
    EarlFred, 2. Mai 2017
    #3
  4. Array incl. Zellen Formatierung speichern und ausgeben?

    Haloelle,

    Hatte ich das irgendwo behauptet?


    Hallo EralFred,

    der Import lauft sozusagen ueber ein Array, so wird jedenfalls "Sheet1" im
    VBA Editor bezeichnet.
    Falls dem wirklich nicht so ist, ok. Hatte zuvor mich nie mit Arrays beschaeftigt, also kann ich wirklich nicht viel dazu sagen.


    Auf jeden Fall ist ueber den zweiten Weg ein geschwindigkeit zuwachs zu verzeichnen, alleine wohl auch dadurch, das er alles benoetigte (wenn auch mehr als ich eigentlich brauche) einmal in den Speicher liest und nur noch von dort die benoetigten Daten entnimmt.

    Geht wohl schneller als der erste Weg.

    Bei meinem jetzigen Weg muss zu einem, solange der Import lauft, die zweite Excel Datei geoeffnet bleiben und jede einzelne Zeile muss direkt in dieser geprueft werden ob dies brauchbar ist oder nicht und im Anschluss Kopiert.
    Dadurch unter anderem findet wohl der Import langsamer statt.


    So wie du es jetzt beschrieben hast, geht mein erster Weg.
    Ich importiere mit Copy/Paste die Daten und habe dann einen zweiten Schalter fuer die weitere Berechnung.

    Dachte nur uber den zweiten Weg, koennte ich den Daten Import beschleunigen.
    Haette dies soweit geklappt. Dann haette ich auch versucht den zeiten Schritt zu optimieren.


    Malen nach Zahlen?
    Ist die Welt so klein das es wirklich kein Argument z.b. eben fuer Formatierungen gibt?
    Ich versuche mal wiederzugeben warum dies so ist, dann kannst du bei Lust und Laune nochmals eine Feedback dazu geben, ob du es nun immer noch "niemals in Erwaegung ziehen" wuerdest, oder doch noch einen besseren/anderen Vorschlag hast.

    Eine kurze Erlaeuterung.
    Zu einem nicht meine Idee, so wird dies hier schon seit Jahren umgesetzt.
    Und wenn sich schon leute an diesen Weg gewoehnt haben, kann ich nicht von heute auf morgen alles umstellen.
    Ich bringe nur eine, meiner meinung nach, sinvolle Erweiterung ein.


    Nun aber das was und wraum dies so ist...
    Dies ist eine Excel (Produktions Datei). Darin werden Produkte zur Herstellung eingezeichnet(geschrieben). Dies auf zwei "Spalten" (a 15 Spalten) mit je 70 Zeilen.
    So das 140 Produkte auf ein DIN A4 Blatt spaeter passt. (Und der Platz reicht gerade so)

    Diese Datei, wenn soweit Fertig, wird am Ende ausgedruckt und spaeter in Produktionshallen weitergegeben.
    Nach dieser werden Produkte hergestellt.
    Jetzt sag mir mal Bitte, was ist in solch einer Produktions umgebung einfacher zu erkennen, eine kleine Spalte mit einem z.B. X oder einem kleinem Info Feld, oder wenn z.b. ein Bereich Farblich markiert ist?

    Diese Farb Markierung ist nun fuer mich nicht allzu relevant, es gibt aber eine weitere Formatierung.
    Produkte welche ausgeliefert worden sind, diese werden hier mit "Good" (dem Excel vorformatierten Style) gekenzeichnet.

    Auch hier, was ist schneller fuer den Menschen zu erkennen, wieder nur eine Spalte mit einem X etc., oder wenn Mann/Frau gleich sieht ...
    Ja, die Spalte hat diese Farbe
    ... also schon ausgeliefert?

    Man kann sich sicherlich ueber vieles Streiten ob sinnvoll oder nicht.
    In diesem Fall finde ich selbst diesen Weg fuer Sinnvoll, da fuer den Menschen es eindeutig schneller wahrzunehmen ist, ist es A oder B, oder wie jetzt in diesem Fall ausgeliefert oder nicht.

    Gerne nehme ich aber andere Vorschlaege an.
    Dafuer muss man aber erst einmal wissen um was es geht und warum es so ist wie es ist.


    Es geht/ging eigentlich darum, diese Excel Tabelle zu nehmen und eben noch nicht ausgelieferte Waren anzuzeigen.
    Bisher klappt auch mein Weg wunderbar.

    Jetzt wollte ich eigentlich nur eine geschwindigkeits Optimierung vornehmen. Jetzt Sehe/Lese ich, das dies so nicht moeglich ist.
    Da eben der Weg ueber ein "array" (ode was es auch immer seien soll), nur die reinen Daten Speichert, aber keine weitere Formatierung.

    Vielen Dank trotzdem fuer euer Feedback. Hatte gerade eben etwas Lust zu schreiben. *grins

    Viele Gruesse
    Flo

    PS. Das Malen nach Zahlen, kommt dann ganz zum schluss, nachdem ich die Fertige Liste habe um eine ladungs Skizze zu zeichnen. *grins
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    FloGrom, 2. Mai 2017
    #4
  5. gelöscht
     
    EarlFred, 2. Mai 2017
    #5
  6. Hallo,

    was spricht dagegen, die Formatierung auf den neuen Bereich zu kopieren? Oder du erstellst gleich eine Kopie des alten Blatts und fügst dort die Daten dann ein.
     
    Der Steuerfuzzi, 2. Mai 2017
    #6
  7. war's das jetzt? "Erledigt-"Haken dran und alles in die Mülltonne?
     
    EarlFred, 2. Mai 2017
    #7
  8. Array incl. Zellen Formatierung speichern und ausgeben?

    Hallo Flogrom,

    was deinen Code langsam macht ist das Zeilenweise eintragen in ein neues sheet. Excel benötigt zum eintragen Werte in eine Zelle ungefähr genausolang wie zum eintragen 1000 Werte in 1000 Zellen.
    Wenn du eine Variable als Array definierst und im Arbeitsspeicher befüllst und dann auf einmal in dein neues Tabellenblatt einträgst ist das egal ob du 1 Zelle oder 100.000 Zellen schreibst.

    Gut, das löst nicht dien Format-Problem, aber ist ein array und viel schneller.
    Das Array dimensionierst du wie deine Exceltabelle:
    Dim vx(1 To 65536, 1 To 1) As Variant
    dieses Beispiel dimensioniert eine 1. Spaltige Variable mit 65536 Zeilen, die du dann mit deinen Werten befüllst, im Arbeitsspeicher. Wenn du fertig mit sammeln bist, schreibst du das in die Neue Tabelle:

    With ActiveSheet
    .Range(.Cells(1, 1), .Cells(65536, 1)) = vx
    End With
     
    wastl, 2. Mai 2017
    #8
  9. Hallo EarlFred,

    Danke Dir ueberhaupt fuer dein Feedback.

    Kindstrozig, ich dachte ein Forum sei fuer einen Austausch da, ich nehme vorschlaege gerne an, lasse mich auch korrigieren, kommt sicherlich oft vor da ich auch nicht perfekt bin. Sry wenn das so bei Dir nun so ankam.

    Wie gesagt, ein Forum sollt fuer ein Austausch da sein und du kannst mich gerne Korrigieren. Wenn ich aber alles wuesste, dann muesste ich ja auch ein Forum nicht benutzen, jedenfalls nicht um Fragen zu stellen.

    Das war eben erst einmal meine gedachte/geschriebene Meinung, welche ich fuer richtig erachtet habe, jetzt mit deinem Posting weiss ich das ich teilweisse falsch lag.
    Dafuer sollte aber so etwas da sein.



    Du kennst nicht mal ansatzweise diesen Laden, wenn du das sehen wuerdest, dann haettest du mehr zum Lachen/Weinen.
    Und ich meine dies nicht nur so, so wie andere meist so etwas schreiben.
    Andere Geschichte...


    So habe ich dies heute schon umgesetzt, mit Hilfsspalten welche Gruppiert werden koennen.
    Ich weiss was du damit meinst, und auch das damit z.b. die Auswertung auch einfacher wird.
    Nur arbeite nicht ich mit dieser Datei, sondern andere Leute und das was ich schon umgesetzt habe, dafuer musste ich mich schon verbiegen.

    Obwohl ich vieles einfach dann selbst gemacht habe und dann gesagt wurde, was, so geht das auch.
    Die nutzen wirklich einen PC/Excel als reine Schreibmaschine.


    Ich weiss auch, das es sich mit z.B. deiner Hilfsspalte viel einfacher arbeiten laesst.
    Das muss ich aber erst einmal den Leuten auch beibringen und hier geht es nur Schritt fuer Schritt. Auch wenn ich weiss das vieles damit ungemein einfacher wird.

    Bestes Bsp.
    Ich habe gedacht. Nachdem die Person die gerade meine Datei verwendet, also alle Buttons (fuer Script Steuerung) verwendet hat, ich diese einfach ausblende.
    Diese Buttons befinden sich ganz oben im Sheet und haben eine Gruppierung.
    Sobald nun der letzte Button gedruckt wurde. Wird eben automatisch die Gruppierung geschlossen.
    So hat man im Anschluss mehr Platz um den Rest zu sehen.


    Dies Option habe ich ein paar Tagen zovor eingefuegt und nicht mehr daran gedacht.

    Dann wurde mir paar Tage spaeter gesagt, nachdem ich mal nach Rueckfrage gebeten habe, ob denn soweit alles in Ordnung sei.
    O.Ton: Es verschwinden die Buttons/Werden geloescht.

    Was glaubst du wie ich erst mal geschaut habe. *boah
    Was habe ich fuer einen Fehler gemacht, was haben die evtl. falsch gemacht....
    Selbst getestet, alles war in Ordnung. Ich bin nicht drauf gekommen...


    Nachdem ich, nochmals tage spaeter, alles selbst durch gegangen bin.
    Erst dann hat es Klick gemacht.
    Die Buttons, ja verschwinden, werden aber nicht geloescht oder sonstiges.
    Es ist nur die Gruppierung die zugeklappt wird ...
    Da musste ich erst einmal lachen. *rolleyes.gif*

    Selbst ich bin kein Excel Profi.
    Aber wenn Leute, die schon jahre mit Excel arbeiten (taegliche Arbeit), auch wenn Sie z.b. die Gruppierungs Funktion nicht kennen, nicht erkennen, das Links noch etwas zusaetzlich da ist (die Gruppierungs Spalte).
    Naja, dann weiss ich erst recht, ich kann nicht zu viel auf einmal veraendern.


    Natuerlich meinte ich mit "deinem Weg gegangen" nicht, das ich alles genau so umgesetzt habe...

    Du meintest alles Kopieren (Hilfstabelle) und dann Auswerten. Ich bin kein Fachmann, hier hast du natuerlich den Vorteil das du gleich eben alles Blockweisse Kopiert hast (Bagger = schneller) und ich eben diese Schritte zusammen gefueht habe (nur relevantes aussuche) (die Pinzette).

    Nicht Kindstrotzig oder sonst etwas, hier nun meine Vorstellung, welches ich in meinem Kopf hatte.

    Wie ich es mache:
    - Datei oeffnen
    - Ist die Zeile relevant Ja/Nein (pruefe mit 2/3 Bedingungen)
    - Kopiere wenn zutrifft die benoetigten Inhalte
    - Naechste Zeile...

    Du meintest:
    - Datei oeffnen
    - Gleich alles im Block in eine Hilfstabelle Kopieren.
    - In dieser die Auswertung vornehmen. (Filtern/loeschen etc.)
    - und passende stellen dann kopieren.


    Ich mag sicherlich Falsch liegen, sonst wuerdest du mich nicht korrigieren.
    Aber so vom Prinzip her, haette Ich in meinem Kopf gedacht, es kommt aufs selbe raus. (OK, ich versteh es wirklich nicht, warum das eine schneller als das andere seien soll, aber auch hier liege ich wohl sicherlich falsch.)

    Ich glaube nach dem Schreiben komme ich langsam darauf was du gemeint haben koenntest, erst alles Filtern etc. und dann dies "alles" im Block in die passende Stelle kopieren.
    Dies meinstest du wohl, was den Code schneller macht.
    Man kopiert nicht Stueck fuer Stueck (wie ich es gerade mache), sondern bereitet den Block soweit vor und kopiert/verschiebt diesen am Stueck...




    Siehst du, auch dies...
    Denn nochmals: Ein Array ist ein Datenfeld. Du verwendest keine Datenfelder.
    ... Ich hab keine Ahnung was du meinst.


    Set Range1 = WSImport1.Range("A3:AF250")
    Sheet1 = Range1
    In meinem zweiten Versuch mit folgendem Inhalt kommt im VBA Fenster folgdendes heraus.

    Code:
    Also es sah und sieht fuer mich, so vom Aufbau und da man die Datenfelder auch einzeln ansprechen kann mit z.b. mit...
    Code:
    wie ein Array aus.

    Schlage mich... Entweder es war alles Falsch was ich bisher darueber gelesen habe oder ich verstehe es wirklich nicht.




    Also, meine Ausgangsfrage ging ja nur darum, ob man dieses Ding (ich nenne es nun mal nicht weiter array) als Alternative zu meinem jetzigen vorgehen nehmen koennte.
    D.h. bestimmte Inhalte incl. Formatierung kopieren/uebertragen.
    Und damit hast du meinen Ganzen Code schon gesehen.

    Aber wenn du mir nicht glaubst...
    Hier wirklich der gesamte Block, ist nur Copy&Paste fuer alle weiteren, fuer mich relevanten, Bloecke.

    Code:
    PS. Ich sage das auch immr zu leuten, falls ich eine rueckfrage habe, das dies mir nur in einfachen schritten sagen sollen. Ohne viel Details drum herum, wirklich das noetigste.

    Darum meine ich Dich wohl auch missverstanden zu haben.

    Mein Gedanke:
    Wenn du sagen wuerdest...
    Jetzt ist die Performance schlecht, "weil" du jetzt jede Zeile einzeln ueberpruefst und jede Zeile einzeln kopierst.

    Du koenntest es auch folgendermassen machen.
    Kopiere ganzen Bereich in eine Hilfstabelle, Filter etc... diese, und wenn alles so aussieht wie es aussehen sollte, kopiere den ganzen Block wohin du willst.
    WEIL du damit dir die einzelnen kopier Aktionen sparst und bist damit (Blockweisse uebernhemne) performanter.

    Damit meine ich, fuer Dich mag es gleich ersichtlich sein. warum dies so ist (schneller).
    Aber wenn schon jemand wie ich, solch eine daemliche Frage stellt und man ja auch sieht (mein Code bsp) wie ich vorgegangen bin.
    Dann sollte man davon ausgehen das diese Person (jetzt Ich), nicht von einem alternativen Weg eine Ahnung hat.

    Ich kannte bisher nur den einen Weg und haette nicht gedacht, das dein Vorschlag irgend etwas anderes macht.
    Erst mitten im Schreiben bin ich drauf gekommen.

    Heute bin ich wirklich in schreib laune. Sry. *Smilie

    Viele Gruesse
    Flo
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    FloGrom, 2. Mai 2017
    #9
  10. Hallo EarlFred, nein nicht Haken dran und Muelltonne.
    Diesen Haken habe ich schon heute morgen gesetzt, bevor noch jemand geantwortet hat.

    Und in der zwischenzeit habe ich den Text darueber verfasst.
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    FloGrom, 2. Mai 2017
    #10
  11. Hallo Wastl,

    danke auch fuer dein Feedback, wie ich in meinem drueber liegendem Posting schon geschrieben habe, das ich glaube versanden habe, was mein Code so langsam macht.
    Genau wie du jetzt gesagt hattest, das Kopieren/Eintragen von Werten.

    Bei mir braucht es manchmal laenger, bis ich solche Sachen verstanden habe.

    Jetzt habe ich es wirklich verstanden und kann damit auch nach einer anderen loesung suchen, u.a. diese welche EarlFred vorgeschlagen hat.

    Viele Gruesse
    Flo
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    FloGrom, 2. Mai 2017
    #11
  12. wastl, 3. Mai 2017
    #12
  13. Array incl. Zellen Formatierung speichern und ausgeben?

    Was man ggf. machen kann, ohne den Code zu "redesignen", wäre zusätzlich neben ScreenUpdating andere Funktionalität abzuschalten. Und danach wieder einschalten. Reicht auch oft aus
    Code:
     
    Storax, 3. Mai 2017
    #13
  14. Danke euch allen,

    danke wastl, so einfache Bsp. sind immer gut. Jedenfalls fuer mich.
    Aber im grundsatz habe ich schon verstanden wo ich wirklich noch ansetzen kann.

    Auch dir Danke Storax,

    stimmt dies im gesamten zusammen zu fassen ist auch nicht schlecht.

    Bezueglich "EnableEvents" habe ich selbst in meinem Code gestern noch einen "Fehler" etdeckt, falsche Positionierung.
    Es wurde das "EnableEvents" zu frueh und ungewollt, beim Import wieder aktiv.

    So hat der Import vorgang nochmals um einiges laenger gedauert.
    Und das eben nur durch ein falsches Setzen einer Code Zeile.
    Erst durch Zufall bin ich auf den Fehler gekommen.

    Viele Gruesse euch allen
    Flo
     
    FloGrom, 3. Mai 2017
    #14
Thema:

Array incl. Zellen Formatierung speichern und ausgeben?

Die Seite wird geladen...
  1. Array incl. Zellen Formatierung speichern und ausgeben? - Similar Threads - Array incl Zellen

  2. Mittelwert aus mehreren Spalten als dynamisches Array

    in Microsoft Excel Hilfe
    Mittelwert aus mehreren Spalten als dynamisches Array: Hallo liebes Forum, ich bin bei folgendem Problem ratlos: Ich berechne für verschiedene Dozenten Feedback anhand von 3 verschiedenen Kriterien. Die Stammdaten der Feedbacks stehen in einer...
  3. Adressen in eine Zelle bei Übereinstimmung eindeutiger Werte einer anderen Spalte

    in Microsoft Excel Hilfe
    Adressen in eine Zelle bei Übereinstimmung eindeutiger Werte einer anderen Spalte: Hallo zusammen, wer letzteren Thread kennt, hier eine Neuauflage. Problem: Aus Array-Berechnungen (Variablen von Let) ein weiteres Array zu erzeugen, welches für alle eindeutigen Werte aus G die...
  4. Zahlendubletten im Array

    in Microsoft Excel Hilfe
    Zahlendubletten im Array: Guten Morgen liebe Community, anbei ein vereinfachtes Beispiel der Problematik, da das Original mehrere LAMBDA-Funktionen und Tabellen mit einbezieht. Ich benötige die Lösung, um eine weitere...
  5. Array aus Excel Tabelle einlesen Word VBA

    in Microsoft Excel Hilfe
    Array aus Excel Tabelle einlesen Word VBA: Hallo, ich benötige in einer Word Datei die Werte einer Excel Datei. Ich würde gerne eine Spalte als Array einlesen. Wie das Array ein lesen in Excel geht weiß ich, aber wie schaffe ich den...
  6. Summenteilergebnis eines Arrays als Array darstellen

    in Microsoft Excel Hilfe
    Summenteilergebnis eines Arrays als Array darstellen: Hallo Community, Summenteilergebnis eines Arrays als Array darstellen. An dieser Stelle stecke ich fest. Ich habe eine Testmappe erstellt, die die Problematik versucht darzustellen. Bevor jemand...
  7. Formel bei Veränderung von dynamischem Array "mitziehen"?

    in Microsoft Excel Hilfe
    Formel bei Veränderung von dynamischem Array "mitziehen"?: Hallo liebes Forum, ich komme bei folgendem Problem nicht weiter und habe mir hier etwas Hilfe erhofft: Ich habe eine Tabelle mit Feedbacks zu Lehrgängen/Kursen. Diese will ich nach Dozent erst...
  8. Array-Funktion mit VBA in Zelle schreiben

    in Microsoft Excel Hilfe
    Array-Funktion mit VBA in Zelle schreiben: Hallo zusammen, ich bin begeisterter Nutzer der neuen Array-Funktionen in Excel 365. Ich möchte mit VBA so eine Funktion in eine Zelle schreiben. Bei "normalen" Formeln habe ich das immer so...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden