Вообщем, имеется отчет (скрин приложу). В колонки Январь (5,6), Февраль(7,8), Март (5,6) данные вводятся вручную. Хотелось бы, чтобы "1 квартал" формировался сам, то есть чтобы автоматически данные соответственно переносились с января, февраля, марта в соответствующие колонки в "1 квартал". Затем вручную я заполняю Апрель, Май, Июнь. Потом идет "1 полугодие", которое, заполнялось бы тоже автоматически, то есть брались бы данные с первого квартала и заполнялись бы далее с Апреля, Мая, Июня. Затем, опять вручную Июль, Август, Сентябрь. Снова бы хотелось автоматического заполнения "9 месяцев" - данные бы брались из 1 полугодия и добирались с Июля, Августа, Сентября. Октябрь, ноября, Декабрь - вручную, а "Год" - автоматически, т.е. копировались бы "9 месяцев" и добирались бы данные с Октября, Ноября, Декабря. В отчете более 1500 строчек. Количество столбцов не меняются. Строчки добавляются в конец раздела. Разделов очень много. Заранее спасибо за помощь. http://imageshack.us/photo/my-images/12/2222df.jpg/
Вообщем, имеется отчет (скрин приложу). В колонки Январь (5,6), Февраль(7,8), Март (5,6) данные вводятся вручную. Хотелось бы, чтобы "1 квартал" формировался сам, то есть чтобы автоматически данные соответственно переносились с января, февраля, марта в соответствующие колонки в "1 квартал". Затем вручную я заполняю Апрель, Май, Июнь. Потом идет "1 полугодие", которое, заполнялось бы тоже автоматически, то есть брались бы данные с первого квартала и заполнялись бы далее с Апреля, Мая, Июня. Затем, опять вручную Июль, Август, Сентябрь. Снова бы хотелось автоматического заполнения "9 месяцев" - данные бы брались из 1 полугодия и добирались с Июля, Августа, Сентября. Октябрь, ноября, Декабрь - вручную, а "Год" - автоматически, т.е. копировались бы "9 месяцев" и добирались бы данные с Октября, Ноября, Декабря. В отчете более 1500 строчек. Количество столбцов не меняются. Строчки добавляются в конец раздела. Разделов очень много. Заранее спасибо за помощь. http://imageshack.us/photo/my-images/12/2222df.jpg/Leojse
Private Sub Worksheet_Change(ByVal Target As Range) Dim rRg As Range, rCell As Range Dim lLr: lLr = 200 ' глубина строк
Set rRg = Intersect(Target, Range("E1:AH" & lLr)) If Not rRg Is Nothing Then For Each rCell In rRg Select Case rCell.Column ' номер столбика Case 5, 7, 9 Cells(rCell.Row, 11) = rCell.Value Cells(rCell.Row, 19) = rCell.Value Cells(rCell.Row, 27) = rCell.Value Cells(rCell.Row, 35) = rCell.Value
С помощью этого макроса разносятся январь, февраль, март как положено на квартал, полугодие, 9 месяцев и год. Далее иду к следующим месяцам (апрель, май, июнь): [vba]
[/vba] Но копирования с апреля, мая, июня в другие колонки не происходит... Можно ли что-нибудь сделать?
Вот посмотрите: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Dim rRg As Range, rCell As Range Dim lLr: lLr = 200 ' глубина строк
Set rRg = Intersect(Target, Range("E1:AH" & lLr)) If Not rRg Is Nothing Then For Each rCell In rRg Select Case rCell.Column ' номер столбика Case 5, 7, 9 Cells(rCell.Row, 11) = rCell.Value Cells(rCell.Row, 19) = rCell.Value Cells(rCell.Row, 27) = rCell.Value Cells(rCell.Row, 35) = rCell.Value
С помощью этого макроса разносятся январь, февраль, март как положено на квартал, полугодие, 9 месяцев и год. Далее иду к следующим месяцам (апрель, май, июнь): [vba]
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim i As Long, ii As Long Select Case Target.Column Case 5 To 10: i = 12 Case 13 To 18: i = 20 Case 21 To 26: i = 28 Case 29 To 34: i = 36 Case Else: GoTo iStop End Select For ii = i - Target.Column Mod 2 To 36 - Target.Column Mod 2 Step 8 Cells(Target.Row, ii) = Target.Value Next ii iStop: Application.EnableEvents = True End Sub
[/vba]
Попробуйте такой код [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim i As Long, ii As Long Select Case Target.Column Case 5 To 10: i = 12 Case 13 To 18: i = 20 Case 21 To 26: i = 28 Case 29 To 34: i = 36 Case Else: GoTo iStop End Select For ii = i - Target.Column Mod 2 To 36 - Target.Column Mod 2 Step 8 Cells(Target.Row, ii) = Target.Value Next ii iStop: Application.EnableEvents = True End Sub
Очень странно у меня работает. Возможно макрос не завершил работу из-за ошибки и не произошло включение событий. В прикрепленном файле три листа. На первом задача решается формулой, на втором макросом из предыдущего сообщения, а на третьем новый макрос. [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim i As Long, ii As Long i = Evaluate("CEILING(" & Target.Column + 4 & ",8)") - 4 Select Case Target.Column Case 5 To 10, 13 To 18, 21 To 26, 29 To 34 For ii = i - Target.Column Mod 2 To 36 - Target.Column Mod 2 Step 8 Cells(Target.Row, ii) = Target.Value Next ii End Select Application.EnableEvents = True End Sub
[/vba]
Для включения событий в файле, на всякий случай, есть макрос Enable_Events - Включение_Событий. На листе где формулы удалите данные по месяцам и пробуйте заполнять таблицу. На листах с макросами надо очистить диапазон E3:AJ38, а потом заполнять данные.
Очень странно у меня работает. Возможно макрос не завершил работу из-за ошибки и не произошло включение событий. В прикрепленном файле три листа. На первом задача решается формулой, на втором макросом из предыдущего сообщения, а на третьем новый макрос. [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim i As Long, ii As Long i = Evaluate("CEILING(" & Target.Column + 4 & ",8)") - 4 Select Case Target.Column Case 5 To 10, 13 To 18, 21 To 26, 29 To 34 For ii = i - Target.Column Mod 2 To 36 - Target.Column Mod 2 Step 8 Cells(Target.Row, ii) = Target.Value Next ii End Select Application.EnableEvents = True End Sub
[/vba]
Для включения событий в файле, на всякий случай, есть макрос Enable_Events - Включение_Событий. На листе где формулы удалите данные по месяцам и пробуйте заполнять таблицу. На листах с макросами надо очистить диапазон E3:AJ38, а потом заполнять данные.AlexM
AlexM, круто) Не бейте меня сильно... Я понимаю, что достал Вас, но есть еще проблемка... Если данные копирую с другой книги и вставляю в ваш документ (например, в январь вставляю сразу несколько строк), то почему-то разносится только одна первая вставленная ячейка, а остальные - нет. Пробовал и в 2003 и в 2010 excel'e. пробую на листах с макросами.
AlexM, круто) Не бейте меня сильно... Я понимаю, что достал Вас, но есть еще проблемка... Если данные копирую с другой книги и вставляю в ваш документ (например, в январь вставляю сразу несколько строк), то почему-то разносится только одна первая вставленная ячейка, а остальные - нет. Пробовал и в 2003 и в 2010 excel'e. пробую на листах с макросами.Leojse
Сообщение отредактировал Leojse - Понедельник, 03.12.2012, 10:55
Так и должно быть. Задача стояла "данные вводятся вручную", стало быть по одному значению. А так получается совсем другой вопрос, другое решение и другой макрос.
PS. А какими блоками вставляете. В пределах одного квартала или больше? Например, вставляете диапазон E13:J24 Так?
Так и должно быть. Задача стояла "данные вводятся вручную", стало быть по одному значению. А так получается совсем другой вопрос, другое решение и другой макрос.
PS. А какими блоками вставляете. В пределах одного квартала или больше? Например, вставляете диапазон E13:J24 Так?AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Сообщение отредактировал AlexM - Понедельник, 03.12.2012, 11:26
AlexM, последний вопрос, чисто теоретический. Если в отчете уже вбиты несколько месяцев, то при добавлении макроса данные не копируются. Выход - перебивать данные?
AlexM, последний вопрос, чисто теоретический. Если в отчете уже вбиты несколько месяцев, то при добавлении макроса данные не копируются. Выход - перебивать данные?Leojse
Допустим вбиты данные за январь, а ячейки квартала, полугодия, 9 месяцев и года не заполнены. Добавляете макрос в модуль листа, если его там нет. Выделяете данные месяца, копируете и вставляете на то же место. Должно получится.
Допустим вбиты данные за январь, а ячейки квартала, полугодия, 9 месяцев и года не заполнены. Добавляете макрос в модуль листа, если его там нет. Выделяете данные месяца, копируете и вставляете на то же место. Должно получится.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Наверно, зря заикнулся по поводу последнего вопроса... А можно ли сделать так, чтобы макрос не копировал ячейки определенного цвета (в моем примере - зеленого)? То есть чтобы макрос их игнорировал?
Наверно, зря заикнулся по поводу последнего вопроса... А можно ли сделать так, чтобы макрос не копировал ячейки определенного цвета (в моем примере - зеленого)? То есть чтобы макрос их игнорировал?Leojse
Сообщение отредактировал Leojse - Понедельник, 03.12.2012, 14:53