Array aus Bereich in Excel VBA
Nun, ich habe schon zu kämpfen mit dem bisschen code und kann nicht scheinen zu bekommen, um es ...
Ich versuche, ein array aus einem Bereich von Zellen, die array-jedoch zeigt sich bis zu 1 element breit.
Nun, hier ist der code:
Dim item As Variant
MsgBox Range("D19:H19").Count
item = Range("D19:H19").Value
MsgBox LBound(item) & " " & UBound(item)
gemäß meinem Verständnis Element enthalten sollte, die ein 2D-array... aber ich bin immer zu folgendem Ergebnis
1. MsgBox Drucke 5
2. MsgBox Drucke 1 1
Was mache ich falsch?
- Ich bin kein vba-Experte, aber der Wert einer Reihe (oder ein array) scheint merkwürdig zu sein. Ist es die Rückkehr der erste Wert der Reihe?
- In der Regel VBA zurückgeben würde ein 2D-array mit Zeilen-Werte der 1. dimension und die Werte in der Spalte die 2. dimension , aber hier Suche ich eine Strecke, die hat 5 Zellen alle in einer Zeile, also ich bin mir nicht ganz sicher, ob es ein 1d oder 2d array wird zurückgegeben...
- und ja, seine Rückkehr wird nur der erste Wert der Reihe... irgendwelche Ideen, warum es ist, das zu tun?!
- Es eigentlich nicht geben den ersten Wert des Bereichs. Wählen Sie eine 2D-Bereich von Zellen, und drücken Sie
Tab
mehrmals. Sie werden sehen, eine gewählte Zelle wird markiert. Das ist die ZelleValue
gibt den Inhalt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist in der LBound-und UBound -
jtolle war korrekt über die LBound-und UBound.
Jedoch, Element darf nicht gedimmt werden, da ein array (ein Fehler).
Ich denke, das ist, was Sie wollen
Ihrem Element sollte enthalten eine 2-D-array als erwartet. Wenn Sie kleben Sie einen Haltepunkt im code und schau auf die kleinen "Locals" - Fenster im VBA-editor, Sie sollten sehen, dass. Ihre Anrufe LBound und UBound sind immer die Grenzen in der ersten dimension. Wenn Sie anrufen Lbound(Element,2) und UBound(Element,2), Sie sollten get 1 und 5, als Sie erwarten.
BEARBEITEN:
Das heißt, sobald du das gemacht hast Zuordnung, Element Aussehen würde, wie etwas, das Sie haben könnte, erklärt:
Dim Element(1 1, 1 5)
Einer der Dämonen der VBA-Programmierung ist, dass arrays können beliebige untere Schranken. Also all Ihr code muss sich dessen bewusst zu sein.
Richtig, wie Sie ist. Auch wenn Sie wählen Sie eine Reihe von Zellen, haben Sie immer noch die option zur Auswahl einer Zelle aus dem array (und Schritt z.B. mit tab durch die Elemente dieses Arrays)
bekommt man nur die Inhalte der aktuell single-die ausgewählte Zelle ein.
wenn Sie möchten, dass die Aufzählung der array, können Sie rufen Sie die
.Cells()
-Methode derRange
-ObjektUnter der Annahme, dass D19 bis H19 enthalten "a" durch "e" bzw. den Aufruf
zurück
"b"
. Beachten Sie, dass dies ist ein eins-basiertes array und kann 2-dimensional.Cells()
dauert höchstens 2 Parameter angeben, die inneren offset von der Auswahl die Herkunft.hoffe, dass klärt... Grüße
lbound
nimmt einen zweiten parameter, der ausdrückt, als das, was wir nennen dimension. Ich bin mir nicht mehr sicher, welche parameter entspricht dem Wert. Was bedeutetVarType(Range("D19:H19").Value)
zurück? Es solltevbArray
... Du könntest versuchenUbound(item,1)
stattUbound(1)
item()
stattitem
Versuchen Sie dies:
wenn Sie wollen ein 1D-array, nehmen Sie es für eine IN-Klausel, zum Beispiel, sollten Sie transponieren Sie Ihre Auswahl.
Ich habe festgestellt, Sie zu transponieren, die zweimal für eine Zeile, sobald für eine Spalte mit Daten wie diesen:
lohnt sich ein spielen.