Range dynamisch erzeugen

Hallo Leute,

bin nicht in VBA-Programmierung bewandert und nutze deshalb die Makroaufzeichnung. Dabei habe ich ein Problem:

In Spalte A steht ein Datum in B eine Zeit.
In Spalte F soll nun stehen A+B und das Ganze mit AutoFill auf alle Zeilen ausdehnen. Da die Anzahl der Zeilen in A und B nicht bekannt sind, muß AutoFill dynamisch sein, da daraus sich später ein Diagramm ergeben soll. Der nachfolgende Code ist insoweit falsch, da der Wert „65000“ gegen den dynamischen Wert aus A oder B ersetzt werden müßte.

Hat Einer eine Idee?

Gruß Dirk

Range(„F1“).Select
ActiveCell.FormulaR1C1 = „=RC[-5]+RC[-4]“
Range(„F1“).Select
Selection.AutoFill Destination:=Range(„F1:F65000“), Type:=xlFillDefault

Tach Dirk,

nur den Zeilenübertrag bzw Addition hast du 2 einfache Möglichkeiten.

  1. du bestimmst die letzte benutzte Zeile auf deinem Blatt und lässt eine Schleife von 1 bis Zeilemax jeweils die Addition durchführen.

sub addition ()
Dim i as long
dim Zeilemax as long
dim tab 1 as worksheet

set tab1 = worksheets („NameTabellenblatt“)

Zeilemax = tab1.UsedRange.Rows.Count
For i = 1 To Zeilemax
tab1.cells(i,6) = tab1.cells(i,1) + tab2.cells(i,2)
Next i

end sub

  1. Oder du gehst von oben nach unten durch und stellst fest ob in der SpalteA etwas steht, wenn ja, dann lässt du die Addition ausführen.
    Aberr auch hier brauchst du eigentlich ein Abbruchkriterium und das wäre auch wieder der UsedRange

Gruß

slam

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

In Spalte A steht ein Datum in B eine Zeit.
In Spalte F soll nun stehen A+B und das Ganze mit AutoFill auf
alle Zeilen ausdehnen. Da die Anzahl der Zeilen in A und B
nicht bekannt sind, muß AutoFill dynamisch sein, da daraus
sich später ein Diagramm ergeben soll. Der nachfolgende Code
ist insoweit falsch, da der Wert „65000“ gegen den dynamischen
Wert aus A oder B ersetzt werden müßte.

Hi Dirk,

ich habe jetzt nur den Code umgebaut, was passiert wenn man datum mit Uhrzeit addiert habe ich nicht probiert da ich ja nicht weiß was genau in welcher Form in den Zellen steht.

Wenn A,B unterschiedlich „lang“ sind muß man den Code umschreiben.

Option Explicit
'
Sub tt()
Dim Zei As Long
Zei = Range("A" & Rows.Count).End(xlUp).Row
Range("F1").FormulaLocal = "=A1+B1"
Range("F1").AutoFill Destination:=Range("F1:F" & Zei), Type:=xlFillDefault
End Sub

Gruß
Reinhard

Hallo Reinhard, Hallo slam,

Danke für die Tipps.

Habe den Vorschlag von slam ausprobiert und es funktioniert - kleiner Tippfehler vorhanden :wink:
Werde auch Reinhard’s Vorschlag prüfen.

Gruß Dirk

Hallo Dirk,

Habe den Vorschlag von slam ausprobiert und es funktioniert -
kleiner Tippfehler vorhanden :wink:

ach den hätte der Debugger erkannt *annehm*

Hätte er sich überhaupt nicht gemeldet, sehr gelegentlich läßt der Debugger erstaunliche Wortkombination als „gültig“ passieren, dann krachst halt zur Laufzeit, dann fehlt mit Sicherheit das Option Explicit und dieses Fehlen wird halt mit langem Suchen nach dem Fehler bestraft :smile:)

Werde auch Reinhard’s Vorschlag prüfen.

Da sind vielleicht Denkfehler oder sonstige Fehler drin, aber kein Tippfehler, da kurz getestet *gg*

Gruß
Reinhard

Ganz anderer Ansatz…
Hallo Dirk!

Mach es doch einfach so: schreibe in F1 die Formel: =(IF(A1"",A1+B1,NA()). Dann füllst du mit Autofill die ganze Spalte F.
Nun wird in der Spalte F nur dann der Zahlenwert (A+B) erscheinen, wenn die Spalte A der selben Reihe nicht leer ist, dort also ein Wert eingetragen wurde. Ist die Zelle A leer, dann steht in F der neutrale Ausdruck NA(). Alternativ kannst du statt NA() auch ein Leerzeichen oder null eintagen lassen.

Wäre das eine Alternative?

Liebe Grüße,

Thomas.

Hallo Thomas,

ich bin dankbar für jeden Tipp. Werde auch Deinen im Hinterkopf behalten. Habe die Variante von Reinhard übernommen, da ich bei der Diagrammerstellung auch den Endwert der Datumsspalte benötigte.

Schönes Wochenende

Dirk