Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Zellenreferenzen durch Variablen ersetzen
#1
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
Antwortento top
#2
Hallo,

dann zeig doch mal die Formel um die es geht.

Gruß Werner
Antwortento top
#3
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.
Gruß Atilla
Antwortento top
#4
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
Antwortento top
#5
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.
Gruß Atilla
Antwortento top
#6
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
Antwortento top
#7
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.
Gruß Atilla
Antwortento top
#8
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?
Antwortento top
#9
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.
Gruß Atilla
Antwortento top
#10
OK, danke
Ich muß jetzt fort und werde es nachher versuchen.
MfG
Alooha
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste