Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2009, 02:23   #1
ing60
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию Заполнить пустые ячейки ниже значениями из непустой ячейки

Здравствуйте! Подскажите, как заполнить пустые ячейки ниже, значениями из непустой ячейки, находящейся выше (в столбце несколько тысяч разных значений). В одной ячейке значение (текстовое), ниже - несколько пустых ячеек, в которые надо вставить это значение и т.д.
ing60 вне форума Ответить с цитированием
Старый 01.04.2009, 02:58   #2
IFRSoff
Форумчанин
 
Аватар для IFRSoff
 
Регистрация: 23.02.2009
Сообщений: 306
По умолчанию

Дайте файл с примером. Тогда быстро получите грамотный ответ на свой вопрос.
Лень - двигатель прогресса!
IFRSoff вне форума Ответить с цитированием
Старый 01.04.2009, 03:16   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В вложении в этом посте Вы найдёте подходящий макрос:

Код:
Sub ЗаполнитьПустыеЯчейки()
    Очистка
    On Error Resume Next: Application.ScreenUpdating = False
    Dim sh As Worksheet, HasValue As Boolean: Set sh = ActiveSheet
    Dim ra As Range, ro As Range, cell As Range: Set ra = Intersect(sh.UsedRange, sh.Range(ДиапазонДляЗаполнения), sh.[3:65000])
    For Each ro In ra.Rows
        HasValue = False
        For Each cell In ro.Cells
            If cell.Value <> "" Then
                HasValue = True: cell.Font.Bold = True
                If cell.Column = 1 Then ro.Interior.ColorIndex = 15
            Else
                If HasValue Then cell.Formula = "=1" Else cell.Formula = "=" & """" & cell.Offset(-1).Value & """"
                cell.Font.Color = IIf(Лист1.CheckBox1.Value, vbMagenta, vbWhite)
            End If
        Next cell
    Next ro
End Sub
Останется только немного его подредактировать...

Последний раз редактировалось EducatedFool; 01.04.2009 в 03:32.
EducatedFool вне форума Ответить с цитированием
Старый 01.04.2009, 03:41   #4
ing60
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию

Вложение, пример.
Вложения
Тип файла: rar Книга1.rar (1.7 Кб, 47 просмотров)
ing60 вне форума Ответить с цитированием
Старый 01.04.2009, 03:49   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот весь код:

Код:
Sub ЗаполнитьПустыеЯчейки()
    'Очистка
    On Error Resume Next: Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Offset(1).Cells
        If cell.Value = "" Then cell.Formula = "=" & """" & cell.Offset(-1).Value & """"
    Next cell
End Sub

Sub Очистка()
    On Error Resume Next: Application.ScreenUpdating = False
    ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).ClearContents
End Sub
Пример во вложении:
Вложения
Тип файла: rar ЗаполнениеПустыхЯчеек.rar (7.4 Кб, 110 просмотров)
EducatedFool вне форума Ответить с цитированием
Старый 01.04.2009, 04:02   #6
ing60
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию

Большое спасибо! Еще один попутный вопрос - если рядом есть еще столбцы со значениями и пустыми ячейками (по аналогии), будет ли такое же заполнение и в них? (в этих столбцах такое заполнение не нужно). Т.е. можно ли привязать макрос к нужному заполнению в определенном столбце, не изменяя значений в остальных?
ing60 вне форума Ответить с цитированием
Старый 01.04.2009, 04:11   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В таком варианте макрос будет обрабатывать только указанный диапазон:
Код:
Sub ЗаполнитьПустыеЯчейки()
    'Очистка
    On Error Resume Next: Application.ScreenUpdating = False
    For Each cell In [a2:a56].Cells
        If cell.Value = "" Then cell.Formula = "=" & """" & cell.Offset(-1).Value & """"
    Next cell
End Sub

Sub Очистка()
    On Error Resume Next: Application.ScreenUpdating = False
    [a2:a56].SpecialCells(xlCellTypeFormulas).ClearContents
End Sub
А если так - то только заполненные ячейки первого столбца:
Код:
Sub ЗаполнитьПустыеЯчейки()
    'Очистка
    On Error Resume Next: Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Columns(1).Offset(1).Cells
        If cell.Value = "" Then cell.Formula = "=" & """" & cell.Offset(-1).Value & """"
    Next cell
End Sub

Sub Очистка()
    On Error Resume Next: Application.ScreenUpdating = False
    ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeFormulas).ClearContents
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 01.04.2009, 04:20   #8
ing60
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию

Огромное спасибо за помощь! Всех благ. До свиданья.
ing60 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение книги Excel по названию ячейки и по пути ячейки IFRSoff Microsoft Office Excel 16 07.06.2012 16:58
пустые ячейки StasSv Microsoft Office Excel 5 22.12.2008 17:43
Как разделить число и текст в одной ячейки на две ячейки. neboskreb Microsoft Office Excel 2 15.04.2008 19:39