2016-11-22 42 views
0

我需要幫助來編寫將R1C1公式放入行的單元格中的代碼。將R1C1公式放在變量行中以引用同一列

每次宏運行時,行的起始位置都會有所不同。 也就是說。如果宏第一次運行,則公式將作爲R [-5] C [3]輸入到行B16中。案例中的R [-5]是E12。

但是,當宏運行另一次,&它進入行B25,我仍然希望它引用到E3,但它引用E20。

這裏是我的代碼

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 

你是對的,我的代碼是想說This row - 5, this column + 3: this row -5, this column + 4 我的問題是,該行可以是任何行&我想用相對引用,因爲這公式複製到下一行 所以我想要做的就是這個

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

然後運行宏時再次&啓動細胞是E25,則

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

所以,無論哪個小區宏分的,它總是開始從E11+F11

+0

你已經有一些代碼可以顯示嗎? –

+0

你好,歡迎來到StackOverflow。請花一些時間閱讀幫助頁面,尤其是名爲[「我可以詢問什麼主題?」(http://stackoverflow.com/help/on-topic)和[「我應該問什麼類型的問題避免問?「](http://stackoverflow.com/help/dont-ask)。更重要的是,請閱讀[Stack Overflow問題清單](http://meta.stackexchange.com/q/156810/204922)。您可能還想了解[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。並且包括你正在努力通過的代碼...所以人們可以提供幫助。 – Rdster

回答

0

這裏的計算是我的代碼

昏暗的小區範圍,MyRange作爲範圍 集MyRange =範圍( 「B1:B5000」)

針對每個小區在MyRange

如果細胞= 「」 而cell.Offset(1)<> 「記錄」。然後

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

結束如果

下一頁細胞

末隨着

+0

如果你願意,你可以刪除這篇文章 - 我已經將代碼添加到原始問題中。 –

+0

你說得對,我的代碼試圖說這行 - 5,這個列+ 3:這一行-5,這個列+ 4我遇到的問題是,這行可能是任何行,我想使用相對引用當這個公式複製到下一行所以我想要做的是這個 單元格B16 = E11 + F11 單元格B17 = E12 + F12 單元格B18 = E13 + F13等 然後,當宏再次運行&start cell is E25,then Cell E25 = E20 + F20 Cell E26 = E21 + F21 Cell E26 = E22 + F22 etc 因此,無論宏指向哪個單元, + F11 – Jonbx

+0

這很好。非常感謝你 – Jonbx

0

您目前使用的公式中相對引用,並作爲你想說=SUM(E1:SUM(F1)如果單元格B6中輸入的公式將無法工作。任何高於此的行,它會嘗試引用表單。

要使用絕對參考使用R3C5(第3行,第5列= E3)。
充其量公式想說This row - 5, this column + 3: this row -5, this column + 4

也許嘗試"=SUM(R3C5:R3C4)"這是一樣的=SUM($E$3:$F$3)

另外 - cell = " " - 單元格必須包含單個空格?應該是cell = ""

編輯: 在回答您的編輯 - 如果你想第一個公式總是看E11:F11,接下來的是E12:F12,等您可以使用這些解決方案之一:

公式添加到所有行一重擊 - 這不檢查一個空間單元:

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 

要檢查每個單元都有一個空間,它增加前式:

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 

下面是第二個代碼塊顯示行11的結果公式總是開頭:
enter image description here

如果你改變範圍公式進去:
enter image description here

編輯2:
如果行20:24有記錄,則這將在行25中放置=SUM($E11:$F11)。如果行26有記錄,那麼行27將有=SUM($E12:$F12)

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

謝謝。我試過了,它並不總是指向第11行。 – Jonbx

+0

但是你不希望它總是指向第11行 - 第一個公式指向11行,下一個在第12行等。正如你所說:_Cell B16 = E11 + F11單元格B17 = E12 + F12單元格B18 = E13 + F13 etc_如果將MyRange設置爲B16:B5000,則第一個公式爲= SUM($ D11:$ E11)',第二個= = SUM ($ D12:$ E12)'(好吧,將列增加1 C5和C6而不是C4和C5)。 –

+0

Col B的行號在每次運行宏時都會有所不同。所以,第一次可能是B16。 B20,第二次。等等。但是,無論行號在哪裏,開始計算應該是E11 + F11。謝謝 – Jonbx