Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Циклы с заранее неизвестным числом повторений - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Циклы с заранее неизвестным числом повторений (Макросы/Sub)
Циклы с заранее неизвестным числом повторений
Fartiboy Дата: Понедельник, 27.11.2017, 20:39 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Помогите пожалуйста с программой, два задания сделал, а с этим сижу уже вторую неделю.
индивидуальное задание:



Прикрепляю файл 33.xls, подскажите в чем ошибка, не хочет считать нижнюю строку по доходу.. правый столбец где "затраты.." еще не пробовал.
Код программы:
К сообщению приложен файл: 33.xls(40Kb)


Сообщение отредактировал Fartiboy - Понедельник, 27.11.2017, 20:41
 
Ответить
СообщениеПомогите пожалуйста с программой, два задания сделал, а с этим сижу уже вторую неделю.
индивидуальное задание:



Прикрепляю файл 33.xls, подскажите в чем ошибка, не хочет считать нижнюю строку по доходу.. правый столбец где "затраты.." еще не пробовал.
Код программы:

Автор - Fartiboy
Дата добавления - 27.11.2017 в 20:39
_Boroda_ Дата: Понедельник, 27.11.2017, 21:40 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11852
Репутация: 4911 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно? Дополнительные данные, как они там хотят, сами вставьте
С комментариями написал подробными понятно было чтобы
[vba]
Код
Sub tt()
    Application.ScreenUpdating = False 'откл обновление экрана
    r1_ = Range("A" & Rows.Count).End(xlUp).Row 'ищем последнюю строку (встали в самый низ столбца А и нажали Контрл СтрелкаВверх
    c1_ = Cells(2, Columns.Count).End(xlToLeft).Column 'ищем последний столбец (встали в правый столбец строки 2 и нажали Контрл СтрелкаВлево
    Cells(r1_, 1).Resize(1, c1_).Copy Cells(r1_ + 1, 1) 'скопировали последнюю строку вниз (так мы взяли оттуда форматы)
    Cells(3, 2).Resize(r1_ - 1, 1).Copy 'скопировали 2-й столбец с числами
    Cells(3, c1_ + 1).Resize(r1_ - 1, 1).PasteSpecial (xlPasteFormats) 'вставили форматы в столбец с1_+1
    Cells(r1_ + 1, 1) = "Доход ($) от производства продуктов за месяц" 'ввели название новой строки
    For i = 2 To c1_ 'цикл пл столбцам
        Cells(r1_ + 1, i) = Cells(r1_, i) * Cells(r1_ - 1, i) 'в каждом столбце в строке с1_+1 пишем знfчение из строк r1_*(r1_-1)
    Next i 'конец цикла
    Cells(1, 1).Resize(r1_ + 1).WrapText = True 'в столбце С делаем перенос текста по словам
    Columns(c1_ + 1).ColumnWidth = 22 'ширина нового столбца слева = 22
    Cells(1, 1).Resize(2, 1).Copy Cells(1, c1_ + 1) 'копируем А1:А1 в шапку нового столбца
    Cells(1, c1_ + 1) = "Затраты времени (чел-ч) за месяц" 'вводим название нового столбца
    For j = 3 To 5 'цикл по строкам 1-5
        z_ = 0 'переменная для суммы сейчас =0
        For ii = 2 To c1_ 'цикл по столбцам
            z_ = z_ + Cells(j, ii) * Cells(7, ii) 'переменная для суммы равна самой себе предыдущей плюс значение в строке 7 * значение в строке j
        Next ii 'конец цикла
        Cells(j, c1_ + 1) = z_ 'в новый верт. столбец пишем посчитанную сумму
    Next j 'конец цикла
    Cells(r1_ + 1, 2).Resize(1, c1_ - 1).Font.Bold = True 'жирные числа в последней строке
    Cells(3, c1_ + 1).Resize(r1_ - 1).Font.Bold = True 'жирные числа в последнем столбце
    Range("A1").Resize(r1_ + 1, c1_ + 1).VerticalAlignment = xlCenter 'выравнивание всей таблицы по вертикали по центру
    Range("A1").Resize(1, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру
    Range("A1").Select 'выделяем ячейку А2
    Application.ScreenUpdating = True 'включить обновление экрана
End Sub
[/vba]
К сообщению приложен файл: 33_1.xls(55Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно? Дополнительные данные, как они там хотят, сами вставьте
С комментариями написал подробными понятно было чтобы
[vba]
Код
Sub tt()
    Application.ScreenUpdating = False 'откл обновление экрана
    r1_ = Range("A" & Rows.Count).End(xlUp).Row 'ищем последнюю строку (встали в самый низ столбца А и нажали Контрл СтрелкаВверх
    c1_ = Cells(2, Columns.Count).End(xlToLeft).Column 'ищем последний столбец (встали в правый столбец строки 2 и нажали Контрл СтрелкаВлево
    Cells(r1_, 1).Resize(1, c1_).Copy Cells(r1_ + 1, 1) 'скопировали последнюю строку вниз (так мы взяли оттуда форматы)
    Cells(3, 2).Resize(r1_ - 1, 1).Copy 'скопировали 2-й столбец с числами
    Cells(3, c1_ + 1).Resize(r1_ - 1, 1).PasteSpecial (xlPasteFormats) 'вставили форматы в столбец с1_+1
    Cells(r1_ + 1, 1) = "Доход ($) от производства продуктов за месяц" 'ввели название новой строки
    For i = 2 To c1_ 'цикл пл столбцам
        Cells(r1_ + 1, i) = Cells(r1_, i) * Cells(r1_ - 1, i) 'в каждом столбце в строке с1_+1 пишем знfчение из строк r1_*(r1_-1)
    Next i 'конец цикла
    Cells(1, 1).Resize(r1_ + 1).WrapText = True 'в столбце С делаем перенос текста по словам
    Columns(c1_ + 1).ColumnWidth = 22 'ширина нового столбца слева = 22
    Cells(1, 1).Resize(2, 1).Copy Cells(1, c1_ + 1) 'копируем А1:А1 в шапку нового столбца
    Cells(1, c1_ + 1) = "Затраты времени (чел-ч) за месяц" 'вводим название нового столбца
    For j = 3 To 5 'цикл по строкам 1-5
        z_ = 0 'переменная для суммы сейчас =0
        For ii = 2 To c1_ 'цикл по столбцам
            z_ = z_ + Cells(j, ii) * Cells(7, ii) 'переменная для суммы равна самой себе предыдущей плюс значение в строке 7 * значение в строке j
        Next ii 'конец цикла
        Cells(j, c1_ + 1) = z_ 'в новый верт. столбец пишем посчитанную сумму
    Next j 'конец цикла
    Cells(r1_ + 1, 2).Resize(1, c1_ - 1).Font.Bold = True 'жирные числа в последней строке
    Cells(3, c1_ + 1).Resize(r1_ - 1).Font.Bold = True 'жирные числа в последнем столбце
    Range("A1").Resize(r1_ + 1, c1_ + 1).VerticalAlignment = xlCenter 'выравнивание всей таблицы по вертикали по центру
    Range("A1").Resize(1, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру
    Range("A1").Select 'выделяем ячейку А2
    Application.ScreenUpdating = True 'включить обновление экрана
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 27.11.2017 в 21:40
Fartiboy Дата: Понедельник, 27.11.2017, 23:07 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Так нужно? Дополнительные данные, как они там хотят, сами вставьте
С комментариями написал подробными понятно было чтобы


Да, благодарю. Работает, но почему он при выполнении макроса меняет верхнюю строчку, как на скрине?
По коду еще не вник, у вас немного по другому все

Все, нашел в чем ошибка. если ячейки б1 и с1 не объединять - то все нормально получается. Спасибо еще раз.
К сообщению приложен файл: 2063073.png(41Kb)


Сообщение отредактировал Fartiboy - Понедельник, 27.11.2017, 23:18
 
Ответить
Сообщение
Так нужно? Дополнительные данные, как они там хотят, сами вставьте
С комментариями написал подробными понятно было чтобы


Да, благодарю. Работает, но почему он при выполнении макроса меняет верхнюю строчку, как на скрине?
По коду еще не вник, у вас немного по другому все

Все, нашел в чем ошибка. если ячейки б1 и с1 не объединять - то все нормально получается. Спасибо еще раз.

Автор - Fartiboy
Дата добавления - 27.11.2017 в 23:07
_Boroda_ Дата: Понедельник, 27.11.2017, 23:27 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11852
Репутация: 4911 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Четвертую снизу строку перепишите вот так
[vba]
Код
Range("A1").Resize(2, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру
[/vba]
К сообщению приложен файл: 6276118.xls(43Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЧетвертую снизу строку перепишите вот так
[vba]
Код
Range("A1").Resize(2, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру
[/vba]

Автор - _Boroda_
Дата добавления - 27.11.2017 в 23:27
Fartiboy Дата: Понедельник, 27.11.2017, 23:58 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Четвертую снизу строку перепишите вот так
Range("A1").Resize(2, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру


спасибо, теперь вообще идеально.
 
Ответить
Сообщение
Четвертую снизу строку перепишите вот так
Range("A1").Resize(2, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру


спасибо, теперь вообще идеально.

Автор - Fartiboy
Дата добавления - 27.11.2017 в 23:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Циклы с заранее неизвестным числом повторений (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!