Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

2-dim. ArrayVariable mit genau einem Wert

2-dim. ArrayVariable mit genau einem Wert
20.07.2007 21:07:00
Daniel
Hallo
folgendes Problem:
ich habe verschiedene Listen, in denen ich jeden Wert mit einem Makro bearbeiten muß.
diese Listen können unterschiedlich groß sein, von 1 bis c.a. 20.000 Einträgen
um die geschwindigkeit zu verbessern, lade ich die Werte in eine 2-dimensionale Array-Variable, um sie dann dort zu berarbein, dh. im Prinzip so:

sub Tabelle_bearbeiten()
dim arrArray
dim i as long
'--- Einlesen
arrArray = Cells(1,1).currentregion
'--- Berechnen
for i = 1 to Ubound(arrArray,1)
arrArray(i, 1) = .....'hier folgt dann eine etwas komplexere Berechnung
next
'--- Zurückschreiben
cells(1,1).resize(Ubound(arrArray,1), Ubound(arrArray,2)) = arrArray


End sub
funktioniert soweit auch sehr gut mit einer ausname:
wenn die Tabelle aus genau einer Zelle besteht (was auch vorkommt), wird bei
arrArray = Cells(1,1).currentregion natürlich kein 2-Dimensionals Array-Feld erzeugt, sondern nur eine einfache Variable mit dem Zellwert.
Problem dabei ist, das dann die UBOUND-Funktion nicht einen Fehler erzeugt, weil ja kein Array vorliegt.


Jetzt die Frage, wie kann man erreichen, daß auch bei genau einer Zelle in der Tabelle ein 2-dimensionales Array-Feld erzeugt wird, aber halt nur mit einem Wert (sozusagen ein 1x1-Feld), damit der restliche Teil des Makros wieder funktioniert?


momentan habe ich noch eine IF-Abfrage drin, mit der ich diesen Fall abprüfe, was aber zur Folge hat, daß ich die Programmteile BEARBEITEN und ZURÜCKSCHREIBEN doppelt programmieren muß (einmal für Array und einemal für normale Variable, das möchte halt vermeiden)
Gruß und schönes Wochenende, Daniel

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2-dim. ArrayVariable mit genau einem Wert
20.07.2007 21:19:00
Matthias
Hallo Daniel,
versuch mal:

'--- Einlesen
arrArray = Union(Cells(1, 1).CurrentRegion, Range("A1:B1"))


dann nimmt er mindestens den Bereich A1:B1.
Gruß Matthias

AW: 2-dim. ArrayVariable mit genau einem Wert
20.07.2007 22:37:41
Daniel
Hi
jep, funktioniert gut (interessanter weise wird das Leerfeld ignoriert, sobald in der 1. Spalte mehr als ein Wert steht, d.h. das Array bleibt 1-spaltig, nur wenn in spalte A genau 1 Wert steht. wirds ein 1x2-Feld.
Allerdings würde es mich trotzdem interssieren, ob nicht doch eine Methode gibt, ein 1x1-Feld zu erzeugen, deswegen mach ich die Frage nochmal auf.
Ich könnte mir nämlich noch eine Anwendung vorstellen, in der der zu übernehmende Zellbereich nicht über .Currentregion, sondern über berechnete Zeilen- und Spalten-Nummern als Ausschnitt aus einer größeren Tabelle definiert wird.
Oder eine andere Anwendung in der nicht nur eine spalte, sondern alle Zellen des Zellbereichs überarbeitet werden.
In diesen Fällen wäre die von dir vorgeschlagene "Zwangserweiterung" auf mindesten 2 Zellen nicht zulässig.
Gruß, Daniel

Anzeige
AW: 2-dim. ArrayVariable mit genau einem Wert
20.07.2007 22:47:00
Matthias
Hallo Daniel,
dann vielleicht so:

Sub test()
Dim rng As Range
Dim arr()
Set rng = Cells(1, 1).CurrentRegion
ReDim arr(1 To rng.Rows.Count, 1 To rng.Columns.Count)
Debug.Print UBound(arr, 1) & "x" & UBound(arr, 2)
End Sub


Gruß Matthias

AW: 2-dim. ArrayVariable mit genau einem Wert
20.07.2007 23:26:00
Daniel
Hi
nein, leider auch nicht.
die Wertzuweisung "arr = rng" (die du im Makro vergessen hast) funktioniert auch in diesem Fall nur dann, wenn rng mindestens 2 Zellen groß ist.
wenn rng nur eine Zelle umfasst, kommt die Fehlermeldung "Typ unverträglich"
arr wird zwar korrekt als 1x1-Feld definiert, aber bei der Wertzuweisung versucht Excel dann doch wieder, ne einfache Variable daraus zu machen.
Und bei dieser Variante kommt dann schon bei der Zuweisung der Fehler, weil arr ja schon als Feld dimensioniert ist.
Gruß, Daniel

Anzeige
AW: 2-dim. ArrayVariable mit genau einem Wert
21.07.2007 10:17:00
Renee
Mazwara Daniel,
Ich kann hier leider keine Lösung sehen, aber es kommt mir so vor, als ob Du eine Gerade mit nur einem Punkt beschreiben willst.
Renee

AW: 2-dim. ArrayVariable mit genau einem Wert
23.07.2007 21:00:00
Daniel
Nicht ganz, ich brauche ein Schachbrett mit nur einem Feld, daß ich trotzdem über die Koordinaten ansprechen kann.
Gruß, Daniel

AW: 2-dim. ArrayVariable mit genau einem Wert
21.07.2007 10:20:00
Nepumuk
Hallo Daniel,
machs doch einfach so:
Public Sub test()
    Dim vntArray As Variant
    Dim lngRow As Long
    Dim objRange As Range
    Set objRange = Cells(1, 1).CurrentRegion
    vntArray = objRange.Value
    If IsArray(vntArray) Then
        For lngRow = 1 To UBound(vntArray, 1)
            vntArray(lngRow, 1) = Berechnung(vntArray(lngRow, 1))
        Next
    Else
        vntArray = Berechnung(vntArray)
    End If
    objRange.Value = vntArray
End Sub

Public Function Berechnung(vntValue As Variant)
    Berechnung = vntValue * 3
End Function

Gruß
Nepumuk

Anzeige
AW: 2-dim. ArrayVariable mit genau einem Wert
23.07.2007 21:05:25
Daniel
Hi
danke für den Tip, aber so mache ich es ja schon.
ich wollte halt wissen, ob man die If-Abfrage vermeiden und VBA dazu überreden kann, auch bei nur einer Zelle eine 2-dimensionale Array-Variable (mit der Größe 1x1) anzulegen
Gruß, Daniel

AW: 2-dim. ArrayVariable mit genau einem Wert
23.07.2007 23:49:00
Nepumuk
Hallo Daniel,
nicht freiwillig. Aber mit ein paar Zeilen Code könnte ich es dazu überreden. Ist aber sicher mehr Aufwand wie mein 1. Vorschlag und benötigt natürlich die selbe Abfrage.
Gruß
Nepumuk

AW: 2-dim. ArrayVariable mit genau einem Wert
23.07.2007 23:54:47
Daniel
Hi
dann bringts es natürlich nichts
Gruß, Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige