Ich schrieb vor kurzem eine question um Hilfe zu fragen, wie die Anzahl der Vorkommen von jedem einzelnen Paar von Allergien in einer Bevölkerung zu zählen. Die Lösungen, die ich bekam, waren großartig, aber ich muss jetzt Kombinationen von 3+ Allergien betrachten, und alles mit Excel-Tabellen zu tun, wird ewig dauern.Large Array mit benutzerdefinierten Anzahl von Dimensionen
Ich entschied mich, ein VBA-Skript zu schreiben, um dies zu tun, das funktioniert gut für Paare. Es ist auch viel schneller, seit ich zurück gegangen bin und das Format der Quelldaten so geändert habe, dass die zu jedem ExceptionID gehörenden AllergenIDs in einer einzelnen kommagetrennten Zeichenkette gespeichert sind.
Ich bin jetzt auf der Suche nach einem 3D - oder höheren Array, und weil wir nicht wissen, wie viele Dimensionen wir (bis zu 10 oder 15) benötigen, würde ich lieber eine Reihe von vermeiden Case
oder verschachtelte If/Then
Anweisungen.
Meine Forschung aufgedreht this article, in dem ich entnehmen, daß, was ich frage praktisch unmöglich ist, aber ich wollte darüber OP Aussage bitten, dass
Ich dachte, es wäre möglich, wenn ich zu tun könnte die Redim-Anweisung zur Laufzeit als String konstruieren und den String ausführen, aber das scheint nicht möglich.
Ich hatte im Grunde die gleiche Idee. Der folgende Code erzeugt einen Typ-Mismatch-Fehler, aber gibt es keine Abweichung davon, die funktionieren könnte? Können wir keine anderen Funktionen (wie join
) innerhalb von ReDim
übergeben?
Sub testroutine()
Dim x As Integer, y As Integer 'just a counter
Dim PairCount() As String
Dim AllergenRef As Object 'Object to store a reference to each AllergenID using AllergenKey as key
Set AllergenRef = CreateObject("Scripting.Dictionary")
For x = 1 To 20
AllergenRef.Add x, (x * 10) + (2^x) 'dummy data for my dictionary
Next x
Dim N_tuple As Integer
N_tuple = 5 'this value would be provided by a user form at runtime
Dim ArrayDim() As String
ReDim ArrayDim(1 To N_tuple)
For x = 1 To N_tuple
ArrayDim(x) = "1 to " & AllergenRef.Count
Next x
ReDim PairCount(Join(ArrayDim, ",")) 'This is the line that throws an error
End Sub
This article macht es klingen wie das, was ich tue, ist möglich in Java, aber ich spreche kein Javaner, so kann ich nicht wirklich sagen, wie ähnlich sich dies ist, was ich zu erreichen versuchen, oder wenn es eine Möglichkeit, diese Methode zu VBA anzuwenden ...
======== UPDATE ============
Hier ist ein Beispiel der Daten I‘ m mit arbeiten (in separaten Spalten, fügte ich Striche für die Klarheit)
ExceptionID - ExcAllergens
035-100380
076 - 100107,100392,100345,100596,100141,100151,100344
200 - 100123,100200
325-100381
354 - 100381,10 355 - 100381,10 360 - 100.586
390 - 100151,100344,100345,100349
441 - 100380,100368
448 - 100021,100181,100345,100200,100344,100295
491-100381
499-100333
503-100333
507 - 100331,100346,100596,100345,100344,100269,100283
Und hier ein Auszug aus der allergen Definitionen Tabelle (allergen Key ist etwas, was ich so einfach hinzugefügt haben kleinere Zahlen, mit denen gearbeitet wird, sind die 6-stelligen Zahlen, die in unserer DB verwendet werden.
)AllergenKey - AllergenID - AllergenTag
01-100011 - Açai Berry
02-100012 - Essigsäure
03-100013 - Agar Agar
04-100014 - Agave
05-100015 - Alkohol
06-100016 - Piment
07-100017 - Ammoniumbicarbonat
08-100018 - Amylase
09-100019 - Annatto
10-100.020 - Apfel
11-100.021 - Apfel, Raw
12-100.022 - Aprikose
13-100.023 - Arrowroot
14-100.025 - Ascorbic Acid
15-100.027 - Asparagus
16-100.028 - Avocado
17-100029 - Bakterielle Kultur
18-100030 - Backpulver
Hinweis, dass es 6810 Ausnahme Profile bis hin fro m 1 bis 51 separate Allergien (durchschnittlich 4 oder 5) und 451 verschiedene Allergene. Hier ist das Ergebnis meiner Analyse von Allergen-Paaren (btw, wenn ich sage "Allergen" es enthält auch Ernährungsgewohnheiten wie vegetarisch):
Top 10 Paare - Paar Count - allergen 1 - allergen 2
1-245 - Dairy - Gluten
2-232 - Eier - Nüsse
3-190 - Dairy - Eier
4-173 - Gluten - Oats
5-146 - Soy (kann enthalten) - Soy
6-141 - Milchprodukte - Nüsse
7 - 136 - Rindfleisch - Schweinefleisch
8-120 - Molkerei - Soy
9-114 - Sesam (kann enthalten) - Nüsse
10-111 - Vegetarier 1 - Schweinefleisch
Sie können Dimensionen zu einem Array, das bereits de ist, nicht hinzufügen klärte. Also Array (10,10) kann nicht zum Array redimensioniert werden (10,10,10) – Sorceri
Nun, meine Arrays sind beide mit leeren Klammern deklariert, und sobald die Anzahl der Dimensionen vom Benutzer festgelegt wird, ändert sich nicht, Das ist also kein Problem – MikeG
Was Sie speziell fragen, funktioniert nicht in VBA. Ohne die Struktur der Daten zu kennen, die Sie analysieren möchten, ist es schwierig, alternative Methoden zu empfehlen, die für Sie funktionieren könnten. Eine 15-dimensionale Anordnung wäre sehr umständlich und in den meisten Fällen nicht notwendig. Im Allgemeinen ist ein 3-dimensionales Array das Meiste, das Sie benötigen würden. Zum Beispiel ist ein 1-dimensionales Array einfach eine Liste von Werten, ein 2-dimensionales Array ist eine Tabelle von Werten und ein 3-dimensionales Array ist mehrere Tabellen mit Werten. Gibt es einen bestimmten Grund, warum Sie mehr als ein 3-dimensionales Array benötigen? – tigeravatar