2013-12-23 6 views
3

Я действительно путаю и любопытно, почему с одинаковым кодированием, только с разным количеством данных, выход может быть действительно другим?SpecialCells возвращает разные результаты в зависимости от размера диапазона

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 `строк

ответ

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 

Это будет гораздо быстрее, тоже.

+0

Предел применяется к 8192 различным областям ячеек - не к отдельным ячейкам. – brettdj

+0

@brettdf thx, обновлено –

+0

И массив приближается – brettdj

0

В специальных ячейках, предположительно зафиксированных в 2010 году, имеется ошибка в 8 192 областях, которые могут быть выбраны.

Смежные вопросы