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

Вход

Регистрация

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

 

= Мир MS Excel/Перебор строк по условию с помощью цикла (макрос) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Перебор строк по условию с помощью цикла (макрос)
Перебор строк по условию с помощью цикла (макрос)
koshelevdmitry Дата: Четверг, 17.01.2013, 14:48 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Добрый день! На работе попросили переделать Excel файл (Более 20 000 строк).
Необходимо перебрать даты, чтобы получилось как в примере во вложении.

Суть задачи:
Есть клиенты с датой подключения к услуге и датой отключения от услуги. Необходимо сравнивая эти даты копировать строки ниже просматриваемой строки, либо переходить к следующей.

Возьмем 2 даты:
01.01.2012 - 25.04.2012

Необходимо получить:

01.01.2012 - "-"
01.02.2012 - "-"
01.03.2012 - "-"
01.04.2012 - 25.04.2012

Условие для перехода:

Если ДатаКонец="-", тогда ДатаРезультат = "-" и переход к след. строчке. Иначе выполняем условие:

ДатаРезультат = "-" и

Если ДатаНачала<ДатаКонец, тогда необходимо добавить строку ниже и скопировать все содержимое строки изменив в ДатаНачало = Добавить 1 месяц к ДатеНачало.

Как только дата датаНачало>ДатыКонец, переход к след строке и все по новой.

Очень надеюсь на вашу помощь!!! А, то вручную это не реально сделать((( А с VBA вообще не знаю как работать.
К сообщению приложен файл: ___.xls (29.0 Kb)


Сообщение отредактировал koshelevdmitry - Четверг, 17.01.2013, 14:49
 
Ответить
СообщениеДобрый день! На работе попросили переделать Excel файл (Более 20 000 строк).
Необходимо перебрать даты, чтобы получилось как в примере во вложении.

Суть задачи:
Есть клиенты с датой подключения к услуге и датой отключения от услуги. Необходимо сравнивая эти даты копировать строки ниже просматриваемой строки, либо переходить к следующей.

Возьмем 2 даты:
01.01.2012 - 25.04.2012

Необходимо получить:

01.01.2012 - "-"
01.02.2012 - "-"
01.03.2012 - "-"
01.04.2012 - 25.04.2012

Условие для перехода:

Если ДатаКонец="-", тогда ДатаРезультат = "-" и переход к след. строчке. Иначе выполняем условие:

ДатаРезультат = "-" и

Если ДатаНачала<ДатаКонец, тогда необходимо добавить строку ниже и скопировать все содержимое строки изменив в ДатаНачало = Добавить 1 месяц к ДатеНачало.

Как только дата датаНачало>ДатыКонец, переход к след строке и все по новой.

Очень надеюсь на вашу помощь!!! А, то вручную это не реально сделать((( А с VBA вообще не знаю как работать.

Автор - koshelevdmitry
Дата добавления - 17.01.2013 в 14:48
nerv Дата: Четверг, 17.01.2013, 15:25 | Сообщение № 2
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

очень похоже на тему для раздела работа


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщениеочень похоже на тему для раздела работа

Автор - nerv
Дата добавления - 17.01.2013 в 15:25
koshelevdmitry Дата: Четверг, 17.01.2013, 15:40 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Я прошу о помощи, а не хочу нанимать людей.
Сейчас пытаюсь сам разобраться с макросами. Но увы я не ахти какой программер. Поэтому и пишу сюда...
 
Ответить
СообщениеЯ прошу о помощи, а не хочу нанимать людей.
Сейчас пытаюсь сам разобраться с макросами. Но увы я не ахти какой программер. Поэтому и пишу сюда...

Автор - koshelevdmitry
Дата добавления - 17.01.2013 в 15:40
nerv Дата: Четверг, 17.01.2013, 16:19 | Сообщение № 4
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (koshelevdmitry)
Я прошу о помощи, а не хочу нанимать людей.

Вы просите сделать за Вас работу (на мой взгляд)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (koshelevdmitry)
Я прошу о помощи, а не хочу нанимать людей.

Вы просите сделать за Вас работу (на мой взгляд)

Автор - nerv
Дата добавления - 17.01.2013 в 16:19
AlexM Дата: Четверг, 17.01.2013, 19:20 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4448
Репутация: 1094 ±
Замечаний: 0% ±

Excel 2003
Код макроса
[vba]
Код
Sub Macros()
Application.ScreenUpdating = False
iRow = 2
While Range("A" & iRow) <> ""
      If Range("F" & iRow) = "-" Then Range("G" & iRow) = "-"
      If Range("F" & iRow) <> "-" Then
          While Range("F" & iRow) - DateSerial(Year(Range("E" & iRow)), Month(Range("E" & iRow)) + 1, Day(Range("E" & iRow))) > 0
              Rows(iRow).Copy: Rows(iRow + 1).Insert Shift:=xlDown: Application.CutCopyMode = False
              Range("G" & iRow) = "-"
              Range("E" & iRow + 1) = DateSerial(Year(Range("E" & iRow)), Month(Range("E" & iRow)) + 1, Day(Range("E" & iRow)))
              Range("A" & iRow) = iRow - 1
              Range("A" & iRow + 1) = iRow
              iRow = iRow + 1
          Wend
          Range("G" & iRow) = Range("F" & iRow)
      End If
Range("A" & iRow) = iRow - 1
iRow = iRow + 1
Wend
Application.ScreenUpdating = True
End Sub
[/vba]
См. файл.

PS. Оптимизацией кода заниматься некогда, сегодня погода и лыжня классная. smile
К сообщению приложен файл: koshelevdmitry.xls (45.0 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Четверг, 17.01.2013, 19:42
 
Ответить
СообщениеКод макроса
[vba]
Код
Sub Macros()
Application.ScreenUpdating = False
iRow = 2
While Range("A" & iRow) <> ""
      If Range("F" & iRow) = "-" Then Range("G" & iRow) = "-"
      If Range("F" & iRow) <> "-" Then
          While Range("F" & iRow) - DateSerial(Year(Range("E" & iRow)), Month(Range("E" & iRow)) + 1, Day(Range("E" & iRow))) > 0
              Rows(iRow).Copy: Rows(iRow + 1).Insert Shift:=xlDown: Application.CutCopyMode = False
              Range("G" & iRow) = "-"
              Range("E" & iRow + 1) = DateSerial(Year(Range("E" & iRow)), Month(Range("E" & iRow)) + 1, Day(Range("E" & iRow)))
              Range("A" & iRow) = iRow - 1
              Range("A" & iRow + 1) = iRow
              iRow = iRow + 1
          Wend
          Range("G" & iRow) = Range("F" & iRow)
      End If
Range("A" & iRow) = iRow - 1
iRow = iRow + 1
Wend
Application.ScreenUpdating = True
End Sub
[/vba]
См. файл.

PS. Оптимизацией кода заниматься некогда, сегодня погода и лыжня классная. smile

Автор - AlexM
Дата добавления - 17.01.2013 в 19:20
nimr Дата: Воскресенье, 11.02.2018, 18:44 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
AlexM, Здравствуйте. AlexM, Разбираю (я взрослый неофит 100%. вчера зарегистрировался) ваш код по частям, так как столкнулся (по работе\учёбе) с более-менее похожей задачей. Мне подходит, короче.
Несложно ли вам будет ответить на вопрос о втором цикле - как можно неравенство написать так, что типы разные, и чтоб всё это ещё и работало?
Почему спрашиваю. Ежемесячно получаю файл Excel. Страшно взглянуть. Дизайн я подправил встроенным VB (сделал в макросе). А теперь есть необходимость сделать цикл чтения ячеек (первая дата всегда в определённой ячейке) в столбце дат, который прерывается при нахождении другой (следующей, большей) даты, чтобы передать управление процедуре суммирования цифр в соседнем столбце (идущие параллельно - напротив дат, которые цикл уже исследовал). И так далее, до конца столбца.
Такая проблема. Мне не нужно, чтобы вы за меня всё сделали, как koshelevdmitry в Четверг, 17.01.2013, 19:20. (так круто, так изящно, так кратко! чисто ассемблерный от Нортона - как "по железу" почти блин! ни дать , ни взять... без лести и сарказма говорю... пусть все знают). Дайте направление. Справлюсь. Попробую справиться. Пожалуйста. Научите HOW. А то я даже не знаю как номер ячейке присвоить - вручную пишу.
И ещё. Перед завершением\в начале кода строка (скринАпдейтин тру и фэлс) - почему? (транслитерирую, чтобы админ не ругался)
Файл не прикрепил(ся)
К сообщению приложен файл: 7304206.xls (20.0 Kb)


Сообщение отредактировал nimr - Воскресенье, 11.02.2018, 18:47
 
Ответить
СообщениеAlexM, Здравствуйте. AlexM, Разбираю (я взрослый неофит 100%. вчера зарегистрировался) ваш код по частям, так как столкнулся (по работе\учёбе) с более-менее похожей задачей. Мне подходит, короче.
Несложно ли вам будет ответить на вопрос о втором цикле - как можно неравенство написать так, что типы разные, и чтоб всё это ещё и работало?
Почему спрашиваю. Ежемесячно получаю файл Excel. Страшно взглянуть. Дизайн я подправил встроенным VB (сделал в макросе). А теперь есть необходимость сделать цикл чтения ячеек (первая дата всегда в определённой ячейке) в столбце дат, который прерывается при нахождении другой (следующей, большей) даты, чтобы передать управление процедуре суммирования цифр в соседнем столбце (идущие параллельно - напротив дат, которые цикл уже исследовал). И так далее, до конца столбца.
Такая проблема. Мне не нужно, чтобы вы за меня всё сделали, как koshelevdmitry в Четверг, 17.01.2013, 19:20. (так круто, так изящно, так кратко! чисто ассемблерный от Нортона - как "по железу" почти блин! ни дать , ни взять... без лести и сарказма говорю... пусть все знают). Дайте направление. Справлюсь. Попробую справиться. Пожалуйста. Научите HOW. А то я даже не знаю как номер ячейке присвоить - вручную пишу.
И ещё. Перед завершением\в начале кода строка (скринАпдейтин тру и фэлс) - почему? (транслитерирую, чтобы админ не ругался)
Файл не прикрепил(ся)

Автор - nimr
Дата добавления - 11.02.2018 в 18:44
Pelena Дата: Воскресенье, 11.02.2018, 18:51 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19162
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
nimr, прочитайте Правила форума, создайте свою тему, приложите небольшой файл с примером и Вам обязательно помогут. Ссылку на эту тему можете тоже дать


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеnimr, прочитайте Правила форума, создайте свою тему, приложите небольшой файл с примером и Вам обязательно помогут. Ссылку на эту тему можете тоже дать

Автор - Pelena
Дата добавления - 11.02.2018 в 18:51
nimr Дата: Воскресенье, 11.02.2018, 18:59 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena, Прочитал. Сделаю по правилам. Спасибо.
upd 20:04 Почитал темы. Пока не нашёл. Отдохну немного и создам новую тему. Ещё раз спасибо.


Сообщение отредактировал nimr - Воскресенье, 11.02.2018, 20:05
 
Ответить
СообщениеPelena, Прочитал. Сделаю по правилам. Спасибо.
upd 20:04 Почитал темы. Пока не нашёл. Отдохну немного и создам новую тему. Ещё раз спасибо.

Автор - nimr
Дата добавления - 11.02.2018 в 18:59
nimr Дата: Понедельник, 12.02.2018, 22:11 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena, c решением помог sboy. Надо ли объявлять каким-то образом о закрытии темы?
[moder]Не надо[/moder]


Сообщение отредактировал Pelena - Вторник, 13.02.2018, 08:34
 
Ответить
СообщениеPelena, c решением помог sboy. Надо ли объявлять каким-то образом о закрытии темы?
[moder]Не надо[/moder]

Автор - nimr
Дата добавления - 12.02.2018 в 22:11
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Перебор строк по условию с помощью цикла (макрос)
  • Страница 1 из 1
  • 1
Поиск:

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