Background: the project plan Excel I'm working on has different categories with different amount of items. I already wrote a macro http://goo.gl/Kjxs9T that will generate the categories with the necessary number of rows between them.
背景:我正在研究的项目计划Excel有不同的类别和不同的项目数量。我已经写了一个宏http://goo.gl/Kjxs9T,它将生成具有它们之间所需行数的类别。
Goal: Within the loop that creates the category, fill the cell with formula (see picture), for which the range would change depending on the amount of rows
目标:在创建类别的循环内,使用公式填充单元格(参见图片),其范围将根据行数而变化
The loop looks like this:
循环看起来像这样:
For i = 1 To RowCounter
'The offset is used to copy the next category and not the first each time, the counter will make sure it moves the appropriate amount of positions
Set rng = cate.Range("A1").Offset(CateCount, 0)
rng.Copy
'for this one we tell where it should paste the value. For every new loop it needs to move more cells downward, which is why we use the CateCount 3
Set rng2 = times.Range("B11").Offset(CateCount2, 0)
rng2.PasteSpecial
'The CateCount3 will count how many rows we need to add by counting how many times the category we are dealing with now
'defined by rng there is in the action sheet and then adding 1 one
CateCount3 = Application.CountIf(Worksheets("All actions Sheet").Range("B:B"), rng)
'Here we group the layers
Set rng = Range(rng2.Offset(1, 0), rng2.Offset(CateCount3, 0))
rng.Rows.Group
'Create the numbers of the categories using a loop
Dim CatNum As Integer
Set rng = cate.Range("A1", cate.Range("A1").Offset(RowCounter, 1))
CatNum = Application.WorksheetFunction.VLookup(rng2.value, rng, 2, True)
Dim NumCount As Integer
NumCount = 0
For j = 0 To CateCount3
Set rng = rng2.Offset(NumCount, -1)
rng = CatNum + NumCount
NumCount = NumCount + 1
Next j
'We need to add one unit to the counter so that for the next loop it will start one category below
CateCount = CateCount + 1
'The CateCount2 is used to add the right number of rows for the next loop
CateCount2 = CateCount2 + CateCount3 + 1
'We need to "delete" the contents of CateCount3 after every loop
CateCount3 = 0
Next i
Already I could use the formula within VBA to calculate it,
我已经可以在VBA中使用公式来计算它,
Set rng = rng2.Offset(0, 1)
Set rng3 = Range(rng2.Offset(1, 1), rng2.Offset(CateCount3, 1))
rng = Application.Min(rng3)
However, I want the formula to remain in the cell since the table can change at any time and I don't want to always have to update the macro.
但是,我希望公式保留在单元格中,因为表格可以随时更改,我不想总是更新宏。
Question: How could I translate that VBA formula into a string that stays in the cell? instead of application.min(rng2.offset...... to simply =min(C12:C17)
?
问题:如何将该VBA公式转换为保留在单元格中的字符串?而不是application.min(rng2.offset ......简单地说= min(C12:C17)?
2 个解决方案
#1
2
You can do it like that:
你可以这样做:
rng.Formula = "=MIN(" & rng3.Address & ")"
#2
1
You could also skip the need for the rng3 variable altogether
您也可以完全跳过对rng3变量的需求
rng.formulua = "=Min(" & Range(rng2.Offset(1, 1), rng2.Offset(CateCount3, 1)).address & ")"
#1
2
You can do it like that:
你可以这样做:
rng.Formula = "=MIN(" & rng3.Address & ")"
#2
1
You could also skip the need for the rng3 variable altogether
您也可以完全跳过对rng3变量的需求
rng.formulua = "=Min(" & Range(rng2.Offset(1, 1), rng2.Offset(CateCount3, 1)).address & ")"