SpecialCells根据范围大小返回不同的结果

时间:2013-12-23 09:32:13

标签: excel vba excel-vba

我真的很困惑和好奇,为什么使用相同的编码,只是数据量不同,输出可能真的不同?

With Sheets("control deck").Range("A2:A5000").SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "=r[-1]C"
End With

With Sheets("control deck").Range("A2:A50000").SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "=r[-1]C"
End With

第一个输出,仅使用上面单元格值的副本填充 空白 和第二个编码,用第一个单元格值的副本填充全部范围

我的数据:

>     1111    | abc    |x
>                      |y
>                      |z
>     
>     1112    | def    |R
>                      |S
>                      |T
>                      |U

我希望能出来

1111    | abc    |x
1111      abc    |y
1111      abc    |z

1112    | def    |R
1112      def    |S
1112      def    |T
1112      def    |U

出了什么

    >     1111    | abc    |x
    >     1111      abc    |y
    >     1111      abc    |z
    >      
    >     1111    | abc    |R
    >     1111      abc    |S
    >     1111      abc    |T
    >     1111      abc    |U

有谁知道为什么?

只有当范围超过30000`行

时才会发生这种情况

2 个答案:

答案 0 :(得分:4)

如果您使用的是Excel 2007或更早版本,则不同的单元格区域数量有限制SpecialCells可以参考8192

作为替代方案,试试这个

Sub Demo()
    Dim r As Range
    Dim dat As Variant
    Dim i As Long

    Set r = Sheets("Sheet2").Range("A2:A50000")
    dat = r.FormulaR1C1
    For i = 1 To UBound(dat, 1)
        If dat(i, 1) = "" Then
            dat(i, 1) = "=r[-1]C"
        End If
    Next

    r = dat

End Sub

这也将更快

答案 1 :(得分:0)

特殊细胞中有一个错误,据称于2010年修复,可以选择8,192个区域。