Wie man Excel-VBA-code-äquivalent der INDIREKT-Funktion?
Ich habe viele verwendet die INDIREKTE Funktion in meiner Arbeitsmappe, und es ist zu performance-Problemen führen. Ich brauche, um Sie zu ersetzen mit etwas, das gibt mir die gleichen Ergebnisse. Alle INDIRECTS Neuberechnung jederzeit etwas geändert, so dass Sie die Arbeitsmappe lag.
Ich Frage mich, ob es eine Möglichkeit gibt, um code INDIREKT in VBA, ohne tatsächlich mit der INDIREKT-Funktion, und nehmen Sie die Volatilität der Funktion in den code.
=INDIRECT("'" & $AC$9 & "'!" & AC26)
Dies ist ein Beispiel. Ich brauche zu entfernen, INDIREKT aber die gleichen Ergebnisse für diese Zelle. Gibt es eine Möglichkeit dies in VBA?
man konnte immer setzen Sie die Berechnung auf manuell, dann wird er nur berechnen, wenn Sie es sagen.
Ja, das würde helfen, aber für diese Aufgabe, die ich eigentlich ersetzen indirekte
Ich denke, man müsste das code verwenden, um tatsächlich zu verändern, die Formeln basieren auf einer Zelle. Jede Formel, die version, einschließlich UDFs, würde flüchtig sein.
Gibt es andere Lösungen außer vba, dass jemand denken könnte?
Wenn alle Daten müssen live bleiben, beliebigen code gebunden werden müssen, um die worksheet-change-Ereignis-und/oder worksheet-calculate-Ereignis. Dies würde bedeuten, dass die würde der code jedes mal ausgeführt, wenn eine Zelle geändert und würde auch dazu führen, eine Verzögerung, vielleicht ein wenig schneller, aber möglicherweise auch mehr.
Ja, das würde helfen, aber für diese Aufgabe, die ich eigentlich ersetzen indirekte
Ich denke, man müsste das code verwenden, um tatsächlich zu verändern, die Formeln basieren auf einer Zelle. Jede Formel, die version, einschließlich UDFs, würde flüchtig sein.
Gibt es andere Lösungen außer vba, dass jemand denken könnte?
Wenn alle Daten müssen live bleiben, beliebigen code gebunden werden müssen, um die worksheet-change-Ereignis-und/oder worksheet-calculate-Ereignis. Dies würde bedeuten, dass die würde der code jedes mal ausgeführt, wenn eine Zelle geändert und würde auch dazu führen, eine Verzögerung, vielleicht ein wenig schneller, aber möglicherweise auch mehr.
InformationsquelleAutor Reeggiie | 2015-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, diese.
Legen Sie die folgenden Routinen in ein standard-code-Modul:
Ersetzen Sie die
INDIRECT
Funktionen in Ihren Formeln mitINDIRECTVBA
.Diese wird statisch sein. Wenn die Langsamkeit Ihrer Arbeitsmappe ist, weil Ihre INDIRECTs ständig bewerten, dann wird dies ein Ende zu setzen.
WICHTIG: alle Zellen, die eine Formel enthalten mit
INDIRECTVBA
werden statische. Jede Formel wird berechnet, wenn Sie es bestätigen, aber es wird nicht neu berechnen, wenn Präzedenzfälle zu ändern.Müssen Sie dann einen Weg, Sie zu zwingen neu zu berechnen und zu einem günstigen Zeitpunkt. Sie können tun, dass von der Multifunktionsleiste. Oder können Sie
FullCalc
.eine Frage - gibt es diese Berechnungen erfordern, um auf manuell gesetzt?
Nein, tut es nicht. Die UDF ist nicht-flüchtig, also alles andere wird automatisch berechnet (falls die Berechnung auf automatisch gesetzt ist), aber die Formeln unter Verwendung der UDF wird statisch sein.
Dank ExcelHero. Ich habe gerade aktualisiert mein Verständnis von volatile UDF ' s hier für jemand anderen interessiert, das gleiche zu tun.
Das ist besser: fastexcel.wordpress.com/2012/02/02/...
InformationsquelleAutor Excel Hero
War hinzufügen, wird dieser als Kommentar, aber meine Gedanken hab zu lange.
Was ist der Kontext des Problems, das Sie lösen möchten?
Ich nehme an, Sie verwenden eine Art der Validierung der Daten der drop-down-Menü in $AC$9 wählen Sie ein Blatt Namen und dann alle Ihre INDIREKTE Formeln stellen ein Spiegelbild von einem bestimmten Abschnitt der vom Benutzer angegebene Arbeitsblatt.
Wenn das der Fall ist, dann könnten Sie mit
INDEX
als alternative. Es ist so geschrieben, wie=INDEX(Range, RowNum, ColNum)
E. g. wenn du dies in H20:=INDEX(Sheet1!A:Z,ROW()+10,COLUMN()-5)
dann wäre es zu reflektieren, was in Blatt 1, Zelle C30 (H - 5 Spalten, 20 + 10 Zeilen). Natürlich Sie müssen nicht kompensiert sich nichts, wenn Sie nicht wollen, ich wollte nur zeigen, dass als option.Nun, der schwierigste Teil würde bleiben - Zuordnung/Aktualisierung der Blattname variabel. Dies könnte getan werden, mit einer UserForm statt der Eingabe eines Wertes in ein bestimmtes Eingabefeld. Zum Beispiel, Sie haben könnte, VBA bieten ein Eingabe-Feld/dropdown-Menü für den Benutzer zur Auswahl einer der verfügbaren Blattnamen, dann nehmen Sie diesen Eingang und verwenden Sie es in einem schnellen suchen und ersetzen von Unterricht - auf der Suche nach
"=INDEX(*!"
und den Austausch mit"=INDEX(" & InputVariable & "!"
Ich habe ein paar Annahmen über die dataset-und das, was du versuchst zu erreichen, so ist es vielleicht nicht die ideale Lösung, aber vielleicht etwas zum nachdenken.
InformationsquelleAutor CactusCake