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

如何在VBA中使用不同的变量自动填充范围,vba,autofill,Vba,Autofill,我试图找出如何根据同一行中已定义的数据自动填充特定范围的单元格。我的任务更复杂,但在下面的代码中可以看到该步骤的简化。我想要实现的是: 定义要在其中输出值的范围 将选定范围单元格的同一行(左侧)中的两个值相乘,并在当前选定范围单元格中输出此数字。为此,其中一个要相乘的数字将取决于行中的字符串(描述其类型) 在定义的范围内循环,并对每行重复计算 我当前的代码如下,并输出“应用程序定义或对象定义错误” 任何帮助都将不胜感激 For a = Range("P12") To Rang

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

  • 定义要在其中输出值的范围
  • 将选定范围单元格的同一行(左侧)中的两个值相乘,并在当前选定范围单元格中输出此数字。为此,其中一个要相乘的数字将取决于行中的字符串(描述其类型)
  • 在定义的范围内循环,并对每行重复计算
  • 我当前的代码如下,并输出“应用程序定义或对象定义错误”

    任何帮助都将不胜感激

    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.
    
    你很接近

  • 您需要将
    a
    视为单元格或范围对象。该变量是单元格本身,它具有类似于
    a.row
    a.column
    的属性,这些属性描述了它在所在工作表上的位置。 当你说
    Cells(a,-10)
    时,你是在说“在
    Activesheet
    上,我想要一个行是
    a
    ,列是数字
    -10
    ”的单元格。没有行
    a
    (因为
    a
    是一个范围/单元格对象,并且由于您没有在此处指定所需的
    a
    属性,因此它将默认为
    a.value
    ,该值可能为零),并且在活动表上没有列
    -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.value
    仅在
    a.offset(,-10).value=“B”
    时设置。