如何使用不同的变量在 VBA 中自动填充范围

Posted

技术标签:

【中文标题】如何使用不同的变量在 VBA 中自动填充范围【英文标题】:How to autofill a range in VBA with differing variables 【发布时间】:2021-05-25 13:14:30 【问题描述】:

我试图弄清楚如何根据同一行中已定义的数据自动填充特定范围的单元格。我的任务更复杂,但可以在下面的代码中看到对步骤的简化。我想要实现的是:

    定义我想要输出值的范围 将所选范围单元格(在其左侧)同一行中的两个值相乘,并在当前所选范围单元格中输出此数字。为此,要相乘的数字之一将取决于行中的字符串(描述其类型)。 遍历定义的范围并对每一行重复计算。

我当前的代码如下,并输出“应用程序定义或对象定义错误”。

任何帮助将不胜感激。

For a = Range("P12") To Range("P33") 'Range of cells I want to fill.
    If Cells(a, -10).Value = "B" 'If the cell 10 to the left of our "a" value is = "B".
    Then c = Cells(a, -10).Value * Worksheets("LCI").Range("D4").Value 'Then new variable "c" = (cell 9 to left of a) * (number from another sheet containing a database)
            
    Cells(a).Value = c 'Update value of selected range cell to contain c which we calculated.
Next 'Repeat for all rows in range.

【问题讨论】:

【参考方案1】:

你很接近。

    您需要将a 视为一个单元格或范围对象。该变量是具有a.rowa.column 等属性的单元格本身,这些属性描述了它在其所在工作表上的位置。 当您说Cells(a, -10) 时,您是在说“在Activesheet 上,我想要一个单元格,其中行为a,列的编号为-10。没有行 a (因为 a 是一个范围/单元格对象,并且因为您没有指定您想要的 a 的哪个属性,所以它将默认为 a.value 这可能什么都没有)并且有Activesheet 上没有 -10 列。

    您的循环定义不正确。您可以使用 For Each 循环来遍历区域中的单元格。

改为:

For Each a In Range("P12:P33")
    'clear `c` each loop 
    c=0
    If a.Offset(,-10).Value = "B" Then 'start at cell `a` and move back 10 columns and grab the value
        c = a.Offset(, -10).Value * Worksheets("LCI").Range("D4").Value
    End If
    a.Value = c
Next a

【讨论】:

非常感谢 JNevill!如果您能提供进一步帮助,我有一些后续问题。 1.输出值从所需行下方的一排开始,我是否需要从目标范围上方的范围开始? 2.每行输出的数字都是一样的,尽管“a.Offset(, -9).Value”的值实际上每次都在变化? 我对代码进行了快速更改,以在循环的每次迭代中清除变量 c 并清理格式,以便代码在循环内缩进。这可能会解决您评论中的问题 2。至于问题1......我不确定那里发生了什么。它将遍历 P12 到 P33 中的每个单元格。您可能希望将 a.value = c 行移动到 If 块中,以便仅在 a.offset(,-10).value = "B" 时设置 a.value

以上是关于如何使用不同的变量在 VBA 中自动填充范围的主要内容,如果未能解决你的问题,请参考以下文章

制作动态 VBA 自动填充范围

如何让自动填充在 VBA 中工作?

如何使用 VBA 动态自动填充目标?

在一列中自动填充 VBA 中不同长度的多个部分

具有变化范围的自动填充/填充公式

Excel VBA 跨列自动填充