编写子例程以对列

时间:2018-08-02 18:13:38

标签: excel vba excel-vba

我有一列,其中一些单元格具有值,但大多数为空白。

我想要的是通过传播值来填补空白。例如

  

1

     

空白

     

空白

     

3

     

空白

     

5

将更改为

  

1

     

1

     

1

     

1

     

2.5

     

2.5

这是我到目前为止所拥有的:

Sub ()

Set z = range("numbers")


For n = 2 To z.Rows.Count

 x = z.Cells(n, 1)

If IsEmpty(x) Then
'do nothing

ElseIf x.End(xlUp).Row < z.Cells(1, 1).Row Then

  k = x / (x.Row - z.Cells(1, 1).Row + 1)

  z(Cells(1, 1), Cells(n, 1)).Offset(0, 5) = k

Else

 k = x / (x.Row - x.End(xlUp).Row + 1)


 z(Cells(x.End(xlUp), 1), Cells(n, 1)).Offset(0, 5) = k


End If



Next n

此代码有很多问题。在for循环的行上有一个“需要对象”错误。同样,endxlup将为我提供最终值,而不是我遇到的第一个值。我只是想展示我的努力。

1 个答案:

答案 0 :(得分:0)

进行大胆的猜测,但是您希望从底部开始到顶部,并且在有空白单元格的地方,均匀分配最后填充的单元格的值。

准备用未经测试的头顶代码刺破

dim i as long, lr as long, j as double, k as long
lr = cells(rows.count,1).end(xlup).row
j = 0 'value to be divided
k = 0 'number of cells to divide j across
for i = lr to 2 step -1 'assumes header in row 1
    if cells(i,1).value <> "" AND j <> 0 then
        if cells(i,1).value <> "" then j = cells(i,1).value
        if cells(i,1).value = "" then k = k+1
    else
        range(cells(i+1,1),cells(i+1+k,1)).value = j/k
        j = 0
        k = 0
    end if
next i