VBA R1C1

Bild

Betrifft: VBA R1C1 von: Karl
Geschrieben am: 11.03.2005 11:57:00

Hi,

Ich möchte in der VLookup Formel meines Makro gerne die Lookup Zelle (hier: R8C3) nach Durchlauf der Schleife ändern (d.h. R9C3, R10C3, RjC3 wobei j die Zeilenvariable ist).

Wie kann ich das anstellen? Habe schon R[j]C3 und ähnliches probiert funktioniert aber nicht. "R" &j &"C3" funktioniert bei mir auch nicht. Bekomme die Fehlermeldung Compile Error: Expected end of statement.

Außerdem möchte ich die Range der Lookup Tabelle konstant halten, d.h. Company1!R[-7]:R[65528] soll sich verändern und zwar so ähnlich wenn ich mich nicht irre Company1!R[-7-j]:R[65528-j] (praktisch komplettes Worksheet Company1).

Was ist zu tun?

Hier der VBA Code

Dim v As Integer
Dim i As Integer
Dim j As Integer

i = 0
j = 0
v = 8

For i = 0 To 4
For j = 0 To 100
ActiveSheet.Range("E" & v + j).Offset(0, i).FormulaR1C1 = "=VLOOKUP(R8C3,Company1!R[-7]:R[65528]," & v + i + 1 & ",0)"

Next j
Next i



End Sub

Vielen Dank im Voraus Ihr Excel VBA Hacker!

Karl

Bild


Betrifft: AW: VBA R1C1 von: Chris
Geschrieben am: 11.03.2005 12:53:20

Hi Karl,

ich würde an Stelle von "FormulaR1C1" die Methode "Formula" verwenden und dann die direkten Zellen mit cells(a,b).address angeben. Hinter "address" kannst du mit row- und columnsabsolute auch festlegen, ob die relative oder absolute Adressen möchtest.

Gruss

Chris


Bild


Betrifft: AW: VBA R1C1 von: Karl
Geschrieben am: 11.03.2005 15:15:37

Hi Chris,

Vielen Dank für den Tip. Ich scheine allerdings echt zu blöd zu sein (VBA macht mich fertig...1te Programmiersprache überhaupt). Ich habe den Code folgendermaßen geändert:

Dim v As Integer
Dim i As Integer
Dim j As Integer

i = 0
j = 0
v = 8

For i = 0 To 4
For j = 0 To 100
ActiveSheet.Range("E" & v + j).Offset(0, i).Formula = "=VLOOKUP(Worksheets(Company1).Cells(8,3).adress(),Company1!R[-7]:R[65528]," & v + i + 1 & ",0)"

Next j
Next i

Das nimmt mir der Compiler aber nicht ab. Wenn ich nur cells(8,3) eingebe dann läuft zwar das Makro, aber die Lookup Referenz wird als cells(8,3) geschrieben.

Mann mann, ich denke Du wirst mir da sicher weiterhelfen können, die ExcelVBA hilfe tat es auf jeden Fall nicht.

Hast Du eine Buchempfehlung???

Vielen Dank im Voraus,

Karl


Bild


Betrifft: hat sich wohl erledigt - owT von: Luc
Geschrieben am: 13.03.2005 17:58:44




Bild


Betrifft: AW: hat sich wohl erledigt - owT von: Chris
Geschrieben am: 14.03.2005 08:47:04

Hi Karl,

sorry, aber ich war das ganze WE nicht im Nezt! Also falls dich die Lösung noch interessiert:
Da die gesamte Formel als String, also als Zeichenkette eingegeben wird, musst du diese für die Zelladressen aufspalten:
* "=VLOOKUP(" & "Worksheets(Company1).Cells(8,3).address" & "," & Worksheets(Company1).Range(Cells(1,1),Cells(50,2)).address "," & v + i + 1 & ",Falsch)"

Wenn du die Arbeitsmappe zwischendurch nicht wechselst, kannst du diese Angaben ("Worksheets(Company1)" ) auch weglassen, also nur cells(8,3).address!!!

Am Anfang deiner Formel würde ich nur *Activesheet.Cells(v+i+j,5).formula = ....
schreiben, müsste eigentlich ausreichen.

War das ein bisschen verständlicher???

Gruss

Chris
Diese Sache musst du zweimal machen:
1. Beim Suchkriterium = cells(8,3).address
2. Bei der Matrix die du durchsuchen möchtest = Range(cells(1,1),cells(50,2)).address
- Hier wird also der Bereich von Zelle(1,1) bis Zelle(50,2) durchsucht
dann war noch ein kleiner Fehler in der Formel, die letzt 0 ist ein Falsch


Bild


Betrifft: AW: hat sich wohl erledigt - owT von: Karl
Geschrieben am: 14.03.2005 12:36:14

Hi Karl,

sorry, aber ich war das ganze WE nicht im Nezt! Also falls dich die Lösung noch interessiert:
Da die gesamte Formel als String, also als Zeichenkette eingegeben wird, musst du diese für die Zelladressen aufspalten:
* "=VLOOKUP(" & "Worksheets(Company1).Cells(8,3).address" & "," & Worksheets(Company1).Range(Cells(1,1),Cells(50,2)).address "," & v + i + 1 & ",Falsch)"

Wenn du die Arbeitsmappe zwischendurch nicht wechselst, kannst du diese Angaben ("Worksheets(Company1)" ) auch weglassen, also nur cells(8,3).address!!!

Am Anfang deiner Formel würde ich nur *Activesheet.Cells(v+i+j,5).formula = ....
schreiben, müsste eigentlich ausreichen.

War das ein bisschen verständlicher???

Gruss

Chris
Diese Sache musst du zweimal machen:
1. Beim Suchkriterium = cells(8,3).address
2. Bei der Matrix die du durchsuchen möchtest = Range(cells(1,1),cells(50,2)).address
- Hier wird also der Bereich von Zelle(1,1) bis Zelle(50,2) durchsucht
dann war noch ein kleiner Fehler in der Formel, die letzt 0 ist ein Falsch


Hi Chris,

Vielen Dank für Deinen Lösungsvorschlag. Ich habe bereits von Hajo eine Lösung bekommen, wobei er nicht mit .adress arbeitet. Was macht .adress denn genau? Ich erkenne ehrlich gesagt den Sinn von .adress nicht (was an meinen bescheidenen (NULL) VBA Kenntnissen liegt).

würde das nicht auch ohne .adress und nur mit Range funktionieren?

Vielen Dank auf jeden Fall nochmal für Deine Hilfe,

KArl


Bild


Betrifft: AW: hat sich wohl erledigt - owT von: Chris
Geschrieben am: 14.03.2005 14:45:50

Hi Karl,

mit .address bekommst du die Adresse zur einer Zelle oder zu einem Bereich als String ausgegeben, dabei kannst du danach in Klammern noch bestimmen ob die Bezüge absolut oder relative sein sollen (also ob sie sich beim Kopieren anpassen oder nicht!)
= *Cells(1,1).address (rowabsolute:=false, columnabsolute:=true)*
Must mal in die Hilfe schauen, ist ganz gut erklärt. Da ich die Formel als String eingebe, denke ich, dass es ohne .address nicht funktioniert - kann aber sein, dass doch - keine Ahnung :o)

Gruss

Chris


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Summewenn und Teilergebnis kombiniert"