如何根据excel vba中另一列的值创建命名的单元格区域

时间:2017-08-28 06:39:33

标签: excel vba excel-vba

我有以下数据表

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]

现在我想在这个字典的基础上更新'value'列的值,使得对应于a1的单元格每个都以1000/3更新(因为a1的行数是3)并且类似地,对应于a2的单元格每个都以1000/2更新。

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

所以,我的问题是我如何根据辅助列创建一个带有值列的命名范围,以便我有(假设值为第V列)

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

1 个答案:

答案 0 :(得分:2)

我认为你可以在没有命名范围的情况下以更简单的方式做到这一点。

首先,我假设行按你的助手列排序!
只需找到辅助列中的第一个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