Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1708to1712
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

Achtung Anfänger: Kleines VBA If-Then dynam Array

Achtung Anfänger: Kleines VBA If-Then dynam Array
21.08.2019 11:34:12
F
Hallo zusammen,
ich habe mich vor einigen Tagen an das Thema VBA rangesetzt und kann die Beispiele, die ich mir bisher angeschaut habe, gut nachvollziehen. Aber beim ersten eigenen Makro hakt es leider ein wenig.
In der ganzen Spalte Z soll Excel nach den Begriff "Angebotspreis" suchen. Steht dieser Begriff in einer Zeile, soll der Wert in Spalte Q neu berechnet werden als Differenz aus den Spalten S - T. Konkret: steht in Z5 "Angebotspreis", soll Q5 als S5-T5 neu berechnet werden.
Leider erhalte ich bei meinen Makro die Ausgabe "Laufzeitfehler" und kann mir keinen Reim drauf machen, was Excel stört.
In meinen Makro taucht die Spalte AA auf, da ich diese immer gefüllt ist und keine leeren Zellen in dieser existieren. Somit wollte ich diese als "Hilfsspalte" zur Ermittlung der Arraygröße benutzen.
Sub WertderVorperiodekorrigieren()
Dim size As Integer
Dim i As Integer
Dim Wert_Vorperiode()
'Anzahl der Einträge in Spalte AA ermitteln und der Variablen size zuweisen
size = WorksheetFunction.CountA(Worksheets("Datenbank-WGM").Columns(27))
'Größe des Arrays festlegen
ReDim Wert_Vorperiode(size - 1)
'Wenn in Spalte Z "Angebotspreis" steht, so soll in Spalte Q der Wert neu berechnet werden
For i = 1 To size
If Cells(i, 26).Value = "Angebotspreis" Then
Wert_Vorperiode(i, 17) = (Cells(i, 19) - Cells(i, 20))
Else
Wert_Vorperiode(i, 17) = Cells(i, 17)
End If
Next i
End Sub

Ich hoffe ich habe nicht kompletten Mist ins Makro geschrieben und ihr könnt mir helfen :)
Beste grüße

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Kleines VBA If-Then dynam Array
21.08.2019 12:13:02
Bernd
Servus F,
für was ein Array bei dieser einfachen Berechnung? Einfacher geht`s ohne Array:

Sub test()
Dim i As Integer
Dim intLZ As Integer
With Sheets("Tabelle1")
intLZ = .Cells(Rows.Count, 19).End(xlUp).Row
For i = 2 To intLZ
If .Cells(i, 26).Value = "Angebotspreis" Then .Cells(i, 17).Value = .Cells(i, 19).Value - . _
Cells(i, 20).Value
Next i
End With
End Sub
Grüße, Bernd

AW: Achtung Anfänger: Kleines VBA If-Then dynam Array
22.08.2019 08:20:49
Matthias
Moin!
Ich habe grad kein Excel zum Testen. Deshalb nur mal ein Hinweise, was den Laufzeitfehler auslösen konnte. Deine Variable Wert_Vorperiode ist eindimensional. In der For Schleife behandelst du sie aber wie eine zweidimensionales Array. Da sollte nur i als Index stehen. Bei deinem Schleifen aufbau läufst du dann aber in einen neuen Fehler. Dein i geht von 1 to size. Dein Array ist aber nur size -1 groß. Beim letzten Wert kommt also ein Fehler. Dimensioniere dein Array dann lieber so Wert_Vorperiode(1 to size).
VG
Anzeige
AW: Achtung Anfänger: Kleines VBA If-Then dynam Array
23.08.2019 13:55:20
F
Okay, schonmal vielen Dank für eure Hilfe.
Mit den Code ohe Array hat es auch einwandfrei funktioniert. Merci. Ich dachte, es funktioniert einfach besser mit einen Array, sodass ich es so probiert habe.
@ Matthis, danke für deine Info bzl. den Laufzeitfehler. Ich schaue mir das gleich mal an und versuche den Fehler rauszubekommen.
Auch wenn ich meine Excel mit den Code so bearbeiten konnte, wie gewollt, will ich das gerne auch nochmal mit einen Array hinbekommen. Bin ich da denn mit meinen Code grundsätzlich auf den richtigen Weg oder ist das eher Quatsch, was ich da mache bzw es gibt einen simpleren Weg das Array zu basteln?
Beste grüße
manuel
Anzeige
AW: Achtung Anfänger: Kleines VBA If-Then dynam Array
25.08.2019 14:30:39
Matthias
Moin!
Also grundsätzlich bist ja auf dem richtigen Weg (Array anlegen und dimensionen bzw. drauf zugreifen). Es gibt aber einige Punkte, wo ich mir nicht sicher bin warum bzw. was man noch ändern könnte.
Dein Array wird zwar befüllt (wenn du die letzten angesprochenen Punkte behebst) aber was machst du dann damit. Da würde das zurückschreiben noch fehlen. Da du ein eindimensionales Array hast, müsstest du es noch transponieren (also drehen). Außer du legst es gleich 2 dimensional an. bspw. redim myarray(1 to size,1 to 1). Dass könnstest du dann ohne drehen wieder einfügen.
Dann ist die Frage, warum ein Array. Wenn du es aus SChnelligkeitsgründen brauchst, solltest du alles in ein Array packen. Also den Bereich Q1:AA100 (beispielsweise). Dann könntest du auf den ganzen Bereich zugreifen und sparst dir die einzelnen Blattzugriffe mit cells (das kostet viel Zeit). Das kannst du dann wie eine Tabelle mit Zeile, Spalte ansprechen.
Simplerer Weg für das Array? Du könntest auch gleich den Berech aus dem Blatt einer Variablen zuweisen. bspw. myarr = Range("Q1:Q" & letzteZeile) Dann hast du auch ein Array - ist dann aber gleich zweidimensional (auch wenn es nur aus einer Spalte ist). Nimmt sich aber nicht viel.
Wenn du noch Fragen hast, einfach melden.
VG
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige