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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 12:17   #1
Warhead
Пользователь
 
Регистрация: 13.10.2009
Сообщений: 17
По умолчанию Автоматическое заполнение ячеек (VBA)

Нужно написать код, чтобы при открытии книги автоматически заполнялись ячейки с A1-A10 со значениями от 1-10.
Заранее спасибо за помощь!
Warhead вне форума Ответить с цитированием
Старый 14.03.2010, 12:30   #2
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

Private Sub Workbook_Open()
Dim i As Integer
Sheets(1).Cells(1, 1) = 1
For i = 2 To 10
Sheets(1).Cells(i, 1) = Sheets(1).Cells(i - 1, 1) + 1
Next i
End Sub
Dophin вне форума Ответить с цитированием
Старый 15.03.2010, 04:38   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Предлагаю другой вариант. Без цикла:
Код:
Private Sub Workbook_Open()
    [A1:A10] = "=Row()": [A1:A10] = [A1:A10].Value
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.03.2010, 06:04   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
Счастье Без понтов

Код:
Sub workbook_Open()
SendKeys "^{home}", True
SendKeys "{1}~{2}~{3}~{4}~{5}~{6}~{7}~{8}~{9}~{1}{0}~"
End Sub
срабатывает лишь находясь в папке ЭтаКнига. (Полчаса кумекал, чтоб это выяснить!)

Последний раз редактировалось Sasha_Smirnov; 15.03.2010 в 06:25. Причина: smile.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 15.03.2010, 09:00   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Полчаса кумекал, чтоб это выяснить!
А зачем? Какой плюс у предложенного Вами способа? А если нужно "пронумеровать" миллион строк?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.03.2010, 10:02   #6
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию Оптимизация

Я прошу прощенье что пост немного не в тему, просто раз пошло такое дело, может как-то можно оптимизировать следующий код:

Код:
For j = 1 To 2 'Диапазон столбцов
For i = 2 To ActiveSheet.UsedRange.Rows.Count 'Диапазон строк
If Cells(i + 1, j).Value = 0 Then Cells(i + 1, j) = Cells(i, j) 'Заполнение
Next
Next
код применяется для заполнения пустых ячеек таблицы полученной путём копирования сводной
Flangini вне форума Ответить с цитированием
Старый 15.03.2010, 10:57   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Оптимизация данного кода зависит от многих факторов. В общем виде, увеличить скорость выполнения Вашей процедуры можно, если работать не с ячейками листа, а с элементами массива. Например, так:
Код:
Sub Main()
    Dim i As Long, x As Range, a(): Application.ScreenUpdating = False
    Set x = Range([A2], Cells(ActiveSheet.UsedRange.Rows.Count, 2)): a = x.Value
    For j = 1 To 2 'Диапазон столбцов
        For i = 2 To UBound(a, 1) 'Диапазон строк
            If a(i, j) = 0 Then a(i, j) = a(i - 1, j) 'Заполнение
    Next: Next: x.Value = a
End Sub
Если нулевых ячеек в диапазоне мало, то можно и по-другому, например, перебирать не все ячейки, а только пустые.
Есть еще ряд зависимостей: считать ли 0 и пустую ячейку равнозначными?, нужно ли заполнять все пустые (нулевые) ячейки значениями предыдущих, если они идут подряд?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.03.2010, 11:12   #8
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Ноль это ноль, то есть независимое значение, пустая яцейка - это пустая ячейка. У меня в примере ошибка
Код:
If Cells(i + 1, j).Value = 0
до этого работал с текстом вот и поставил ноль, правельней было бы написать
Код:
If Cells(i + 1, j).Value is Empty
или
Код:
If Cells(i + 1, j).Value is Null
странно - выдаёт ошибку "424" (не знаю что она означает)
Цитата:
нужно ли заполнять все пустые (нулевые) ячейки значениями предыдущих, если они идут подряд?
для этого и писался данный код.
Flangini вне форума Ответить с цитированием
Старый 15.03.2010, 11:21   #9
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Flangini Посмотреть сообщение
странно - выдаёт ошибку "424" (не знаю что она означает)для этого и писался данный код.
Ничего странного - нет такой конструкции - Cells(i + 1, j).Value is Null.
Пишите так
Код:
If IsEmpty(Cells(i + 1, j).Value) Then
А лучше так
Код:
If Cells(i + 1, j).Value = "" Then
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 15.03.2010, 11:24   #10
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

спасибо, что подсказали. Я слабо опытен в VBA, по роду своей деятельности приходится учиться что говориться "на ходу".
Flangini вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое заполнение диапазона ячеек формулой. garry2000 Microsoft Office Excel 3 02.03.2010 14:19
Автоматическое заполнение ячеек разных листов одной книги tissot Microsoft Office Excel 2 26.01.2010 21:24
Автоматическое заполнение. Как? Vitaliy7 Microsoft Office Access 2 25.01.2010 12:29
Автоматическое заполнение строк Пришвин Microsoft Office Excel 32 21.09.2009 18:01
автоматическое заполнение данными ячеек в excel kasanad80 Microsoft Office Excel 7 17.07.2009 15:31