2016-11-22 2 views
0

Ich brauche Hilfe, um einen Code zu schreiben, der eine R1C1-Formel in die Zellen einer Zeile einfügt.R1C1-Formel auf variable Zeilen setzen, um dieselbe Spalte zu referenzieren

Die Startposition der Zeilen variiert bei jeder Ausführung des Makros. Ie. Wenn das Makro zum ersten Mal ausgeführt wird, wird die Formel in Zeile B16 als R [-5] C [3] eingegeben. R [-5] ist in diesem Fall E12.

Wenn das Makro jedoch ein anderes Mal ausgeführt wird, & wird es in Zeile B25 eingegeben, möchte ich immer noch, dass es auf E3 verweist, aber es verweist auf E20.

Hier mein Code

Dim cell As Range, MyRange As Range 

Set MyRange = Range("B1:B5000") 

For Each cell In MyRange 

If cell = " " And cell.Offset(, 1) <> "Record" Then 

cell.FormulaR1C1 = "=SUM(R[-5]C[3]: SUM(R[-5]C[4])" 

End If 

Next cell 

End With 

Sie haben recht ist, versucht mein Code This row - 5, this column + 3: this row -5, this column + 4 Das Problem, das ich ist zu sagen, dass diese Zeile & jede Zeile könnte ich relativ Referenzierung, da diese Formel verwenden möchte Kopien nach unten in der nächsten Zeile Also, was ich versuche zu tun, dies

Cell B16 = E11+F11 
Cell B17 = E12+F12 
Cell B18 = E13+F13 etc 

dann, wenn das Makro & Startzelle E25 erneut ausgeführt wird, dann

Cell E25 = E20+F20 
Cell E26 = E21+F21 
Cell E26= E22+F22 etc 

So, unabhängig davon, welche Zelle die Makropunkte auf, es wird immer die Berechnung von E11+F11 starten

+0

Haben Sie bereits einen Code zum Anzeigen? –

+0

Hallo und willkommen bei StackOverflow. Bitte nehmen Sie sich etwas Zeit, um die Hilfeseite zu lesen, insbesondere die Abschnitte mit dem Namen ["Welche Themen kann ich hier fragen?"] (Http://stackoverflow.com/help/on-topic) und ["Welche Arten von Fragen sollte ich haben nicht fragen? "] (http://stackoverflow.com/help/dont-ask). Und, was noch wichtiger ist, lesen Sie bitte [die Checkliste für Stack Overflow-Fragen] (http://meta.stackexchange.com/q/156810/204922). Vielleicht möchten Sie auch etwas über [Minimale, vollständige und überprüfbare Beispiele] (http://stackoverflow.com/help/mcve) erfahren. Und schließe den Code ein, mit dem du arbeiten willst ... damit Leute helfen können. – Rdster

Antwort

0

Hier ist mein Code

Dim Zelle As Range, MyRange As Range Set MyRange = Range ("B1: B5000")

für jede Zelle in MyRange

Wenn Zelle = "" Und cell.Offset (1) <> "Record" Dann

cell.FormulaR1C1 = "= SUM (R [-5] C [3]: SUM (R [-5] C [4])"

End If

Nächste Zelle

End With

+0

Sie können diesen Beitrag löschen, wenn Sie möchten - Ich habe den Code zu Ihrer ursprünglichen Frage hinzugefügt. –

+0

Sie haben Recht, mein Code versuchte zu sagen Diese Zeile - 5, diese Spalte + 3: diese Zeile -5, diese Spalte + 4 Das Problem, das ich habe, ist, dass diese Zeile jede Zeile sein könnte und ich möchte relative Referenz verwenden wie diese Formel in die nächste Zeile kopiert Also, was ich versuche zu tun ist das Zelle B16 = E11 + F11 Zelle B17 = E12 + F12 Zelle B18 = E13 + F13 etc Dann, wenn das Makro erneut ausgeführt wird & starten Zelle E25, dann Zelle E25 = E20 + F20 Handy E26 = E21 + F21 Handy E26 = E22 + F22 etc Also, unabhängig davon, welche Zelle die Makropunkte auf, es wird immer die Berechnung von E11 starten + F11 – Jonbx

+0

Das funktioniert perfekt. Vielen Dank – Jonbx

0

Sie verwenden relative Verweise in Ihrer Formel und die Formel wird nicht funktionieren, wie Sie versuchen, =SUM(E1:SUM(F1) zu sagen, wenn die in der Zelle B6 eingegeben. Alle Zeilen höher als diese und es wird versucht, auf das Blatt zu verweisen.

Um die absolute Referenzierung zu verwenden, verwenden Sie R3C5 (Zeile 3, Spalte 5 = E3).
Allenfalls Ihre Formel zu sagen versuchte This row - 5, this column + 3: this row -5, this column + 4

Vielleicht "=SUM(R3C5:R3C4)" versuchen, die gleich wie =SUM($E$3:$F$3) ist.

Auch - cell = " " - die Zelle muss ein einzelnes Leerzeichen enthalten? Sollte es cell = "" sein?

bearbeiten: Als Antwort auf Ihre bearbeiten - wenn Sie die erste Formel immer bei E11 aussehen: F11, und die nächste E12 sein: F12, etc. Sie eine dieser Lösungen verwenden können:

um die Formel für alle Zeilen in einem Hit hinzufügen - das ist nicht mit einem Raum für eine Zelle überprüft:

Public Sub Test() 

    Dim MyRange As Range 
    Dim lOffset As Long 

    Set MyRange = Range("B1:B5000") 

    With MyRange 
     lOffset = 11 - .Row 
     .FormulaR1C1 = "=IF(RC[1]<>""Record"",SUM(R[" & lOffset & "]C5:R[" & lOffset & "]C6),"""")" 
    End With 

End Sub 

um zu überprüfen, dass jede Zelle einen Raum in sich hat, bevor sie die Formel Zugabe:

Public Sub Test1() 

    Dim MyRange As Range 
    Dim rCell As Range 
    Dim lOffset As Long 

    Set MyRange = Range("B30:B5000") 

    lOffset = 11 - MyRange.Row 
    For Each rCell In MyRange 
     If rCell = " " And rCell.Offset(, 1) <> "Record" Then 
      rCell.FormulaR1C1 = "=SUM(R[" & lOffset & "]C5:R[" & lOffset & "]C6)" 
     End If 
    Next rCell 

End Sub 

Hier die Ergebnisse für den zweiten Codeblock in der Reihe die Formel beginnt immer zeigen 11:
enter image description here

Und wenn Sie den Bereich ändern die Formel geht in:
enter image description here

Edit 2:
Wenn Zeilen 20:24 Datensatz haben, wird =SUM($E11:$F11) in Zeile 25 platziert. Wenn Zeile 26 einen Datensatz enthält, dann Zeile 27 wird =SUM($E12:$F12)

haben 0
Public Sub Test1() 

    Dim MyRange As Range 
    Dim rCell As Range 
    Dim lOffset As Long 

    Set MyRange = Range("B20:B30") 

    lOffset = 11 
    For Each rCell In MyRange 
     If rCell = " " And rCell.Offset(, 1) <> "Record" Then 
      rCell.FormulaR1C1 = "=SUM(R[" & lOffset - rCell.Row & "]C5:R[" & lOffset - rCell.Row & "]C6)" 
      lOffset = lOffset + 1 
     End If 
    Next rCell 

End Sub 
+0

Danke. Ich habe es probiert & es zeigt nicht immer auf Zeile 11. – Jonbx

+0

Aber Sie wollten nicht, dass es immer auf Zeile 11 zeigt - die erste Formel zeigt auf Zeile 11, die nächste auf Zeile 12, usw. Wie Sie sagten: _Cell B16 = E11 + F11 Zelle B17 = E12 + F12 Zelle B18 = E13 + F13 etc_ Wenn ich 'MyRange' auf B16: B5000 setze, ist die erste Formel' = SUM ($ D11: $ E11) ', die zweite ist' = SUM ($ D12: $ E12) '(OK, erhöhen Sie die Spalten um 1 C5 & C6 anstatt C4 & C5). –

+0

Die Zeilennummer von Spalte B wird bei jedem Ausführen des Makros geändert. So könnte B16 zum ersten Mal sein. B20, zweites Mal. usw. Unabhängig davon, wo die Zeilennummer liegt, sollte die Startberechnung E11 + F11 sein. Danke – Jonbx

Verwandte Themen