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

Вход

Регистрация

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

 

= Мир MS Excel/добавить строку если нарастающая доля не составляет 100 проц - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » добавить строку если нарастающая доля не составляет 100 проц (Макросы/Sub)
добавить строку если нарастающая доля не составляет 100 проц
АЛЕКСАНДР1986 Дата: Пятница, 26.08.2016, 17:27 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
всем добрый вечер!
нужно чтобы макрос перед каждой строкой где встречается слово "Итог" добавлял пустую строку но это все нужно проделывать если разница положительная между абсолютными значениями в столбце M где написано слово Итог и предыдущими аналогичными значениями без слова Итог! если разница отрицательная то добавлять строки не нужно!

в итоге нужно чтобы он брал строку с уникальным кодом где написано "Итог" и вычитал из этой строки все предыдущие аналогичные строки где нету слова "Итог"
то что должно получиться представлено в таблице справа с подсвеченными красными ячейками!
К сообщению приложен файл: 5302672.xlsx(11Kb)


Сообщение отредактировал АЛЕКСАНДР1986 - Пятница, 26.08.2016, 17:38
 
Ответить
Сообщениевсем добрый вечер!
нужно чтобы макрос перед каждой строкой где встречается слово "Итог" добавлял пустую строку но это все нужно проделывать если разница положительная между абсолютными значениями в столбце M где написано слово Итог и предыдущими аналогичными значениями без слова Итог! если разница отрицательная то добавлять строки не нужно!

в итоге нужно чтобы он брал строку с уникальным кодом где написано "Итог" и вычитал из этой строки все предыдущие аналогичные строки где нету слова "Итог"
то что должно получиться представлено в таблице справа с подсвеченными красными ячейками!

Автор - АЛЕКСАНДР1986
Дата добавления - 26.08.2016 в 17:27
АЛЕКСАНДР1986 Дата: Пятница, 26.08.2016, 17:37 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
извиняюсь я немножко подправил условие! если кто-то успел прочитать!
 
Ответить
Сообщениеизвиняюсь я немножко подправил условие! если кто-то успел прочитать!

Автор - АЛЕКСАНДР1986
Дата добавления - 26.08.2016 в 17:37
Gustav Дата: Пятница, 26.08.2016, 17:41 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1211
Репутация: 484 ±
Замечаний: 0% ±

начинал с Excel 4.0...
(ну уж извините! - корпел, писал в ТУ тему, а она уже закрыта - поэтому постю здесь - мне не совсем наплевать на собственные усилия :) )

Можно ручками добавить. Алгоритм (не думаю, что для всех он очевиден):

1. Выделяем столбец B, содержащий ячейки со словом "Итог" (или нужную часть столбца - диапазон B4:B12).
2. Ctrl+F \ Найти: Итог \ Найти все \ Ctrl+A (выделить все) \ Закрыть.
3. Ctrl+"плюс" (на правой цифровой клавиатуре) \ Добавление ячеек \ Добавить: (*) строку \ OK
На данный момент имеем: перед ячейками с "Итог" вставились пустые строки.

4. В ячейку D7 вводим строку: ИНЫЕ органы
5. В ячейку B7 вводим формулу: =B6
6. Выделяем диапазон B7:G7 и копируем его.
7. Выделяем в столбце B рабочий диапазон - он после вставок строк выглядит как B4:B15.
8. Ctrl+G \ Выделить \ (*) пустые ячейки \ OK \ Enter (вставляем скопированное ранее)
Имеем: ТО, ЧТО НУЖНО!

Но если надо, то можно еще навести окончательный марафет, избавившись от формул в столбце B:
9. Выделяем в столбце B рабочий диапазон B4:B15.
10. Ctrl+C \ Shift+F10 \ Специальная вставка \ Вставить: (*) значения \ OK.

P.S. Фраза "ТО, ЧТО НУЖНО!" - разумеется, относится к "ТОЙ теме". За Вами не успеть!


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Пятница, 26.08.2016, 17:47
 
Ответить
Сообщение(ну уж извините! - корпел, писал в ТУ тему, а она уже закрыта - поэтому постю здесь - мне не совсем наплевать на собственные усилия :) )

Можно ручками добавить. Алгоритм (не думаю, что для всех он очевиден):

1. Выделяем столбец B, содержащий ячейки со словом "Итог" (или нужную часть столбца - диапазон B4:B12).
2. Ctrl+F \ Найти: Итог \ Найти все \ Ctrl+A (выделить все) \ Закрыть.
3. Ctrl+"плюс" (на правой цифровой клавиатуре) \ Добавление ячеек \ Добавить: (*) строку \ OK
На данный момент имеем: перед ячейками с "Итог" вставились пустые строки.

4. В ячейку D7 вводим строку: ИНЫЕ органы
5. В ячейку B7 вводим формулу: =B6
6. Выделяем диапазон B7:G7 и копируем его.
7. Выделяем в столбце B рабочий диапазон - он после вставок строк выглядит как B4:B15.
8. Ctrl+G \ Выделить \ (*) пустые ячейки \ OK \ Enter (вставляем скопированное ранее)
Имеем: ТО, ЧТО НУЖНО!

Но если надо, то можно еще навести окончательный марафет, избавившись от формул в столбце B:
9. Выделяем в столбце B рабочий диапазон B4:B15.
10. Ctrl+C \ Shift+F10 \ Специальная вставка \ Вставить: (*) значения \ OK.

P.S. Фраза "ТО, ЧТО НУЖНО!" - разумеется, относится к "ТОЙ теме". За Вами не успеть!

Автор - Gustav
Дата добавления - 26.08.2016 в 17:41
Pelena Дата: Пятница, 26.08.2016, 19:02 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9867
Репутация: 2262 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
[offtop]Константин, Вам опять не повезло, звиняйте :) [/offtop]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение[offtop]Константин, Вам опять не повезло, звиняйте :) [/offtop]

Автор - Pelena
Дата добавления - 26.08.2016 в 19:02
Gustav Дата: Пятница, 26.08.2016, 19:40 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1211
Репутация: 484 ±
Замечаний: 0% ±

начинал с Excel 4.0...
ДОБАВЛЕННЫЕ ШАГИ к моему ручному алгоритму выше - в связи с изменившейся первоначальной постановкой задачи.

Шаг 0. Предварительный - нормализация цифр! Я чуть с ума не сошёл, ну и примерчик представили :( В общем, там видно всё, если попытаться выполнить обычное суммирование по столбцам E:G - ничего не получится. Цифры надо реанимировать. Для этого ввести в какую-нибудь ячейку сбоку число 1, выполнить копирование этой ячейки и вставить в диапазон E4:G12 специальной вставкой с опциями "значения" и "умножить" - числа оживут.

Шаги между 5 и 6 (предполагается, что шаги 1-5 уже выполнены к этому моменту).

5.1. Вставляем в ячейку E7 формулу МАССИВА:
Код
=E8-СУММ(СМЕЩ(E7;МАКС(СТРОКА($B$4:$B7)*(1-ЕОШ(ПОИСК("Итог";$B$4:$B7))))-СТРОКА(E7)+1;0;-(МАКС(СТРОКА($B$4:$B7)*(1-ЕОШ(ПОИСК("Итог";$B$4:$B7))))-СТРОКА(E7)+1);1))
Завершаем ввод комбинацией Ctrl+Shift+Enter. Должно получиться значение 189.

5.2. Копируем ячейку E7 в ячейку F7. Должно получиться значение 0,988 (если это не так, то сменить формат ячейки на Общий)

Далее по алгоритму, начиная с шага 6.

ВАЖНО: Чтобы формулы в ячейках E7 и F7 суммировали правильно, ячейки диапазона E1:F3 (над таблицей) должны быть пустыми.


Мой tip box - яд 41001663842605
 
Ответить
СообщениеДОБАВЛЕННЫЕ ШАГИ к моему ручному алгоритму выше - в связи с изменившейся первоначальной постановкой задачи.

Шаг 0. Предварительный - нормализация цифр! Я чуть с ума не сошёл, ну и примерчик представили :( В общем, там видно всё, если попытаться выполнить обычное суммирование по столбцам E:G - ничего не получится. Цифры надо реанимировать. Для этого ввести в какую-нибудь ячейку сбоку число 1, выполнить копирование этой ячейки и вставить в диапазон E4:G12 специальной вставкой с опциями "значения" и "умножить" - числа оживут.

Шаги между 5 и 6 (предполагается, что шаги 1-5 уже выполнены к этому моменту).

5.1. Вставляем в ячейку E7 формулу МАССИВА:
Код
=E8-СУММ(СМЕЩ(E7;МАКС(СТРОКА($B$4:$B7)*(1-ЕОШ(ПОИСК("Итог";$B$4:$B7))))-СТРОКА(E7)+1;0;-(МАКС(СТРОКА($B$4:$B7)*(1-ЕОШ(ПОИСК("Итог";$B$4:$B7))))-СТРОКА(E7)+1);1))
Завершаем ввод комбинацией Ctrl+Shift+Enter. Должно получиться значение 189.

5.2. Копируем ячейку E7 в ячейку F7. Должно получиться значение 0,988 (если это не так, то сменить формат ячейки на Общий)

Далее по алгоритму, начиная с шага 6.

ВАЖНО: Чтобы формулы в ячейках E7 и F7 суммировали правильно, ячейки диапазона E1:F3 (над таблицей) должны быть пустыми.

Автор - Gustav
Дата добавления - 26.08.2016 в 19:40
Roman777 Дата: Пятница, 26.08.2016, 22:38 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 703
Репутация: 75 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
АЛЕКСАНДР1986, Если правильно всё понял, то можно так макросом:
[vba]
Код
Sub d2()
Dim i&, k&, s1#, s2#, n&
n = 4
For i = Cells(Rows.Count, 2).End(xlUp).Row To n Step -1
   If InStr(1, Cells(i, 2), "Итог") > 0 Then
       k = i
       Do
       k = k - 1
       s1 = s1 + Cells(k, 5)
       s2 = s2 + Cells(k, 6)
       Loop While InStr(1, Cells(k - 1, 2), "Итог") = 0 And k >= n
       If Cells(i, 5) - s1 > 0 Or Cells(i, 6) - s2 > 0 Then
           Rows(i).Insert
           Cells(i - 1, 2).Copy Cells(i, 2)
           Cells(i, 4) = "ИНЫЕ органы"
           Cells(i, 5) = Cells(i + 1, 5) - s1
           Cells(i, 6) = Cells(i + 1, 6) - s2
           Cells(i, 2).Resize(, 6).Interior.Color = 12379352 ' зелёный
           Cells(i, 5).Resize(, 2).Interior.Color = 255 ' красный
           s1 = 0
           s2 = 0
       End If
   End If
Next i
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Пятница, 26.08.2016, 22:40
 
Ответить
СообщениеАЛЕКСАНДР1986, Если правильно всё понял, то можно так макросом:
[vba]
Код
Sub d2()
Dim i&, k&, s1#, s2#, n&
n = 4
For i = Cells(Rows.Count, 2).End(xlUp).Row To n Step -1
   If InStr(1, Cells(i, 2), "Итог") > 0 Then
       k = i
       Do
       k = k - 1
       s1 = s1 + Cells(k, 5)
       s2 = s2 + Cells(k, 6)
       Loop While InStr(1, Cells(k - 1, 2), "Итог") = 0 And k >= n
       If Cells(i, 5) - s1 > 0 Or Cells(i, 6) - s2 > 0 Then
           Rows(i).Insert
           Cells(i - 1, 2).Copy Cells(i, 2)
           Cells(i, 4) = "ИНЫЕ органы"
           Cells(i, 5) = Cells(i + 1, 5) - s1
           Cells(i, 6) = Cells(i + 1, 6) - s2
           Cells(i, 2).Resize(, 6).Interior.Color = 12379352 ' зелёный
           Cells(i, 5).Resize(, 2).Interior.Color = 255 ' красный
           s1 = 0
           s2 = 0
       End If
   End If
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 26.08.2016 в 22:38
АЛЕКСАНДР1986 Дата: Понедельник, 29.08.2016, 09:03 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
ага спасибо!
 
Ответить
Сообщениеага спасибо!

Автор - АЛЕКСАНДР1986
Дата добавления - 29.08.2016 в 09:03
Мир MS Excel » Вопросы и решения » Вопросы по VBA » добавить строку если нарастающая доля не составляет 100 проц (Макросы/Sub)
Страница 1 из 11
Поиск:

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