5.2k Aufrufe
Gefragt in Tabellenkalkulation von
Guten Abend,

ich suche nun schon seit vielen Tagen im www aber zufriedenstellende Lösungen habe ich bisher nicht entdecken können.


Was möchte ich?
Ich will in Abhängigkeit von einem Zellwert nebenstehend ein Bild anzeigen lassen.

Warum? (Projektbeschreibung; abstrakt)
Es gibt 100 Dinge, mit zugehörigen Bildern, die in Abhängigkeit von Zeit(Datum) oder anderen Faktoren gefunden werden können
Ob Zeit und/oder Faktor für Ding1; Ding2;...;Ding100 zutreffen, prüfe ich per Tabellen und Formeln an deren Ende ich mir die Position der Grafik im Quellbereich ausgeben lasse
Ich habe einen "Kalender" erstellt mit einem Zeitraum von 14 (anfangs 31) Tage ab einem vom Benutzer festzulegenden Datum
Jeden Tag soll ausgegeben werden, welches Ding gefunden werden kann. Hierfür habe ich 25 Positionen bereitgestellt (anfangs 40), denn es können auch mehrere Dinge an einem Tag gefunden werden.
Neben jeder Position finden sich die berechneten Werte für den Bezug zur Grafik aus dem Quellbereich, in dem sich die 100 Grafiken befinden

Was ist mein Problem?
Ich habe nicht nur 1 oder 3 Bilder, sondern versuchte zunächst 1.371 verknüpfte Grafiken (31 Tage á 40 Positionen + weiteres) einblenden zu lassen, später reduzierte ich die Anzahl auf 464.
In beiden Fällen ist Excel nach dem Einbau der verknüpften Grafiken sehr langsam und sämtliche Aktionen (Eingabe von Daten, kopieren, entf, etc.) dauern mindestens 5sek.
Wenn ich einfach nur so z.B. 1000 Grafiken eingefügt hatte, blieb Excel trotzdem flott. Sind also verknüpfte Grafiken kritisch?


Was habe ich bisher versucht?
Ich erstellte verknüpfte Grafiken (Quellgrafiken sind in Arbeitsmappe enthalten) und habe sie benannt in der Bearbeitungsleiste. Die Namen habe ich zuvor im Namensmanager definiert.
Im 1. Versuch hatte ich für jede anzuzeigende Grafik die Formel =indirekt("'Tabellenname'!" & Zellwert 1 & Zellwert 2) angewandt
Zellwert 1 => per Formel habe ich mir die Buchstaben ausgeben lassen
Zellwert 2 => per Formel ließ ich mir Zahlen ausgeben

Da ich es nicht hinbekommen habe, relative Bezüge im Namensmanager zu erstellen (ist das möglich?) musste ich also für jede anzuzeigende Grafik (also jeden Namen) die Zelle(n) definieren, aus der sie sich die Werte auslesen sollten, um dann per "=indirekt" auf den Quellbezug zuzugreifen und die entsprechende Grafik auszugeben. 1.371 definierte Namen! (oO)
Hat ja auch prima geklappt, nur leider war Excel dann sehr langsam.
Selbiges bei Reduzierung der anzuzeigenden Grafiken auf 464 Stück.

Ich habe die automatische Berechnung auf manuell gestellt. Das brachte leider keine Veränderung der Geschwindigkeit.
Verändert hat sich die Geschwindigkeit, als ich sämtlich definierte Namen im Namensmanager gelöscht hatte. Doch nun funktionierte logischerweise die dynamische Anzeige der Grafiken nicht mehr.

Ich hatte mich etwas umgelesen und stieß auf den Begriff "volatile Funktionen". aHA! Lag also hier der Fehler?
Ich ersetzte zunächst, wenn möglich, jede volatile Formel durch eine andere Möglichkeit und erstellte nochmals 464 definierte Namen mit der Formel: =Index(Quellbereich; Zellwert 1; Zellwert 2)
Ergebnis: Excel war wieder langsam (-.-)


Frage:
Gibt es eine Möglichkeit, für 450 Positionen Grafiken in Abhängigkeit von ihnen nebenstehenden Zellen so anzeigen zu lassen, dass Excel trotzdem "handlungsfähig" bleibt?

Die Art der Formel per Namensmanager scheint es ja nicht zu sein, da zwischen "=indirekt" und "=index" kein Unterschied festzustellen war.
Kann ich eventuell einen Namen so definieren, dass er sich nicht absolut auf eine Zelle bezieht, sondern relativ zu seiner Zellposition?

Ließe sich da was per VBA machen?
Ich muss hierzu gestehen, dass ich davon leider keine Ahnung habe, gern aber bereit bin, mich da ein wenig reinzufuchsen.

Wäre es sonst auch noch eine Möglichkeit, sich die 450 Grafikpositionen nicht aus der Arbeitsmappe auslesen zu lassen, sondern bei den Zellwerten einen Dateipfad "berechnen" zu lassen und dann entsprechend des Pfades die Grafik immer automatisch einzubinden? Es muss sich allerdings aktualisieren, wenn man das Anfangsdatum des Kalender ändert!


Ich hoffe, das bis hier hin der Faden nicht verloren wurde und ihr mir Denkanstöße oder direkte Lösungen geben könnt.
Unter Umständen ist es ja auch gar nicht machbar für Excel! :o)

33 Antworten

0 Punkte
Beantwortet von
Frage:
Gibt es eine Möglichkeit, für 450 Positionen Grafiken in Abhängigkeit von ihnen nebenstehenden Zellen so anzeigen zu lassen, dass Excel trotzdem "handlungsfähig" bleibt?

Ich wage mal hier ein Nein! - Excel ist in erster Linie ein Kalkulations- und kein Grafikanzeigepropgramm. Das Anzeigen sehr vieler Bilder, bringt Excel immer wieder an seine Grenzen, da es hierfür wertvolle Ressourcen verwenden muss, die für die Berechnung nötig wären. Dabei kommt es natürlich immer auch auf dein System, sowie die Größe der Bilddateien an. Du musst dir vorstellen, wie lange du brauchst, um die 450 Bilder auf einen Schlag zu öffnen. Und so wie du das beschreibst sind auch deine anderen Wege (die Verwendung der Formel Indirekt, die Text in einen verarbeitbaren Bezug umwandeln muss sowie die Verwendung des Namensmanagers, der Namen wieder in Bezüge umwandeln muss usw. bereits zeitintensiv.) Worum handelt es sich denn bei den Grafiken? Sind es große Bilder oder nur kleine Pics? Müssen es wirklich 450 Grafiken sein und wie sind die in deiner Arbeitsmappe verteilt? Hast du für jeden Tag ein Tabellenblatt oder alles auf nur einem Sheet? Vielleicht kannst du ja mal eine Datei mit Beispieldaten bei einem Hoster deiner Wahl hochladen. z.B. hier Dann ließe sich das vielleicht etwas besser verstehen und evtl doch irgendwie umsetzen. Aber richtig große Hoffnung mache ich mir da nicht.

Gruß Mr. K.
0 Punkte
Beantwortet von
Danke für eine vorläufige Einschätzung der Möglichkeiten.

Da um eine Datei gebeten wurde: Projektdatei (5,02mb)
Falls diese unzumutbar langsam ist, um dort effektiv etwas nachsehen zu können, hier noch eine abgespecktere Projektdatei (4,82mb) in der sich statt 25 Positionen (und verknüpften Grafiken und entsprechend definierten Namen) je Tag nur noch 10 derer befinden.

Kurze Erläuterung

Tabellenblatt "Spielerdaten"
Hier trägt der Benutzer seine Faktoren ein. Zum Testen von Veränderungen genügt hier allerdings die Eingabe von höheren Habitatsstufen (max. 20). und evtl. die Notiz "ja" bei "Gefunden?"

Tabellenblatt "Kalender"
Hier erfolgt die Anzeige der "Dinge" in einem Kalender (mit zudem bedingten Formatierungen) in Abhängigkeit vom Benutzer festgesetzten Datum beim 1. Kalendertag.

Dinge, die gefunden werden können an Tag x, werden grau dargestellt. Dinge, die aktuell "heute"&"jetzt" gefunden werden können, werden bunt dargestellt.
Positionen, die kein Ding anzeigen, weil es mehr Positionen als möglich zu findende Dinge gibt, werden entsprechend der Farbe des Kalendertages (nicht heute = grau; heute/Tag = gelb; heute/nacht = dunkelblau) dargestellt.

Die weiteren möglichen Eingabefelder brauchen nicht verwandt zu werden. Dies dient nur der Abfrage weiterer Faktoren. Kann aber, wenn dies nicht all zu unverständlich ist.

Tabellenblatt "Pets & Weiteres"
Hier befindet sich in O201:S279 der Quellbereich der Grafiken und werden von Spalte AM bis YC sämtliche Bedingungen für die einzelnen Tage des Kalenders (vor)geprüft, an deren Ende die Bezugsdaten für die Grafiken im Kalender ausgegeben werden.
A1:E200 enthält eine Tabelle mit Informationen über die Dinge und Faktoren, die in den Berechnungstabellen verwandt/ausgelesen werden

Tabellenblatt "Images"
Kleinere Nebenberechnungen für bestimmte Daten/Zeit/Faktoren
& die Grafiken+Berechnungen für die Anzeige, ob ein Kalendertag die Bedingung "Nacht" oder "Tag" aufweist.

#####################
Macht es unter Umständen Sinn, die Berechnungstabellen (aus "Pets & Weiteres)" nicht so weit nach rechts wandern zu lassen, sondern besser untereinander zu platzieren bzw. noch weitere Möglichkeiten zu suchen, die Berechnungen zu vereinfachen?

Fernerhin bin ich grade dabei zu versuchen, mir die Grafiken als verknüpfte Dateien anzeigen zu lassen.
Jede Position im Kalender liest sich einfach den entsprechend per Berechnung ausgegebenen Bildpfad aus.
Das würde die insgesamte Anzahl an Grafiken in der Datei verringern und zudem benötige ich dann nicht mehr "verknüpfte Grafik", welches ja nur mehr ein Screenshot einer bestimmten Zelle ist und das wiederum könnte den Einsatz des Namensmanager redundant machen.
Jetzt muss ich nur noch wissen, wie ich die Bildanzeige über VBA per "Zeig-Bild-entsprechend-Pfad-aus-Zelle-X" implementieren kann UND das ganze auch für externe Benutzer realisiere, indem ich Bildordner und Exceldatei als Zip/Rar/whatever verschicke.

An dieser Stelle vorab schon einmal ein dickes Danke für jegliche Bemühungen, die unternommen werden, mir irgendwie behilflich sein zu können. Es ist keine Selbstverständlichkeit! :o)
0 Punkte
Beantwortet von
Verdammt.. ich habe die falschen Dateien verwendet.
Sie enthalten noch die volatilen Funktionen (-.-)
Ich stelle gleich die umgeänderten Dateien rein!
0 Punkte
Beantwortet von
Au weia..
Ich habe die Datei mit den ersetzten volatilen Funktionen noch nicht so weit umgeändert, dass die verknüpften Grafiken im Kalender bereits die korrekten Namensbezüge haben und die bedingte Formatierung fehlt dort auch..
Das werde ich nicht innerhalb von 5min zur Verfügung stellen können. Sobald ich sie habe, sofern sie denn auch noch benötigt werden, stelle ich sie rein!

P.S. gibt es Editierfunktionen? Nicht dass hier meine Doppel- und Dreifachpostings ein Problem darstellen (oO)
0 Punkte
Beantwortet von
So, nun habe ich die zwei Dateien, wo die volatilen Funktionen mehr oder weniger draußen sind.
Projektdatei (7,08mb)
Projektdatei_weniger Grafiken (6,23mb)
Einmal vollständig (fast, die Grafiken im Tabellenblatt "Spielerdaten" sind nicht verknüpft aber das ist unerheblich) und einmal eine "schmalere" Version, die statt 25 nur noch 10 verknüpfte Grafiken je Tag aufweist. Das macht sie etwas flotter..

Was welches Tabellenblatt macht, steht in meinem 2. Beitrag in diesem Thread, wo ich schon einmal Dateien hochgeladen habe (deren Links nun aber tot sein sollten)
0 Punkte
Beantwortet von
Hello again,

mach dir keine Sorgen, ich hab eh tagsüber keine Zeit, mich hier
reinzuvertiefen. Man muss ja nebenbei auch noch seine Brötchen
verdienen.

So langsam, fange ich aber an zu verstehen was du hier gebaut
hast. Auch ohne den Zugriff auf deine Dateien, die du ja wieder
gelöscht hast, bevor ich einen Blick reinwerfen konnte. Diese
Funktion von Excel kannte ich bislang noch nicht. Klappt sogar mit
meinem alten Excel 2000 - Freu!

Verändert hat sich die Geschwindigkeit, als ich sämtlich
definierte Namen im Namensmanager gelöscht hatte. Doch nun
funktionierte logischerweise die dynamische Anzeige der Grafiken
nicht mehr.

Ich könnte mir vorstellen, dass es vielleicht eine Möglichkeit gibt,
wenn man die Namensdefinitionen weglässt und erstmal versucht
einen Code einzufügen, der der Formula-Eigenschaft des
auszugebenden Picture Objekts den Wert der Zelle zuweist, in der
dein Bezug zusammengebaut wird. Wo genau du das Machst weiß
ich grad nicht. Deine Beschreibung ist zwar gut, aber es ist trotzdem
schwierig festzustellen, wo welcher Wert steht, um den Code
entsprechend anbieten zu können.

In etwa könnte das Ganze dann so aussehen:

- in Tabelle2 Zelle A1 liegt das wiederzugebende Bild. Die Zelle
sollte genausogroß wie das Bild (oder das Bild so klein wie die
Zelle) sein.
- In Tabelle2 Zelle B1 liegt ein anderes Bild
- Das wiederzugebende Bild wird nur aktualisiert wenn in Tabelle1
in den Zellen C1:E20 eine Eingabe erfolgt.
- In Zelle A1 wird der Bezug zusammengebaut, abhängig von der
Eingabe in den Spalten C und D zusammengebaut z.B. mit der
Formel =C1&"!"&D1 wobei in C1 der Wert Tabelle2 und in D1 der
Wert A1 steht.
- Im VBA-Modul des Tabellenblatts, in dem die Eingabe erfolgt, (hier
Tabelle1) stünde dann ein Code wie:
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
If Not Intersect(Target, Range("C1:E20")) Is Nothing Then
ActiveSheet.Pictures("Bild 1").Formula = Range("A1").Value
End If
End Sub
- Wird nun in D1 der Wert B1 eingegeben wechselt
das Bild.

Um das aber an deine Verhältnisse anpassen zu können, ist eine
Beispieldatei (10 Bilder reichen vorerst, egal ob mit oder ohne
Volatile Funktion) notwendig. Sonst würde die Länge der
Beschreibung hier ausufern. Die Möglichkeiten sind einfach zu
vielfältig.

Ob das aber bei 450 Bildern immer noch klappt kann ich dir nicht
hundertprozentig versprechen. Zwar ist Volatile hiermit umgangen,
aber es kann, abhängig von deinem Arbeitsspeicher, dennoch sein,
dass die Bilder ab einer gewissen Menge nicht mehr richtig
dargestellt werden und Excel schlimmstenfalls sogar abstürzt.
Kannst du halt nur ausprobieren.

Fernerhin bin ich grade dabei zu versuchen, mir die Grafiken
als verknüpfte Dateien anzeigen zu lassen.
Jede Position im Kalender liest sich einfach den entsprechend per
Berechnung ausgegebenen Bildpfad aus.
Das würde die insgesamte Anzahl an Grafiken in der Datei
verringern und zudem benötige ich dann nicht mehr "verknüpfte
Grafik", welches ja nur mehr ein Screenshot einer bestimmten Zelle
ist und das wiederum könnte den Einsatz des Namensmanager
redundant machen.
Dazu hab ich auch schon ein paar Ideen,
kann ich dir aber erst morgen sagen, falls Möglichkeit 1 fehlschlägt.
Jetzt muss ich erstmal in die Heia, sonst komm ich morgen zu spät
zur Arbeit.

Ach ja: Eine Editierfunktion würde ich mir auch wünschen. Hoffen wir
mal, dass die bald umgesetzt wird. Das würde Vieles erleichtern

Gruß Mr. K.
0 Punkte
Beantwortet von
Mist, jetzt hab ich solange an meinen Tests rumgebastelt, dass ich
ganz vergessen hab, hier nochmal auf aktualisieren zu drücken. Sonst
hätte ich schon vorhin einen Blick in deine Datei werfen können. Ich
hoffe wenn ich mich morgen Abend dazu melde, ist es auch noch OK.
Bis dahin hab ich dir ja schon mal eine Idee gegeben, wie man das
lösten könnte.
0 Punkte
Beantwortet von
Gähn,

Eigentlich müsste ich längst in der Kiste sein. Aber ich kam einfach
nicht umhin, doch schon mal einen Blick hier rein zu werfen. Und ich
dachte einfach nur "Ach du Sch...". Hast du das etwa wirklich Alles
manuell aufgebaut? Wie lange sitzt du da schon dran? Die
Rückverfolgung der Formeln ist ja ne wahre Schnitzeljagd. Ich
versteh einfach nicht, was du ein und was du ausgeben willst. Ok,
du willst anzeigen, welche Tierchen bereits gefunden wurden,
soweit klar. Da du aber deren Namensbezüge gelöscht hast, ist hier
ein Missing Link, der es mir schwer macht, das zu verstehen, oder
es liegt an der Uhrzeit. Mein xlsx-Viewer bekommt auch lauter
Formelfehler, da bei mir nach Spalte IV Schluss ist. Wenn dun
natürlich für jeden Tag deines Kalenders so viele Spalten hast, und
das Alles verformelt hast, kann ich mir eine langsame Berechnung
(auch ohne Bildmotive) durchaus vorstellen. Bei den paar kleinen
Pics kann es einfach nicht nur am Volatile liegen.

Sorry, aber ich bin erst mal raus aus dem Thema. Vielleicht findet
jemand Anders hier die Zeit, das System hinter der Matrix zu suchen
und zu verstehen. Mal sehen ob ich am Wochenende besser
denken kann. Versprechen kann ich aber nix.

Ich kann dir nur dringend raten, dich mit VBA zu beschäftigen. Damit
hättest du dir beim Aufbau viel Zeit sparen können, und
benutzerfreundlicher wäre das Ergebnis dann auch noch.

Tut mir leid. Ich lass ungern Leute hängen. Aber hier geht's einfach
nicht anders.
Mr. K.
0 Punkte
Beantwortet von
Hallo Mr. K (ich hoffe, du blickst nochmal in diesen Thread)

Zunächst einmal VIELEN DANK für deine Mühen, inwieweit sich mich einer Lösung auch näher gebracht haben sollten.

Ja, VBA hätte mir sicher 'ne Menge händischer Arbeit abnehmen können. Da ich aber noch nie mit VBA gearbeitet habe, bin ich den aufwendigen Weg gegangen. Zeit? Sicher schon 120 und mehr Stunden..

Ich werde mich jetzt noch einmal an die Datei ransetzen. Zum einen, die Berechnungstabellen nach möglichkeit unereinander anordnen (auf jeden Fall so, dass keine Spalte über IV hinaus angesprochen wird), zum anderen mich dann deinem Lösungsvorschlag mit dem Code zu widmen. Vielleicht fällt ja bei mir der Groschen :oD

Ich werde dann diese umgänderte Datei noch mit Namensbezügen für die Grafiken auf Blatt "Spielerdaten" versehen, damit dir ein möglicher Formelweg erkennbar wird und dann wieder 2 Dateivarianten zur Verfügung stellen.
a)vollständig
b)lediglich 2 Kalendertage mit 10 anzuzeigenden Objekten je Tag &
20 anzuzeigenden Objekten in Blatt "Spielerdaten"

Wenn es dir bei der Nachverfolgung hilfreich ist:
Bei den großen Berechnungstabellen in Blatt "Pets & Weiteres" sind nur die Zellen mit Umrahmung mit einer Formel versehen. Der Rest sind bloße Werte, die für die Ausgabeformeln am Ende jeder Berechnungstabelle angewandt werden.

Aufgrund von bedingter Formatierung "verschwinden" Werte in Hilfszellen (Schriftfarbe identisch mit Zellenhintergrundfarbe). Einfach sämtliche bedingte Formatierungen rauslöschen..

Frage:
nützt es dir, wenn ich hier versuche, die Bezüge zu erläutern? Ich könnte mir vorstellen, dass das eventuell sehr viel zu lesen wäre (auch wenn ich nur 1 Beispiel erkläre) und vielleicht kein besseres Verständnis herstellt, weil in Textform. Du müsstest ja immer hin und her switchen..

Sobald ich 'n Schritt weiter bin, melde ich mich wieder :o)
0 Punkte
Beantwortet von
So, da bin ich wieder :oD

Hier die wie folgt veränderten Dateien:
- Namensbezüge für die "100 Dinge" definiert
- Namensbezüge in Grafiken bei Tabellenblatt "Spielerdaten" eingefügt
- Berechnungstabellen in Blatt "Pets & Weiteres" untereinander angeordnet (ab Zeile A280)

Projektdatei 1.1.1 (6,01mb)
Projektdatei 1.1.1_schmale Version (5,92mb)

Projektdatei 1.1.1 ist mit allen Namensbezügen und verknüpften Grafiken

Bei der schmalen Version sind alle Namensbezüge erhalten geblieben aber in Blatt "Spielerdaten" sind nur noch 20 von 100 verknüften Grafiken enthalten. In Blatt "Kalender" nur die verknüpften Grafiken für die ersten beiden Kalendertage (50 Stck statt 350).
Die Version läuft anständig flott...

Somit ist also klar, die verknüpften Grafiken müssen irgendwie ersetzt werden.


Zum einen werde ich es über den hier genannten Code versuchen zu realisieren (wenn ichs denn irgendwie kapiere).. zum anderen ist mir neben der Variante, sich einen Bildpfad ausgeben zu lassen und dann per VBA eine Grafik automatisch anzeigen zu lassen heute morgen eine weitere Idee ins Gehirn geschossen..

Kann ich die Namensbenennung eines Bildes variabel halten?
Derzeit hat eine verknüpfte Grafik ja den Befehl: "Zeige mir das, was Zelle XY abbildet. XY ist in der dir nebenstehenden Zelle definiert."
Das geschieht an 464 Stellen.

Nun war meine Überlegung, ob ich für eine Grafik nicht auch folgendes festlegen kann: "Sei Bildname XY. In dir nebenstehender Zelle ist XY definiert"
Ich habe 211 unterschiedliche Bilder, die angezeigt werden können.
[list][*]Die 100 Dinge in je grau & bunt
[*]Sonne, Mond, grau("nicht-Sonne-oder-Mond)
[*]5 verschieden bunte Fragezeichengrafiken
[*]3 Füllfarbengrafiken
[list][*]falls kein Ding aber Tag (gelb)
[*]falls kein Ding aber Nacht (dunkelblau)
[*]falls kein Ding und weder Tag/Nacht (grau)[/list][/list]
Könnte ich den Bildnamen variabel festlegen, könnte ich nochmals die benötigten verknüpften Grafiken um die Hälfte reduzieren..

aber eins nach dem anderen (^.^) Zunächst einmal die obigen Varianten testen. Wenns läuft, dann läufts, wenn nicht, weiter probieren.
...