作为string的范围用公式填充单元格

背景:我正在处理的项目计划Excel具有不同的类别和不同数量的项目。 我已经写了一个macroshttp://goo.gl/Kjxs9T ,它将生成必要数量的行之间的类别。

目标:在创build类别的循环中,用公式填充单元格(请参见图片),范围将根据行数

在这里输入图像说明

循环如下所示:

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 

我已经可以使用VBA中的公式来计算它,

 Set rng = rng2.Offset(0, 1) Set rng3 = Range(rng2.Offset(1, 1), rng2.Offset(CateCount3, 1)) rng = Application.Min(rng3) 

但是,我希望公式留在单元格中,因为表格可以随时更改,我不想总是必须更新macros。

问题:如何将VBA公式转换为保留在单元格中的string? 而不是application.min(rng2.offset...... to simply =min(C12:C17)

你可以这样做:

 rng.Formula = "=MIN(" & rng3.Address & ")" 

你也可以完全不需要rng3variables

 rng.formulua = "=Min(" & Range(rng2.Offset(1, 1), rng2.Offset(CateCount3, 1)).address & ")"