我有以下数据表

Channel Quarter Week value
a       1       1    5811
a       1       2     199
a       1       1    8111
a       2       2     881
a       2       1     124
b       2       2    1991


我需要根据Channel和Quarter列的组合来更新value列(我创建了一个用作键的帮助器列)

Helper Channel Quarter Week value
 a1      a       1       1    5811
 a1      a       1       2     199
 a1      a       1       1    8111
 a2      a       2       2     881
 a2      a       2       1     124
 b2      b       2       2    1991


从我的VBA表单中,我创建了一个字典,其中包含这些帮助器列中的名称,例如

 cellDict = [a1:= 1000, 2:= 2000, b1:= 500 etc]


现在,我想基于此字典更新“值”列的值,以使与a1对应的单元格每个以1000/3更新(因为a1的行数为3),并且类似地,对应于到a2分别更新为1000/2。

尝试是使用单独的帮助程序名称为值列创建命名范围,然后遍历每个命名范围,并通过取总值并将其除以该命名范围的计数来更新单元格值

所以,我的问题是如何在helper列的基础上创建一个带有value列的命名范围(假设值是V列)

Range("a1") = V1:V3
Range("a2") = V4:V5 etc..

最佳答案

我认为您可以在没有命名范围的情况下更轻松地完成此操作。

首先,我假设这些行是按您的帮助者列排序的!
只需在帮助器列中找到第一个a1即可。与find method并获得其行号为rowStart

然后使用WorksheetFunction.CountIf Method将助手列中a1的出现计数为rowCount。所以rowEnd = rowStart + rowCount - 1

现在您可以像…一样循环

Dim iRow As Long
For iRow = rowStart to rowEnd
    'use your dictionary and rowCount to replace values here.
    'Example for accessing the cell:
    Worksheets("MySheet").Cells(iRow, "E").Value = ""
Next iRow

关于excel - 如何基于Excel VBA中的另一列的值创建单元格的命名范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45913030/

10-10 18:50