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

Вход

Регистрация

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

 

= Мир MS Excel/Оптимизация расчетов через макрос - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оптимизация расчетов через макрос (Макросы/Sub)
Оптимизация расчетов через макрос
Manner Дата: Пятница, 23.01.2015, 11:10 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, уважаемые форумчане!

Я полный валенок в написании макросов, помогите пожалуйста реализовать задачу. Во вложении пример. Есть исходные данные, состоящие из 5и столбцов (от А до Е). Возможна ли реализация макроса, результатом которого будет наличие справа от исходной таблицы кнопки с надписью "Расчет"?, при нажатии которой будут осуществляться действия с исходной таблицей, выделенные желтым цветом и вывод результатов подсчетов (то, что выделено зеленым). Данный файл с макросом необходим как шаблон, в который я буду подставлять разные исходные данные. Объем подставляемых данных будет постоянно различным, но не более 2000 строк
[moder]На изменение названия согласно Правилам форума Вам 30 минут (до 11:46). Иначе тему закрываю, а Вам замечание влепляю.
К сообщению приложен файл: 2657706.xls (35.5 Kb)
 
Ответить
СообщениеДобрый день, уважаемые форумчане!

Я полный валенок в написании макросов, помогите пожалуйста реализовать задачу. Во вложении пример. Есть исходные данные, состоящие из 5и столбцов (от А до Е). Возможна ли реализация макроса, результатом которого будет наличие справа от исходной таблицы кнопки с надписью "Расчет"?, при нажатии которой будут осуществляться действия с исходной таблицей, выделенные желтым цветом и вывод результатов подсчетов (то, что выделено зеленым). Данный файл с макросом необходим как шаблон, в который я буду подставлять разные исходные данные. Объем подставляемых данных будет постоянно различным, но не более 2000 строк
[moder]На изменение названия согласно Правилам форума Вам 30 минут (до 11:46). Иначе тему закрываю, а Вам замечание влепляю.

Автор - Manner
Дата добавления - 23.01.2015 в 11:10
Manner Дата: Пятница, 23.01.2015, 11:36 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_ сообщение Ваше видел, но не понимаю, что не так с названием темы и на какое его надо исправить?)

2.Очень ВАЖНО! При создании темы, давайте теме название, отражающее суть Вашей проблемы и указывайте предпочитаемый способ решения (формулы или макросы).

"Оптимизация расчетов" - это суть проблемы, "через макрос" - способ решения, что именно не так?

Если возможно, то конечно лучше через макрос. Просто это будет не индивидуальная таблица, а одно из составляющих одной большой формы по рассчету
 
Ответить
Сообщение_Boroda_ сообщение Ваше видел, но не понимаю, что не так с названием темы и на какое его надо исправить?)

2.Очень ВАЖНО! При создании темы, давайте теме название, отражающее суть Вашей проблемы и указывайте предпочитаемый способ решения (формулы или макросы).

"Оптимизация расчетов" - это суть проблемы, "через макрос" - способ решения, что именно не так?

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

Автор - Manner
Дата добавления - 23.01.2015 в 11:36
_Boroda_ Дата: Пятница, 23.01.2015, 11:49 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Очень ВАЖНО! При создании темы, давайте теме название, отражающее суть Вашей проблемы и указывайте предпочитаемый способ решения (формулы или макросы).

А следующее предложение прочитать уже не смогли, да?
Цитата
Создавать темы типа «ХЕЛП», «Условное форматирование», «Проблема с макросом», «ПОМОГИТЕ», «Не работает формула», «Как решить?» и подобные - НЕЛЬЗЯ!!! Такие темы будут закрываться или удаляться.

"Оптимизация расчетов" - это примерно то же самое. Хотя, если честно, я тут подумал-подумал, и действительно не придумал, как можно более информативно переназвать Вашу тему.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Очень ВАЖНО! При создании темы, давайте теме название, отражающее суть Вашей проблемы и указывайте предпочитаемый способ решения (формулы или макросы).

А следующее предложение прочитать уже не смогли, да?
Цитата
Создавать темы типа «ХЕЛП», «Условное форматирование», «Проблема с макросом», «ПОМОГИТЕ», «Не работает формула», «Как решить?» и подобные - НЕЛЬЗЯ!!! Такие темы будут закрываться или удаляться.

"Оптимизация расчетов" - это примерно то же самое. Хотя, если честно, я тут подумал-подумал, и действительно не придумал, как можно более информативно переназвать Вашу тему.

Автор - _Boroda_
Дата добавления - 23.01.2015 в 11:49
Rioran Дата: Пятница, 23.01.2015, 13:47 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
не придумал, как можно более информативно переназвать Вашу тему.

Полагаю, это значит что можно выкладывать решение? =)

Manner, здравствуйте. Предлагаю решение во вложении.

[vba]
Код
Option Explicit
Option Base 1

Sub Rio_Gains_Data()

'Author:    Roman "Rioran" Voronov
'Date:      the 23-rd of January, 2015
'Feedback:  voronov_rv@mail.ru

'Project which allows user to recieve numbers marked with green color of cells.
'Реализация алгоритма пользователя для получения чисел из зелёных ячеек.

Dim i As Long
Dim ArrA(), ArrB(), ArrC()
Dim StpC As Long, StpX As Long, Hght As Long

Dim Val1 As Double, ValA As Double
Dim Val2 As Double, ValB As Double
Dim Val3 As Double, ValC As Double
Dim Val4 As Double, ValD As Double

Hght = Cells(Cells.Rows.Count, 1).End(xlUp).Row
If Hght < 2 Then Exit Sub

ArrA = Range(Cells(2, 1), Cells(Hght, 5))
ReDim ArrB(Hght - 1, 5)
ReDim ArrC(1): StpC = 1

For StpX = 1 To Hght - 1
     ArrB(StpX, 1) = ArrA(StpX, 3) * ArrA(StpX, 4)
     ArrB(StpX, 2) = ArrA(StpX, 5) * ArrB(StpX, 1)
     ArrB(StpX, 3) = -(ArrB(StpX, 1) > 0) * ArrB(StpX, 1)
     ArrB(StpX, 4) = -(ArrB(StpX, 2) > 0) * ArrB(StpX, 2)
     ArrB(StpX, 5) = -(ArrA(StpX, 4) < 0) * ArrA(StpX, 3)
     If ArrB(StpX, 5) <> 0 Then
         For i = 1 To StpC
             If ArrB(StpX, 5) = ArrC(StpC) Then Exit For
             If i = StpC Then
                 StpC = StpC + 1
                 ReDim Preserve ArrC(StpC)
                 ArrC(StpC) = ArrB(StpX, 5)
                 Val3 = Val3 + 1
             End If
         Next i
     End If
Next StpX

With Application.WorksheetFunction
     Val1 = .Sum(.Index(ArrB, 0, 4, 1)) / .Sum(.Index(ArrB, 0, 3, 1))
     Val2 = .Max(.Index(ArrB, 0, 5, 1))
     Val4 = Val2 / Val3
     ValA = Val1
     ValB = Val4
     ValC = ValA + ValB
     ValD = ValA - ValB
End With

MsgBox "Значение 1:     " & Round(ValA, 4) & vbNewLine & _
        "Значение 2:     " & Round(ValB, 4) & vbNewLine & _
        "Значение 3:     " & Round(ValC, 4) & vbNewLine & _
        "Значение 4:     " & Round(ValD, 4)

End Sub
[/vba]
К сообщению приложен файл: Rio_Aggreg.xlsb (24.3 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение
не придумал, как можно более информативно переназвать Вашу тему.

Полагаю, это значит что можно выкладывать решение? =)

Manner, здравствуйте. Предлагаю решение во вложении.

[vba]
Код
Option Explicit
Option Base 1

Sub Rio_Gains_Data()

'Author:    Roman "Rioran" Voronov
'Date:      the 23-rd of January, 2015
'Feedback:  voronov_rv@mail.ru

'Project which allows user to recieve numbers marked with green color of cells.
'Реализация алгоритма пользователя для получения чисел из зелёных ячеек.

Dim i As Long
Dim ArrA(), ArrB(), ArrC()
Dim StpC As Long, StpX As Long, Hght As Long

Dim Val1 As Double, ValA As Double
Dim Val2 As Double, ValB As Double
Dim Val3 As Double, ValC As Double
Dim Val4 As Double, ValD As Double

Hght = Cells(Cells.Rows.Count, 1).End(xlUp).Row
If Hght < 2 Then Exit Sub

ArrA = Range(Cells(2, 1), Cells(Hght, 5))
ReDim ArrB(Hght - 1, 5)
ReDim ArrC(1): StpC = 1

For StpX = 1 To Hght - 1
     ArrB(StpX, 1) = ArrA(StpX, 3) * ArrA(StpX, 4)
     ArrB(StpX, 2) = ArrA(StpX, 5) * ArrB(StpX, 1)
     ArrB(StpX, 3) = -(ArrB(StpX, 1) > 0) * ArrB(StpX, 1)
     ArrB(StpX, 4) = -(ArrB(StpX, 2) > 0) * ArrB(StpX, 2)
     ArrB(StpX, 5) = -(ArrA(StpX, 4) < 0) * ArrA(StpX, 3)
     If ArrB(StpX, 5) <> 0 Then
         For i = 1 To StpC
             If ArrB(StpX, 5) = ArrC(StpC) Then Exit For
             If i = StpC Then
                 StpC = StpC + 1
                 ReDim Preserve ArrC(StpC)
                 ArrC(StpC) = ArrB(StpX, 5)
                 Val3 = Val3 + 1
             End If
         Next i
     End If
Next StpX

With Application.WorksheetFunction
     Val1 = .Sum(.Index(ArrB, 0, 4, 1)) / .Sum(.Index(ArrB, 0, 3, 1))
     Val2 = .Max(.Index(ArrB, 0, 5, 1))
     Val4 = Val2 / Val3
     ValA = Val1
     ValB = Val4
     ValC = ValA + ValB
     ValD = ValA - ValB
End With

MsgBox "Значение 1:     " & Round(ValA, 4) & vbNewLine & _
        "Значение 2:     " & Round(ValB, 4) & vbNewLine & _
        "Значение 3:     " & Round(ValC, 4) & vbNewLine & _
        "Значение 4:     " & Round(ValD, 4)

End Sub
[/vba]

Автор - Rioran
Дата добавления - 23.01.2015 в 13:47
koyaanisqatsi Дата: Пятница, 23.01.2015, 13:49 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, тоже удивлен что хотят макросом. Кажется что и формулами можно нормально справится.
 
Ответить
Сообщение_Boroda_, тоже удивлен что хотят макросом. Кажется что и формулами можно нормально справится.

Автор - koyaanisqatsi
Дата добавления - 23.01.2015 в 13:49
Manner Дата: Пятница, 23.01.2015, 14:30 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manner, здравствуйте. Предлагаю решение во вложении.


Rioran спасибо огромное, а возможно всю область желтого цвета убрать из таблицы, ну или спрятать? чтоб только кнопка "Обработать" осталась?
 
Ответить
Сообщение
Manner, здравствуйте. Предлагаю решение во вложении.


Rioran спасибо огромное, а возможно всю область желтого цвета убрать из таблицы, ну или спрятать? чтоб только кнопка "Обработать" осталась?

Автор - Manner
Дата добавления - 23.01.2015 в 14:30
_Boroda_ Дата: Пятница, 23.01.2015, 14:37 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Формулами.
При изменении количества строк само подхватывает новые.

Файл перевложил.
Спасибо Роману (см. пост ниже) - я перепутал знак в формуле
К сообщению приложен файл: 2657706_3.xls (33.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеФормулами.
При изменении количества строк само подхватывает новые.

Файл перевложил.
Спасибо Роману (см. пост ниже) - я перепутал знак в формуле

Автор - _Boroda_
Дата добавления - 23.01.2015 в 14:37
Rioran Дата: Пятница, 23.01.2015, 14:43 | Сообщение № 8
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Manner, да, убирайте. Моя кнопка работает только на базовых данных. Можете скопировать пустую ячейку (контрол + С), выделить диапазон и вставить (контрол + V).

UPD: Александр, классная реализация формулами. Только вместо G6 - G5 там надо G5 - G6 =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Пятница, 23.01.2015, 14:49
 
Ответить
СообщениеManner, да, убирайте. Моя кнопка работает только на базовых данных. Можете скопировать пустую ячейку (контрол + С), выделить диапазон и вставить (контрол + V).

UPD: Александр, классная реализация формулами. Только вместо G6 - G5 там надо G5 - G6 =)

Автор - Rioran
Дата добавления - 23.01.2015 в 14:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оптимизация расчетов через макрос (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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