Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte im Array aufsplitten

Werte im Array aufsplitten
05.02.2015 07:15:10
Enrico
Hallo zusammen,
gleich zu Beginn ich habe zwar schon einige Makro´s gebastelt aber mich noch nie mit dem Thema Arrays auseinander gesetzt bzw. auseinander setzen müssen.
Meine Frage scheint auch recht einfach zu sein aber ich habe bisher noch keinen Ansatz.
Ich fülle ein Array mit den Daten einer Spalte.
MyArray = Range("JL:JL")
Jeder Datensatz besteht aus 24 Zeichen.
Ich möchte nun jeden Datensatz auf acht "Spalten" zu je 3 Zeichen aufsplitten.
Wie macht man das am besten?
Vielen Dank

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte im Array aufsplitten
05.02.2015 07:55:12
daniel
Hi
Im Array so
Redim Preserve MyArray(1 to Ubound(myArray), 1 To 8)
For Z = 1 To Ubound(myArry)
For x = 8 to 1 Step -1
myArray(Z, x) = Mid(myArray(Z, 1),x * 3 - 2, 3)
Next x
Next Z
Kleiner Tipp noch:
Du solltest dem Array nicht die ganze Spalte zuweisen, sonder nur den benutzten Teil, sonst wird das Array zu gross.
MyArray = Intersect(Range("JL:JL"), ActiveSheet.Usedrange)

Wenn du die Werte direkt in der Tabelle aufteilen willst, verwende
Daten - Datentools - Text in Spalten
Gruß Daniel

Anzeige
Die ganze Spalte zu verwenden, ist natürlich ...
05.02.2015 14:35:04
Luc:-?
…kontraproduktiv, Enrico;
ansonsten kann man das auch mit der vbFkt Split bewerkstelligen:
Sub testArr()
Const ctElem As Long = 8, lgElem As Long = 3, adRelBer$ = "JL1:JL100"
Dim ix As Long, px As Long, axSpw$(), avSpw, xSpw As Variant, wf As WorksheetFunction
Set wf = WorksheetFunction
avSpw = wf.Transpose(Range(adRelBer))
If CBool(LBound(avSpw)) Then ReDim Preserve avSpw(UBound(avSpw) - LBound(avSpw))
For Each xSpw In avSpw
If Len(xSpw) > lgElem Then
px = lgElem
While px 
Gruß, Luc :-?
Besser informiert mit …

Anzeige
Deshalb biete ich auch nur selten solche ...
11.02.2015 12:49:18
Luc:-?
…InselLösungen an, allerdings sind die allemal pflege- und aktualisierungsfreundlicher als die deinen, Daniel… ;-]
Ansonsten wird dein Hinweis der Sache kaum gerecht…
Luc :-?

AW: Deshalb biete ich auch nur selten solche ...
11.02.2015 12:58:07
Daniel
warum ist jetzt deine Lösung keine Insellösung und meine ist eine?
allein schon den Zellbereich fest in der Funktion als Textstring zu verdraten und nicht dynamisch zu ermitteln ist doch schon eine unnötige festlegung, die bei jeder neuen Anwendung einen eingriff in den Makrocode erfordert, wenn nur ein paar neue Datenzeilen hinzukommen.
Gruß Daniel

Anzeige
Ich habe ja eben nicht behauptet, dass meine ...
11.02.2015 15:32:16
Luc:-?
…Lösung keine Insellösung wäre, Daniel,
wenn es nämlich nicht so wäre, stünde meine Urheberschaft darüber wie bei allen komplexeren Pgmm von mir, die universell oder zumindest nicht alltäglich sind.
Du bildesst zwar intelligenterweise die Schnittmenge mit dem UsedRange, um die Spaltenlänge einzugrenzen, notierst die relevante VglsSpaltenAdresse aber direkt im Pgm. Das erfordert erst recht einen Eingriff ins Pgm (und zwar in seine Tiefen!), falls sich die (zB durch Einfügen weiterer Spalten) mal ändert. Ich (und auch einige Andere hier) notiere(n) eine potenziell veränderliche Adresse stets in einer Konstanten am PgmAnfang oder, besser noch, unter einem definierten Namen der Mappe (bzw des Blattes).
Auch ist die Verwendung von UsedRange nicht ganz unproblematisch, was einerseits hier schon diskutierte technische und andererseits praxisbezogene Gründe hat. Wer entfernt schon immer einmal benutzte Spalten/Zeilen gänzlich, wenn er sie nicht mehr benötigt, oder löscht zumindest alle Inhalte! Mit [Entf]-Taste ist das ja bekanntlich nicht getan. Auch habe ich schon Blätter gesehen, auf denen Nebenrechnungen wahllos rund um die eigentliche Tabelle herum verstreut auftraten, teilweise sogar mit ÜbernahmeVerweis von der Tabelle aus!
Damit wäre wohl eine leicht aktualisierbare „FestVerdrahtung“ durchaus gerechtfertigt. :-]
Gruß, Luc :-?

Anzeige
AW: Ich habe ja eben nicht behauptet, dass meine ...
11.02.2015 16:05:28
Daniel
Hi
das mit dem Usedrange war ja nur nebenbei, um ein beispiel zu zeigen, wie man einfach eine Spalte in ein Array einlesen kann, ohne die ganze Spalte einlesen zu müssen und trotzdem sicher zu sein, alle Werte dieser Spalte zu erfassen.
Das war auch gar nicht bestandteil der eigentlichen lösung, die sich nur auf die Bearbeitung des Arrays bezog.
Tut von daher nichts zu Sache.
nichts desto trotz ist deine Lösung deutlich komplexer als meine (jetzt nur auf den Arrayteil bezogen)
wo liegen die Vorteile deiner Lösung, die diesen Mehraufwand rechtfertigen und die auch rechtfertigen, dass du eine Lösung gepostet hast, obwohl schon eine da war.
Gruß Daniel

Anzeige
Ich muss mich doch nicht für etwas ...
11.02.2015 19:30:23
Luc:-?
…rechtfertigen, was du ständig tust, Daniel;
außerdem ist meine Lösung alternativ und bei hinreichend großen Bereichen sollte sie auch schneller sein. Aber das war ja eher nicht mein Anliegen, sondern For Each
Luc :-?

AW:Ist sie aber nicht...
11.02.2015 20:12:14
Daniel
Deine Lösung braucht incl Einlesen und Zurückschreiben des Ergebnisses in die Zellen bei jeder Datenmenge etwa doppelt solange wie meine.
Ausserdem verarbeitet sie bei 24 Zeichen in der Zelle bei mir maximal c.a 35.000 Zeilen, ist der Bereich grösser, werden darüber hinaus keine Werte mehr ausgegeben.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige