powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / заполнение пустых ячеек значением сверху
25 сообщений из 33, страница 1 из 2
заполнение пустых ячеек значением сверху
    #36025248
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все привет!

После построения сводной таблицы есть необходимость заполнить пустые ячейки значениями сверху. Для этой задачи написал следующий макрос:

Sub ЗаполнениеПустыхЯчеек()
'
' ЗаполнениеПустыхЯчеек Макрос
'
Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A1").CurrentRegion.Value = Range("A1").CurrentRegion.Value

'
End Sub

Иногда эта зараза во всем диапазоне данных пишет #ССЫЛКА! и на первой строке вместо заголовков столбцов появляется "0".

Может кто сталкивался, или просто знает, в чем может быть проблема?
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36025862
LeCrunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не мучайся с макросом, используй простой способ .
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36028404
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ничего себе простой!

А если надо заполнить пустые ячейки в 5-ти столбцах!?

Макрос делает эту операцию за 5-10 секунд. А когда (в редких случаях) не срабатывает, приходится фильтровать пустые строки в каждом столбце.
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36028897
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,

Перед запуском макроса, убедись что в первой строке всегда что-то есть.
Либо принудительно исключай первую строку из региона. Например так:
Код: plaintext
range("a1").currentRegion.offset( 1 ).specialCells(   ' ... и так далее
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36033022
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В этом-то и вопрос, что в первой строке всегда находятся какие-нибудь данные (заголовки). Это же бывшая сводная таблица.

Попробую исключить первую строчку, может правда получится.
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36033207
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,

Может такое поможет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Макрос3()


    Set asdf2 = Range("A65536").End(xlUp) ' последняя заполненая ячейка
    Set asdf = Range("A1").End(xlDown) ' первая заполненая ячейка
    Range(asdf, asdf2).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" 'заносим формулу в диапазон
    Range(asdf, asdf2).Value = Range(asdf, asdf2).Value ' копируем только значения
 
End Sub
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36035044
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я начинаю подозревать, что это глюк excel.

Попробывал заполнить ячейки в диапазоне более 300 000 сторк и все получилось. Но в некоторых случаях (хз каких) не справляется, хотя необходимо заполнить только 70 000 строк.

Гомосятина какая-то:(
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36037504
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,

SpecialCells не рекомендуется использовать в диапазонах с более чем 16.384 ячейками, т.к. у этой проперти есть ограничение в 8.192 несмежных области:

http://support.microsoft.com/kb/832293

Думаю, что твои беды отсюда.

KL
[MVP - Microsoft Office Excel]
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36040866
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL),

в итоге, как должен выглядеть мой макрос, чтобы он заработал?
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36041058
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле можно еще проще с пом. формул сделать (не так, как описано по ссылке на форум ixbt).
Допустим
Фамилия___Услуга___ Цена
Иванов____ Услуга 1__100 р
__________Услуга 2__150 р
__________Услуга 3__200 р
Сидоров____Услуга 7__100 р
__________Услуга 5__150 р
__________Услуга 8__200 р

И "Иванов" находится в B2. Чтобы, например, заполнить столбец G так как надо, в G2 формула =ЕСЛИ(B2="";G1;B2) и растянять вниз насколько нужно
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36041119
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,

Может использованием дополнительного столбца и методой предложенной DaniilK ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Макрос3()
    
    asdf2 = Range("A65536").End(xlUp).Row  ' последняя заполненая ячейка
    asdf = Range("A1").End(xlDown).Row ' первая заполненая ячейка
    Range(Cells(asdf,  255 ), Cells(asdf2,  255 )).FormulaR1C1 = "=RC[-254]" 'вставляем значение первой ячейки диапазона в предпоследний столбец
    Range(Cells(asdf +  1 ,  255 ), Cells(asdf2,  255 )).FormulaR1C1 = "=IF(RC[-254]="""",R[-1]C,RC[-254])" 'вставляем формулу в предпоследнем столбце
    Range(Cells(asdf, "A"), Cells(asdf2, "A")).Value = Range(Cells(asdf,  255 ), Cells(asdf2,  255 )).Value 'Копируем значения в нужный нам столбец 
    Range(Cells(asdf,  255 ), Cells(asdf2,  255 )).Clear ' очищаем дополнительный предпоследний столбец
    
End Sub
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36042526
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08KL (XL),

в итоге, как должен выглядеть мой макрос, чтобы он заработал?

Если пустые ячейки в одном столбце, то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub test()
    Dim lngLastRow As Long, i As Long
    Application.ScreenUpdating = False
    With ActiveSheet
        lngLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        On Error Resume Next
        For i =  1  To lngLastRow Step  16000 
            .Cells(i, "A").Resize( 16000 ).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        Next i
        With .Range(.Cells( 1 , "A"), .Cells(lngLastRow, "A"))
            .Value = .Value
        End With
    End With
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36042552
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL),
Проверил код, но он выдает не верный результат, т.к. начинает работать с первой строки.
С твоего позволения подправлю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub ЗаполнениеБолее16000ПустыхЯчеек()
    Dim lngLastRow As Long, i As Long, i2 As Long
    Application.ScreenUpdating = False
    With ActiveSheet
        lngLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        i2 = .Cells( 1 , "A").End(xlDown).Row 'первая строка диапазона
        On Error Resume Next
        For i = .Cells( 1 , "A").End(xlDown).Row To lngLastRow Step  16000  'работаем начиная с первой строки диапазона
            .Cells(i, "A").Resize( 16000 ).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        Next i
        With .Range(.Cells(i2, "A"), .Cells(lngLastRow, "A")) 'копируем начиная с первой строки диапазона
            .Value = .Value 
        End With
    End With
    Application.ScreenUpdating = True
End Sub

...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36042757
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здорово. Будем тестить.

Спасибо!
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36042804
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Протестил.
Оба макроса заполняют только перый столбец, а у меня их n-ое кол-во.
Ладно, что-нибудт придумаю.
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36043352
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06Проверил код, но он выдает не верный результат, т.к. начинает работать с первой строки.
С твоего позволения подправлю:
Сергей06, спасибо, а то код писался на скорую руку и без тестирования

Юрий08Протестил.
Оба макроса заполняют только перый столбец, а у меня их n-ое кол-во.
Ладно, что-нибудт придумаю.
Я об этом сразу предупредил. Для того, чтобы обработать энное кол-во нужно добавить 3 строчки кода (цикл в цикле)
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36045216
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей06,

добавь, пожалуйста, в свой код 3 строчки кода (цикл в цикле), чтобы он работал с энным кол-вом столбцов.

Я не знаю, как это сделать(
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36045753
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08, ну вот так, что ли.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub ЗаполнениеБолее16000ПустыхЯчеек()
    Dim lngLastRow As Long, i As Long, i2 As Long, j As Long, j2 As Long
    Application.ScreenUpdating = False
    With ActiveSheet
    
    For j =  1  To  10  Step  1  ' j = 1 - номер первого столбца, To 10 - номер последнего столбца, Step 1 - через какой шаг проводить заполнение столбцов
    
        lngLastRow = .Cells(.Rows.Count, j).End(xlUp).Row
        i2 = .Cells( 1 , j).End(xlDown).Row 'первая строка диапазона
        On Error Resume Next
        
        For i = .Cells( 1 , j).End(xlDown).Row To lngLastRow Step  16000  'работаем начиная с первой строки диапазона
            .Cells(i, j).Resize( 16000 ).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        Next i
        With .Range(.Cells(i2, j), .Cells(lngLastRow, j)) 'копируем начиная с первой строки диапазона
            .Value = .Value
        End With
    Next j
    End With
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36046017
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей06, спасибо!

Работает.

Правильно я понял, что он заполняет первые 10 столбцов и чтобы изменить это кол-во надо уменьшить "... To 10:?
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36046472
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06Юрий08, ну вот так, что ли.
Сергей06, ты добавил 2 строчки :-) 3-я предназначалась для динамического определения столбца :D
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36046930
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макрос работает, почти, идеально.

Иногда, заполняются пустые строки, где ранее было "Итого" (когда они в дынных). И эти пустые ячейки заполняются последним значением из таблицы. Но после удаления листа и нового построения сводной этот косяк пропадает.
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36049724
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL),
Вот-вот.
Про три строки я помнил и поэтому и добавил две переменных, а понадобилась одна.
Но не могу сообразить, как одной строкой определить динамический диапазон столбцов в которых находятся поля сводной таблицы.
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36052376
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06KL (XL),
Вот-вот.
Про три строки я помнил и поэтому и добавил две переменных, а понадобилась одна.
Но не могу сообразить, как одной строкой определить динамический диапазон столбцов в которых находятся поля сводной таблицы.

Такой вариант (не тестированный):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub fillCells()
    Dim lngLastRow As Long, lngLastCol As Long, i As Long, j As Long
    Application.ScreenUpdating = False
    
    With ActiveSheet
        Set Rng = .Range(.Cells( 1 ,  1 ), _
            .Cells(.Cells(.Rows.Count,  1 ).End(xlUp).Row, _
            .Cells( 1 , .Columns.Count).End(xlToLeft).Column))
    End With
    
    With Rng
        lngLastRow = .Rows.Count: lngLastCol = .Columns.Count
        For j =  1  To lngLastCol
            On Error Resume Next
            For i = .Cells( 1 , j).End(xlDown).Row To lngLastRow Step  16000 
                .Cells(i, j).Resize( 16000 ).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
            Next i
        Next j
        .Value = .Value
    End With
    
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36053602
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL), протестил.
У меня получается что переменная lngLastCol всегда равна единице.
Если честно, то пока не разобрался как работает этот скрипт
...
Рейтинг: 0 / 0
заполнение пустых ячеек значением сверху
    #36054487
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06,

Если не ошибаюсь, автор работает с динамической таблицей или тем, что от нее осталось. Это наверняка означает, что у столбцов есть заголовки. Судя по использованию проперти CurrentRegion автором в приведенном им примере в начале темы, так оно и есть. Далее все просто: исходя из того, что левый верхний угол таблицы расположен в ячейке [A1], находим последнюю непустую ячейку в столбце [A] и последнюю непустую ячейку в строке [1] :-)
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / заполнение пустых ячеек значением сверху
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]