Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

relativer Bezug in VBA mit R...C...





Frage

Hallo ! Ich würde gern aus mehreren Zellen einen relativen Bezug (ich hoffe, das heißt so) auf andere Zellen herstellen, und zwar mit der Anweisung "R [gehe n mal nach links] und dann gehe "C [fünf mal nach oben]" - ihr versteht. Das Problem ist, dass ich VBA die Anweisung 'n-mal' nicht klarmachen kann - weiß jemand ob es überhaupt und wenn ja dann wie geht? Ich wäre sehr dankbar für eine Lösung. Viele Grüße Cardillac

Antwort 1 von Guenter

Hallo Cardillac,

meinst Du vielleicht die Offset-Eigenschaft?

Ausdruck.Offset(RowOffset, ColumnOffset)
Mit negativen Zahln kommst Du in der Reihe nach links und in der Spalte nach oben.

Gruß
Günter

Antwort 2 von Cardillac

Hallo Günter !

Jein. Offset Eigenschaft - Ja, also ich möchte schon, dass Excel aus einer Zelle in eine andere, von mir zu definierenden, Zelle springt. Und Nein, ich möchte in dem Befehl keine Zahlen haben. Also nicht R[4] C[-14] sondern, so dachte ich mir R[4] C[n+1] (so geht's nur nicht!), wobei n eine Variable ist und sich verändern darf, was sich aber auch in der Formel niederschlagen muss - also n muss dort irgendwie rein - das Problem ist halt - ich weiß nicht wie.

Viele Grüße
Cardillac



Antwort 3 von sicci

Hallo Cardillac,

sowohl dem Offset als auch dem rel.Bezug RC können Variablen beigegeben werden. Bei Formeln mußt Du nur beachten, daß die im Sheet einzutragende Formel im VBA in Anführungsstrichen steht. Um Variabeln drunterzumischen, brauchst Du vor der Variable das Abführungszeichen und das &. Steht die Variable in der Mitte einer Formel, muß die Syntax so aussehn: "=Formel" & Variable & "Formelfortsetzung". Zum Springen ist Offset besser geeignet.

Kleines Besipiel zum testen:
Sub Cardillac()
Dim x%, y%
x = InputBox(x)
y = InputBox(y)
    ActiveCell.FormulaR1C1 = "=R[" & x & "]C[" & y & "]"
ActiveCell.Offset(x, y).Select
End Sub


Gruß
sicci

Antwort 4 von Taugenichts

Hallo Sicci,
Das führt mich schon mal etwas weiter. Ich habe aber immer noch das Problem, dass ich die Anweisung nicht bei Arrays benutzen kann, Excel meckert da "Typen unverträglich". Ist der Befehl bei Arrays nicht gültig ?
Ich habe mal die betreffende Stelle rübergeholt - oder ist vielleicht was an der Syntax falsch?


Range(Cells(8, 6), Cells(8, 6 + n)).Select
Selection.FormulaArray = _
"=R[15]C[6]+R[16]C[6]*RC[-5]:R[" & n & "]C[-5]+R[ " = 1 + " & n ] C[6]*RC[-5]:R[ " & n & "]C[-5]^2+R[" = 2 + " & n ]C[6]*RC[-5]:R[" & n & "]C[-5]^3"
Range("F8").Select


Vielen Dank
Cardillac

Antwort 5 von sicci

Hallo Cardillac,

wie soll denn Deine Array Formel in der Tabelle aussehn? Komme mit den VBA-Angaben nicht klar (?? =1, =2, fehlende bzw. falsch plazierte Anführungszeichen ??).

Auch Arrayformeln sollten Variablen vertragen.

Gruß
sicci

Antwort 6 von Cardillac

Hallo Sicci,

So hatte ich Dich verstanden. Du schriebst, dass eine Formel mit einer Variable folgende Syntax haben sollte: "=Formel" & Variable & "Formelfortsetzung". Naja, und das was Du dort siehst, ist meine Interpretation dessen. Die Formel sollte lauten 1+n bzw. 2+n. Habe ich Dich da missverstanden?
Excel soll daraus dann machen, bzw. macht es auch, nur nicht mit der Variablen n : =L23+L24*A8:A24+L25*A8:A24^2+L26*A8:A24^3 wobei dann z.B. A24 ersetzt werden soll durch 8+n, da ich mich aber schon in Zeile 8 befinde also n mal in der Tabelle tiefer.
Ich hoffe, das ist verständlich...?
Vielen Dank - Du hast mir wirklich schon sehr viel weitergeholfen.
Viele Grüße
Cardillac

Antwort 7 von sicci

Hallo Cardillac,

So sollte es klappen (n auf 8 gesetzt und die Zeile der aktiven Zelle dazugenommen, so daß letztendlich Zeile 24 absolut referenziert wird).

Sub Cardillac2()
Dim n%, r%
n = 8
r = n + ActiveCell.Row
Range(Cells(8, 6), Cells(8, 6 + n)).Select
Selection.FormulaArray = _
"=R[15]C[6]+R[16]C[6]*RC[5]:R[" & r & "]C[-5]+R[17]C[6]*RC[-5]:R[" & r & "]C[-5]^2+R[17]C[6]*RC[-5]:R[" & r & "]C[-5]^3"
Range("F8").Select
End Sub

  1. Die Variable mußt Du vorher deklarieren, in der Formel einfach einsetzen (kein extra ' = ' in der Formel!).
  2. Es wird alles ohne Leerzeichen geschrieben, außer: vor und nach ' & ' muß ein Leerzeichen rein.
  3. nach jeder Variablen-Einfügung und vor dem Weiterführen der Formel muß eine erneute Anführung stehn (Formel immer in Anführungen eingeschlossen).


Solch rel. unübersichtliche Formeln kriegst Du am besten 'übersetzt', wenn Du Dir Ausdruck für Ausdruck übersetzt:

L23 - "R[15]C[6] +
L24 - R[26]C[6] *
A8 - RC[-5] +
A24 - R[" & r & "]C[-5] + usw.

Gruß
sicci



Antwort 8 von sicci

Nachtrag:

erstmal mein Fehler: natürlich wird nicht absolut referenziert, leider auch nicht relativ. War ein Denkfehler. Wenn Du immer zur Zelle A24 springen willst, egal von wo, schreibe:

n = 24 - activecell.row
willst Du immer relativ springen, langt es, wenn Du n = Zahl setzt.

nochmal zur Begriffsklärung (hat mich etwas verwirrt).

Das ist Deine Formel:
=L23+L24*A8:A24+L25*A8:A24^2+L26*A8:A24^3

Deine Variable ist n, da sie für Zeilen in der Tabelle steht, ist sie integer, wird also mit dim n as integer oder dim n% deklariert.

Mit 1+n oder 2+n wird nur die Variable um 1 bzw. 2 erhöht. Wozu Du das brauchst, ist mir nicht klar. Du kannst überall statt n auch n+1 oder n-3 etc. schreiben.

Gruß
sicci





Antwort 9 von Cardillac

Hallo !

Das war's !!!
Das Programm läuft...
Wozu ich das n+1 und n+2 brauch' ist schwer zu erklären.
Das ganze ist ein Programm, das wir innerhalb des Studiums (Bau-Ing.-Wesen) ausarbeiten sollen, und das am Ende Teil der Mathe-Note wird.
Wenn es Dich interessiert schick ich's Dir gern mal zu, aber es ist halt nichts womit man praktisch was anfangen kann, halt mathematische Funktionen darstellen, integrieren, approximieren, etc..
Auf jeden Fall vielen Dank für Deine Hilfe und viele Grüße
Cardillac