【问题标题】:How to create a named range of cells based on value of another column in excel vba如何根据excel vba中另一列的值创建命名的单元格范围
【发布时间】:2018-02-05 08:54:21
【问题描述】:

我有以下数据表

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。

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

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

    首先,我假设这些行是按您的帮助列排序的!
    只需在帮助列中找到第一个a1,例如。使用find method 并获取其行号为rowStart

    然后使用WorksheetFunction.CountIf Method将helper列中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
    

    【讨论】:

    • 在检查函数定义时,我假设我需要为我的整个帮助器列定义一个范围,因为 countIF 需要一个范围才能工作,所以会找到或可以使用它列本身?
    • 如果帮助列始终位于特定列中,则不需要命名范围,例如。然后 A 列使用 Worksheet("MySheet").Range("A:A") 来引用整个 A 列。或者 Worksheet("MySheet").Columns(1) 来引用整个第一列。当然,您可以将这些引用与函数 findcountif 一起使用。
    • 感谢您的解释,我能够找到开始和结束行号。我不清楚如何迭代该行号的“值”列中的“单元格”,因为我可以在命名范围中使用 ForEach。
    • 我猜这可能会... Cells(r, c).Value = x(r)
    • @hbabbar 查看我编辑的答案以获取示例。始终使用带有cellsrange 的完全合格的工作表,就像我的示例中一样,以避免任何问题。您可以使用列的字母"E" 或其编号5
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多