我想在各行中添加具有如下模式的公式。有沒有簡單的方法通過VBA?
Cell AB16 = SUM(AC9:AC13)/SUM(AB9:AB13)
Cell AC16 = SUM(AD8:AD12)/SUM(AC8:AC12)
Cell AD16 = SUM(AE7:AE11)/SUM(AD7:AD11)
Cell AE16 = SUM(AF6:AF10)/SUM(AE6:AE10)
Cell AF16 = SUM(AG5:AG9)/SUM(AF5:AF9)
……
等等。
我嘗試使用 .formula 函式提取公式,并嘗試創建單獨的回圈來吸收字母中的遞增模式和數字中的遞減模式。這里我面臨的問題是直到 A 到 z 我可以將回圈從 ascii 65 增加到 90。超出 z 之后,它變得乏味,因為我需要跳轉到 AA。
有沒有更好的方法可以通過 VBA 實作上述公式跨行填充,但我希望公式格式與 Sum(xxx:xxx)/sum(yyy:yyy) 相同?限制是,我不能在這些單元格中通過宏運行硬編碼數字。此外,也不能在這些單元格中使用偏移公式。這些單元格只能接受 Sum(xxx:xxx)/sum(yyy:yyy) 格式。
uj5u.com熱心網友回復:
與 Excel 一樣,您無需擔心字母表。行和列實際上是編號的,字母只出現在最后,只是為了您的方便。您可以忽略它們并使用Excel 的母語R1C1說話:
Dim target As Range
Set target = Range("AB16:AF16")
Dim start_offset As Long
start_offset = 2
Dim c As Range
For Each c In target
c.FormulaR1C1 = "=SUM(R[-" & (start_offset 5) & "]C[1]:R[-" & (start_offset 1) & "]C[1])/SUM(R[-" & (start_offset 5) & "]C:R[-" & (start_offset 1) & "]C)"
start_offset = start_offset 1
Next
uj5u.com熱心網友回復:
寫一個公式(VBA)
Option Explicit
Sub WriteSumsDivision()
Const rAddress As String = "AB16:AF16"
Const rOffset As Long = 22
Const cSize As Long = 5
Dim ws As Worksheet: Set ws = ActiveSheet ' improve
Dim rrg As Range: Set rrg = ws.Range(rAddress)
Dim fCol As Long: fCol = rrg.Cells(1).Column
Dim cCount As Long: cCount = rrg.Columns.Count
Dim cOffset As Long: cOffset = rOffset - fCol
Dim MaxOffset As Long: MaxOffset = cSize - rOffset 1
Dim rCell As Range
Dim rArr As Variant: ReDim rArr(1 To cCount)
Dim cFormula As String
Dim c As Long
For Each rCell In rrg.Cells
c = c 1
cOffset = cOffset - 1
If cOffset > MaxOffset Then
cFormula = "=SUM(" & rCell.Offset(cOffset, 1) _
.Resize(cSize).Address(0, 0) & ")/SUM(" _
& rCell.Offset(cOffset).Resize(cSize).Address(0, 0) & ")"
rArr(c) = cFormula
Else
Debug.Print "Limit hit."
Exit For
End If
Next rCell
rrg.Formula = rArr
End Sub
uj5u.com熱心網友回復:
嗯,你可以在 VBA 中使用 for 回圈并用它生成你自己的字串陣列并在單元格中取消參考它們嗎?
這不是 vba,而是類似 --
原諒我的語法
function generateAlphabet(){
for (i=0; i<=48; i ){
for (y=0; y<=48; y ){
if (i % 24 < 1){
arrayA[i]="(asciinumber i)"
}
if (i % 24 > 1){
arrayA[i]="(asscinumber i)(asciinumber y)"
}
}
}
}
這個想法是,如果你的余數小于 1,你在第一個字母表中,如果余數大于 1,你在第二個字母表中。所以最后arrayA應該從A到AZ。然后你取消參考 vba 中單元格中的陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/406286.html
標籤:
上一篇:GalleryAllShapesAndTextboxes未正確顯示
下一篇:根據資料將列格式從垂直更改為水平
