2017-08-28 100 views
2

我有数据的后续片材创建单元的命名范围如何基于在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 

我需要基于信道和季列的组合来更新值列(我创建了一个帮手列该中心将作为一个键)

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.. 

回答

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 
+0

在检查函数的定义,我假设我需要定义一个范围,我的整个帮手列,如COUNTIF将需要在范围如此工作会发现还是可以在列上使用它? – hbabbar

+0

如果辅助列始终位于特定列中,则不需要命名范围。列A然后使用'Worksheet(“MySheet”)。范围(“A:A”)'引用整个列A.或者'Worksheet(“MySheet”)。Columns(1)'引用整个第一列。当然,你可以使用这些引用的函数'find'和'countif'。 –

+0

感谢您的解释,我可以找到开始和结束行号。我不清楚如何在该行号的“值”列中迭代'单元格',因为我可以在命名范围内使用ForEach。 – hbabbar

相关问题