Clever-Excel-Forum

Normale Version: VBA: Zellenreferenzen durch Variablen ersetzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich möchte eine Formel in der Spalte BW nach unten kopieren, habe die erste freie Zeile ermittelt (efZelle=18) und diejenige bis zu der kopiert werden soll (lZelle=42), habe in die erste freie Zelle von BW (BW18) eine Formel eingefügt und möchte die nach unten bis zur letzten Zelle (BW42) kopieren.

Ich habe verschiedene Codes versucht, ohne Erfolg.

Hier der letzte den ich versucht habe:

Code:
Selection.AutoFill Destination:=Range("BW" & efZelle & ":" & "BW" & lZelle), Type:=xlFillDefault
Ich möchte also z.B.

Code:
Selection.AutoFill Destination:=Range("BW18:BW42"), Type:=xlFillDefault
durch einen Code mit Variablen ersetzen.

Was ist falsch in meinem Code?

Update:

Ich habe es jetzt selbst gefunden:
Code:
Selection.AutoFill Destination:=Range("BW" & efZelle & ":BW" & lZelle), Type:=xlFillDefault

aber mir ist jetzt aufgefallen (das hatte ich vorher nicht bedacht), dass die Referenzen in der Formel immer die selben sind, wobei sie an die Zeile angepasst werden müssten.

Mit freundlichen Grüßen
Alooha
Hallo,

dann zeig doch mal die Formel um die es geht.

Gruß Werner
Hallo,

dann hast Du in der Formel feste Bezüge ($ Zeichen) änder die Bezüge.

Das Runterziehen kannst Du erst mal in der Tabelle testen und sehen, wie die Bezüge sich verhalten.
Hallo,

ich meine, es wäre wirklich sinnvoll, die Formel zu zeigen

Anzumerken: ich habe das Einfügen der Formel per Makroaufzeichnung gemacht.

Code:
  ActiveCell.FormulaR1C1 = _
        "=IF(OR(R[1]C[-74]=""/"",ISNA(HLOOKUP(R[1]C[-73],INDIRECT(R[1]C[-72]&""!B1:v29""),29,0))),"""",HLOOKUP(R[1]C[-73],INDIRECT(R[1]C[-72]&""!B1:v29""),29,0))"

Wenn ich die Formel manuell in BW3 eingebe, lautet sie so:

=SI(OU(A3="/";ESTNA(RECHERCHEH(B3;INDIRECT(C3&"!B1:V29");29;0)));"";RECHERCHEH(B3;INDIRECT(C3&"!B1:V29");29;0))

(mein Excel ist in frz., daher auch die Funktionen, aber um die geht es ja nicht)
und die Referenzen in rot müssen an die Zeile angepasst werden.

Und da habe ich keine Ahnung wie, besonders da der Makroaufzeihner diese "kryptischen" Referenzen gebraucht hat. Kann man die eigentlich auch durch die "normalen" (A1, BV4 usw.) ersetzen in VBA?

Noch ein Wort der Erklärung zu dem "/": in die Datenbank, in der ich diese Formel in die Spalte BW einfügen will, werden die Spalten A:BV per VBA aufgefüllt und es wird immer in A ein "/" zwischen die Datensatzgruppen eingefügt, daher diese Abfrage.
MfG
Alooha
Hallo,

Du kannst die Formel ohne Autofill auch direkt in den Bereich eintragen lassen.
Das sähe so aus:



Code:
Range("BW" & efZelle & ":BW" & lZelle).FormulaR1C1 = _
        "=IF(OR(R[1]C[-74]=""/"",ISNA(HLOOKUP(R[1]C[-73],INDIRECT(R[1]C[-72]&""!B1:v29""),29,0))),"""",HLOOKUP(R[1]C[-73],INDIRECT(R[1]C[-72]&""!B1:v29""),29,0))"



Die Bezüge wären hier relativ.

Du solltest in der Tabelle die Formel so eintragen dass sie sich beim Runterziehen so verhält wie Du sie brauchst.

Suche mal im WWW nach: "Excel Formel mit absoluten oder relativen Bezügen"
Wenn Du das in der Tabelle hinbekommen hast, dann kann man das in VBA übernehmen.
Hallo,



Zitat:Du kannst die Formel ohne Autofill auch direkt in den Bereich eintragen lassen.
So was habe ich mir schon beinahe gezweifelt, dass man so vorgehen muß.





Ich habe jetzt nicht verstanden: so wie du den Code umgeändert hast ist die Formel aber noch immer absolut?



Komisch finde ich eigentlich, dass Excel aus einer relativen Formel (es gibt ja keine $) eine absolute macht und ich frage mich welchen Unterschied es gäbe wenn ich eine absolute eingegeben hätte (könnte ich natürlich auch experimentieren).





MfG




Alooha
hallo,

das muss man nicht, ist meist effektiver.
Man kann es auch so machen, wie Du.

Egal wie, Du sollst die Formel erst in der Tabelle so aufbauen, dass Du sie runter ziehen kannst.
Beim manuellen runter ziehen in der Tabelle erkennst Du, wie die Formel sich verändert und ob es so sein soll oder nicht.
Zitat:Egal wie, Du sollst die Formel erst in der Tabelle so aufbauen, dass Du sie runter ziehen kannst.
Sorry, das verstehe ich jetzt nicht: das habe ich doch gemacht; ich habe sie in BW3 eingegeben, sie heruntergezogen und sie hat sich angepasst.

Oder meinst du damit, das zu tun währenddem der Makroaufzeichner läuft?
Hallo,

versuch mal so:

Code:
Range("BW" & efZelle & ":BW" & lZelle).Formula = _

"IF(OR(A" & efZelle & "=""/"",ISNA(HLOOKUP(B" & efZelle & ",INDIRECT(C" & efZelle & "&""!B1:v29""),29,0))),"""",HLOOKUP(B" & efZelle & ",INDIRECT(C" & efZelle & "&""!B1:v29""),29,0))"


Nachtrag: Formel korrigiert, war noch ein Fehler drin.
OK, danke
Ich muß jetzt fort und werde es nachher versuchen.
MfG
Alooha
Seiten: 1 2